Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
29
Добавлен:
16.04.2013
Размер:
248.32 Кб
Скачать

5.31.3. Цикл Repeat (Repeat Loop)

Синтаксис:

looping_statement::== repeat (conditional) statement

Цикл repeat выполняется конечное число раз, условие (conditional) можеит быть константой, переменной или сигналом, но обязательно быть целым числом. Ниже приведен пример цикла repeat

module comply;

int count;

initial begin

count = 128;

repeat (count) begin

$display("%d seconds to comply", count);

count = count - 1;

end

end

endmodule

Note: The loop will execute 128 times regardless of whether the value of count changes after entry to the loop

5.31.4. Вечный цикл (Forever Loop)

Синтаксис:

forever statement

Цикл forever выполняется непрерывно, пока моделирование не будет остановлено командой $finish. Ниже приведен пример вечного цикла

reg clock;

initial begin

clock = 1'b0;

forever #5 clock = ~clock;

end

initial #2000 $finish;

5.32.Файлы в Verilog

5.32.1. Открытие файла (Opening a file)

Ключевые слова: $open

Синтаксис:

<file_handle> = $fopen("<file_name");

В процессе моделирования в языке Verilog имеется возможность записывать результаты прогона в файл, что в дальнейшем позволяет провести его более подробный анализ

Ниже приведен пример открытия файлов на запись.

integer handleA, handleB;

// an integer has 32 bits so is perfect

// for this usage

initial begin

handleA = $fopen("myfile.out);

// handleA = 0000_0000_0000_0000_0000_0000_0000_0010

handleB = $fopen("anotherfile.out");

// handleB = 0000_0000_0000_0000_0000_0000_0000_0100

end

Когда файл открыт, его можно использовать для записи. Всего допустимо открыть не более 31 файла одновременно.

5.32.2. Запись в файл (Writing to a file)

Ключевые слова: $fdisplay, $fmonitor, $fwrite Синтаксис:

$fdisplay(<file_handles>, --same as display--); $fmonitor(<file_handles>, --same as monitor--); $fwrite(<file_handles>, --same as write--);

Для записиможет быть открыто несколько файлов, ниже приведен пример записи числа 0000_0000_0000_0000_0000_0000_0000_0011 в файлы.

integer channelsA;

initial begin

channelsA = handleA | 1;

$fdisplay(channelsA, "Hello");

end

5.32.3. Закрытие файла (Closing a file)

Ключевое слово: $fclose

Синтаксис:

$fclose(handle);

Когда используется несколько файлов, то обычно файлы, которые уже не требуются закрывают для облегчения жизни несчастной операционной системе. Для этого и служит директива $fclose, после закрытия работа с данным файлом естественно невозможна.

5.32.4. Инициализация регистровых файлов (памяти) (Initialising Memories )

Ключевые слова: $readmemb, $readmemh

Синтаксис:

$readmemb("<file_name>", <memory_name>");

$readmemb("<file_name>", <memory_name>, memory_start");

$readmemb("<file_name>", <memory_name>, memory_start, memory_finish");

Для инициализации регистровых файлов используется следующая конструкция. Содержимое регистрового файла храниться в файле с форматом, приведенном ниже, все адреса 16-ричные

@003

00000011

00000100

00000101

00000110

00000111

00001000

00001001

Для улучшения читаемости возможна и такая запись

@003

00000011

00000100

00000101

@006

00000110

00000111

@008

00001000

00001001

Пример инициализации памяти приведен ниже

module testmemory;

reg [7:0] memory [9:0];

integer index;

initial begin

$readmemb("mem.dat", memory);

for(index = 0; index < 10; index = index + 1)

$display("memory[%d] = %b", index[4:0], memory[index]);

end

endmodule // testmemory

Содержимое файла файла mem.data имеет вид

1000_0001

1000_0010

0000_0000

0000_0001

0000_0010

0000_0011

0000_0100

0000_0101

0000_0110

0000_0000

Соседние файлы в папке Конспект -Введение в Cadence DSD2