19.02.2016 Моделирование verilog

Материал из SRNS
Перейти к: навигация, поиск
(А теперь всё то же самое - автоматически)
(Более сложный пример с автоматизацией процессов)
Строка 86: Строка 86:
  
 
Итак, исходники:
 
Итак, исходники:
* тестируемый модуль test.v:
+
* тестируемый модуль my_adder.v:
{{Hider|title = test.v:
+
{{Hider|title = my_adder.v:
 
  |content = <source lang="verilog">
 
  |content = <source lang="verilog">
 
`include "params.v"
 
`include "params.v"
Строка 119: Строка 119:
 
  |hidden = 1
 
  |hidden = 1
 
}}
 
}}
 +
* тесбенч test.v:
 +
{{Hider|title = my_adder.v:
 +
|content = <source lang="verilog">
 +
`timescale 1ns/1ns
  
 +
module tb();
 +
  reg clk = 1'b0;
 +
  reg resetn;
 +
 +
  initial begin
 +
      resetn = 0;
 +
      #10
 +
      resetn = 1;
 +
     
 +
  end
 +
 
 +
  always #5 clk=!clk;
 +
 +
  reg [4:0] cnt=5'b0;
 +
 +
  always @(posedge clk) begin
 +
      cnt <= cnt+1;
 +
  end
 +
 +
  wire [10:0] out;
 +
 
 +
  my_adder adder
 +
    (
 +
      .clk      (clk),
 +
      .resetn    (resetn),
 +
      .in        (cnt),
 +
      .sum      (out)
 +
      );
 +
 +
  integer    fd_cnt;
 +
  integer    fd_sum;
 +
  initial begin
 +
      fd_cnt = $fopen("cnt.txt", "w");
 +
      fd_sum = $fopen("sum.txt", "w");
 +
  end
 +
 
 +
  always @(posedge clk) begin
 +
      if (resetn!=1'b0) begin
 +
$fdisplay(fd_cnt, "%d", cnt);
 +
$fdisplay(fd_sum, "%d", adder.sum);
 +
      end
 +
  end  
 +
 +
 
 +
endmodule // tb
 +
</source>
 +
|hidden = 1
 +
}}
 +
* Файл параметров inc/params.v:
 +
{{Hider|title = my_adder.v:
 +
|content = <source lang="verilog">
 +
`define SUM_LENGTH 11
 +
</source>
 +
|hidden = 1
 +
}}
  
 
Автоматизация процессов будет осуществляться  
 
Автоматизация процессов будет осуществляться  

Версия 11:30, 4 ноября 2016

Итак, задача состоит в том, чтобы с помощью Modelsim провести моделирование кода Verilog.

Содержание

Создаём файл, который будем моделировать

`timescale 1ns/1ns

module tb();
   reg clk = 1'b0;

   always #5 clk=!clk;

   reg [4:0] cnt=5'b0;

   always @(posedge clk) begin
      cnt <= cnt+1;
   end
   
endmodule

Первая строка задаёт темп моделирования. Строка "always #5 clk=!clk;" задаёт тактовый сигнал - каждые 5 интервалов времени, указанных в timescale. Остальной код тривиален.

Создаём новую библиотеку. Пусть для примера она называется "tb":

20160219 questa newlib 1.png 20160219 questa newlib 2.png

Компилируем файл verilog.

20160219 questa compile.png 20160219 questa compile 2.png

Попутно указываем путь к подключаемым чере "`include" файлам, нажав кнопку "Default options":

20160316 MentorIncludeDIr.png

20160219 questa compile 3.png

Запускаем симуляцию - без оптимизации! (Simulate without optimization)

20160219 questa simulate 1.png

Добавляем требуемые сигналы в окно отображения Wave

20160219 questa simulate 2.png

Запускаем симуляцию - выбираем длительность и нажимаем кнопку запуска (справа от поля ввода длительности)

20160219 questa simulate 3.png

В окне Wave смотрим результаты

20160219 questa wave 1.png

А теперь всё то же самое - автоматически

Каждый раз делать всё это надоедает. Поэтому можно сделать всё из командного файла. Создаём файл "do.tcl"

# vlib tb
vlog -reportprogress 300 -work tb /tmp/Verilog/test.v
vsim -novopt tb.tb
add wave -position instertpoint \
    sim:/tb/clk \
    sim:/tb/cnt
run 100ns

Запускаем vsim командой:

vsim -do do.tcl

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

Более сложный пример с автоматизацией процессов

Рассмотрим пример, в котором есть тестируемый модуль my_adder.v, тестбенч test.v и включаемый файл inc/params.v. Будет два режима отладки:

  • отладка с просмотром временных диаграмм в modelsim
  • обработка данных в Matlab с помощью файла test.m

Итак, исходники:

  • тестируемый модуль my_adder.v:
  • тесбенч test.v:
  • Файл параметров inc/params.v:


Автоматизация процессов будет осуществляться

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.

Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты