Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Verilog_posobie.docx
Скачиваний:
24
Добавлен:
11.06.2015
Размер:
86.73 Кб
Скачать

3.4.33.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

 

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

 

Синтаксис:

 forever statement

 

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

 

           reg clock;

 

           initial begin

              clock = 1'b0;

      forever #5 clock = ~clock;

             end

 

           initial #2000 $finish;

 

3.4.34. Работа с файлами в Verilog

3.4.34.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 файла одновременно.

 

3.4.34.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

 

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

 

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

Синтакс: $fclose(handle);

 

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

 

3.4.35. Инициализация регистровых файлов (памяти) (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

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]