Хочу рассказать немного про симуляцию цифровых проектов. Да-да. Тема эта уже поднималась несколько раз, и, конечно – это неисчерпаемая тема. Я уже когда-то писал про симуляцию средствами 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.
Ну и вот - по форме сигналов мы видим, что наш счетчик работает правильно - так как и задумывалось нами!

www.naliwator.narod.ru/.../
Увы.. время идет и некоторые сайты перестают работать..
давно не работает
У кого есть схрон сайта ?
Надо ли писать так:
initial
begin
$dumpfile("out. vcd");
$dumpvars(0,tes t_counter);
$dumpvars(0,cou nter_inst);
$dumpvars(0,под ключенный к counter_inst модуль);
end
Спасибо
Как их автоматом чтобы ModelSim подхватывал?
попробуйте установить дополнительные библиотеки sudo apt-get install libxft2
Понял - если задать оба модуля(тестируе мый и тестбенч) в одном файле, то ModelSim не сможет отобразить результатов симуляции. Ну а вообще такое возможно?
1) Можно ли тестбенч писать в том же файле, что и тестируемый модуль, просто тестбенч будет реализован в качестве другого модуля?(знаю обнаглел
2) Зачем создавался(был объявлен) сигнал wire [7:0] data_cnt в тестбенче?
Правильно ли я понял:
counter counter_inst(re set, clk, wdata, wr, data_cnt); - этой строчкой мы создаем инстанс модуля counter и подменяем выходной регистр data сигналом data_cnt? и какой смысл этого действия, почему нельзя было заменить сигналом с тем же именем data или даже регистром data, как в тестируемом модуле? Может ли вообще регистр быть выходом тестбенча, или всегда необходим только сигнал, в качестве выхода?
Было то же, решилось следующим образом: при выполнении Simulate\Start Simulation нужно выбрать только один файл тестбенча, я сначала оба выбирал - были прямые линии. Чтобы импульсы были похожи на те, что на скриншотах, можно уменьшить масштаб графика (правой кнопкой - далее найдете).
Моделсим выдает прямые линии, при том, что делал все, как написано в статье. Так же писал свои программы и даже пытался посмотреть на работу элементов из стандартных библиотек, но результат один и тот же.
радуется за когда- то родной Таганрог (более 20лет назад учился в тогда еще Радиотехническо м Институте),
Теперь вопрос- куда исчез сайт www.modelsim.ru ?
написал статью на эту тему: marsohod.org/.../207-ufmmodel
после сигнала wr записывает следующим значение 85, а не 55. текст скопирован один в один.