Хочу рассказать немного про симуляцию цифровых проектов. Да-да. Тема эта уже поднималась несколько раз, и, конечно – это неисчерпаемая тема. Я уже когда-то писал про симуляцию средствами Quartus II версии 9, но в последней версии Quartus II v10 этого «родного» альтеровского симулятора уже нет. Сказать по правде я расстроился. Для маленьких проектов этого симулятора вполне хватало. Потом я написал статью про симулятор iverilog – это простой open source симулятор – вполне приличная вещь. И вот теперь хочу кратко рассказать о программе ModelSim:
ModelSim – это продукт компании MentorGraphics.
Я буду рассказывать об одной из его версий, а именно ModelSim Altera Starter Edition...
Итак, что нам нужно сделать, чтобы познакомиться с этой программой? Конечно, прежде всего нужно ее выкачать с сайта Альтеры. Зайдем на сайт компании Альтера: https://www.altera.com/products/software/quartus-ii/modelsim/qts-modelsim-index.html
Там увидите таблицу сравнительных характеристик различных версий ModelSim:
- ModelSIm Web Edition – больше не поддерживается компанией Альтера.
- ModelSim Altera Starter Edition - чуть медленне, чем Altera Editon и есть ограничение на размер проекта.
- ModelSim Altera Edition – самая быстрая версия симулятора, без ограничений на размер проекта. Стоимость $945 на сегодня (13 декабря 2010 года).
Мы выбираем Starter Edition - она бесплатна, не требует лицензии, может использоваться на небольших проектах до 10000 строк кода. Я думаю, что нам это с головой хватит. Переходим по ссылке Download. Я выбираю версию для Windows. Размер файла, который нужно загрузить – 586Мб. Это не мало, но и не слишком много по нынешним временам. В общем качаю и устанавливаю..
Теперь запускаем программу ModelSim. Если вы еще не успели выучить английский язык, то сделайте это сейчас (шутка). У программы ModelSim очень хорошая документация, но на английском языке. К счастью мир не без добрых людей. Я очень рекомендую сайт http://www.modelsim.ru – здесь вы найдете очень качественный перевод на русский язык практически всей документации ModelSim. Ну просто море полезной информации!
Я сейчас хочу просимулировать тот же пример, который я уже успешно пробовал симулировать с помощью iverilog. Это два файла counter.v и tcounter.v – они расположены у меня в папке c:\altera\10.0\projects\first.
Содержимое этих файлов вот такое:
counter.v - это счетчик с возможностью параллельной загрузки. Если сигнал wr активен в момент фронта clk, то в регистр счетчика будет записано число с входной шины wdata. Иначе значение счетчика будет увеличиваться на единицу каждый фронт clk.
module counter (
input wire reset,
input wire clk,
input wire [7:0]wdata,
input wire wr,
output reg [7:0]data
);
always @ (posedge clk or posedge reset)
if (reset)
data <= 8'h00;
else
if(wr)
data <= wdata;
else
data <= data + 8'h01;
endmodule
А вот это - vcounter.v - "тестбенч" для моего счетчика. Эта программа служит для проверки правильности работы модуля counter.
`timescale 1ns / 100ps
module test_counter;
reg reset, clk, wr;
reg [7:0]wdata;
wire [7:0] data_cnt;
counter counter_inst(reset, clk, wdata, wr, data_cnt);
always
#10 clk = ~clk;
initial
begin
clk = 0;
reset = 0;
wdata = 8'h00;
wr = 1'b0;
#50 reset = 1;
#4 reset = 0;
#50;
@(posedge clk)
#0
begin
wdata = 8'h55;
wr = 1'b1;
end
@(posedge clk)
#0
begin
wdata = 8'h00;
wr = 1'b0;
end
end
initial
begin
#400 $finish;
end
initial
begin
$dumpfile("out.vcd");
$dumpvars(0,test_counter);
$dumpvars(0,counter_inst);
end
initial
$monitor($stime,, reset,, clk,,, wdata,, wr,, data_cnt);
endmodule
Вот эти файлы я попробую использовать для демонстрации работы ModelSim.
Приступим!
При запуске программы ModelSim мы видим примерно вот такой экран (кликните на изображение, чтобы увидеть его крупнее):
Первое, что нам нужно сделать - это перейти в рабочую папку. Для этого выбираем пункт меню File/Change Directory...
В открывшемся диалоге указываем путь к нашему проекту:
После выбора папки нужно скомпилировать проект в библиотеку. Выбираем пенкт меню Compile/Compile...
Здесь нужно выбрать все файлы нашего проекта. Диалог позволяет выбирать одновременно несколько файлов.
Выбрали файлы - нажимаем кнопку Compile.
ModelSim спрашивает имя библиотеки, которая будет создана. По умолчанию предлагается имя work, ну вот пусть такое и будет. Отвечаем Yes. После компиляции в окне Transcript проверяйте, нет ли ошибок в исходных файлах.
Обратите внимание, что в окне Library появилась новая библиотека work. так и должно быть. Теперь выбираем пункт меню Simulate/Start Simulation...
После этого откроем для просмотра еще два окна с помощью пунктов меню View\Objects... и View\Wave...
В окне Objects нужно выбрать интересующие нас сигналы (можно все) и добывить их в окно просмотра формы сигналов Wave.
Вот теперь и посмотрим, что у нас получается в симуляции. Делаем несколько шагов симуляции вперед с помощью пункта меню Simulate\Run\Run100...
А вот и результат симуляции:
Обратите внимание, что и текстовый вывод в окне Transcript и сами сигналы в окне Wave точно такие же как и в случае симуляции с помощью open source icarus-verilog.
Ну и вот - по форме сигналов мы видим, что наш счетчик работает правильно - так как и задумывалось нами!
Подробнее...