МАРСОХОД

Open Source Hardware Project

Симулятор ModelSim

Хочу рассказать немного про симуляцию цифровых проектов. Да-да. Тема эта уже поднималась несколько раз, и, конечно – это неисчерпаемая тема. Я уже когда-то писал про симуляцию средствами Quartus II версии 9, но в последней версии Quartus II v10 этого «родного» альтеровского симулятора уже нет. Сказать по правде я расстроился. Для маленьких проектов этого симулятора вполне хватало. Потом я написал статью про симулятор iverilog – это простой open source симулятор – вполне приличная вещь. И вот теперь хочу кратко рассказать о программе ModelSim:

ModelSim Altera

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 мы видим примерно вот такой экран (кликните на изображение, чтобы увидеть его крупнее):

Симуляция проекта с помощью ModelSim Altera Starter Edition

Первое, что нам нужно сделать - это перейти в рабочую папку. Для этого выбираем пункт меню File/Change Directory...

_Симуляция проекта с помощью ModelSim Altera Starter Edition

В открывшемся диалоге указываем путь к нашему проекту:

_Симуляция проекта с помощью ModelSim Altera Starter Edition

После выбора папки нужно скомпилировать проект в библиотеку. Выбираем пенкт меню Compile/Compile...

Симуляция проекта с помощью ModelSim Altera Starter Edition

Здесь нужно выбрать все файлы нашего проекта. Диалог позволяет выбирать одновременно несколько файлов.

Симуляция проекта с помощью ModelSim Altera Starter Edition

Выбрали файлы - нажимаем кнопку Compile.

Симуляция проекта с помощью ModelSim Altera Starter Edition

ModelSim спрашивает имя библиотеки, которая будет создана. По умолчанию предлагается имя work, ну вот пусть такое и будет. Отвечаем Yes. После компиляции в окне Transcript проверяйте, нет ли ошибок в исходных файлах.

Симуляция проекта с помощью ModelSim Altera Starter Edition

Обратите внимание, что в окне Library появилась новая библиотека work. так и должно быть. Теперь выбираем пункт меню Simulate/Start Simulation...

После этого откроем для просмотра еще два окна с помощью пунктов меню View\Objects... и View\Wave...

Симуляция проекта с помощью ModelSim Altera Starter Edition

В окне Objects нужно выбрать интересующие нас сигналы (можно все) и добывить их в окно просмотра формы сигналов Wave.

Симуляция проекта с помощью ModelSim Altera Starter Edition

Вот теперь и посмотрим, что у нас получается в симуляции. Делаем несколько шагов симуляции вперед с помощью пункта меню  Simulate\Run\Run100...

А вот и результат симуляции:

Симуляция проекта средствами ModelSim Altera Starter Edition

Обратите внимание, что и текстовый вывод в окне Transcript и сами сигналы в окне Wave точно такие же как и в случае симуляции с помощью open source icarus-verilog.

Ну и вот - по форме сигналов мы видим, что наш счетчик работает правильно - так как и задумывалось нами!

 

 

 

Комментарии  

0 #20 me022 08.10.2018 08:28
Хочу создать собственный компонент под Ниос, но он состоит из топ модуля (подключение к Авалон), подключаемого модуля (рабочий модуль), +файл тестбенча, итого 3 верилог файла.
Надо ли писать так:
initial
begin
$dumpfile("out. vcd");
$dumpvars(0,tes t_counter);
$dumpvars(0,cou nter_inst);
$dumpvars(0,под ключенный к counter_inst модуль);
end
Спасибо
0 #19 Fynjy 23.11.2017 15:02
Про это все понятно что и з пустого в порожнее тереть. Лучше расскажите как vh файлы симулировать которые подключаются к обычным v, через include?
Как их автоматом чтобы ModelSim подхватывал?
+1 #18 nckm 28.01.2017 16:23
Цитирую Halmach:
Кто-нибудь помогите установить Modelsim на ubuntu.При запуске выдает "./vish: error while loading shared libraries: libXft.so.2: cannot open shared object file: No such file or directory".

попробуйте установить дополнительные библиотеки sudo apt-get install libxft2
+1 #17 Halmach 28.01.2017 12:29
Кто-нибудь помогите установить Modelsim на ubuntu.При запуске выдает "./vish: error while loading shared libraries: libXft.so.2: cannot open shared object file: No such file or directory".
+2 #16 Dmitrii Radov 27.12.2014 10:33
Цитирую Молин Дмитрий:
Цитирую VakuL47:
Такая же проблема, как у Vadim и Ia.
Моделсим выдает прямые линии, при том, что делал все, как написано в статье. Так же писал свои программы и даже пытался посмотреть на работу элементов из стандартных библиотек, но результат один и тот же.



Было то же, решилось следующим образом: при выполнении Simulate\Start Simulation нужно выбрать только один файл тестбенча, я сначала оба выбирал - были прямые линии. Чтобы импульсы были похожи на те, что на скриншотах, можно уменьшить масштаб графика (правой кнопкой - далее найдете).



Понял - если задать оба модуля(тестируе мый и тестбенч) в одном файле, то ModelSim не сможет отобразить результатов симуляции. Ну а вообще такое возможно?
+1 #15 Dmitrii Radov 27.12.2014 09:51
Используем тип wire для моделирования выходного сигнала, а не reg только затем, чтобы не "хранить" состояние сигнала в регистре и избежать аппаратных затрат?
+1 #14 Dmitrii Radov 27.12.2014 09:21
Господа, мало ли кто ответит, при прочтении статьи появилось пара глупых вопросов:
1) Можно ли тестбенч писать в том же файле, что и тестируемый модуль, просто тестбенч будет реализован в качестве другого модуля?(знаю обнаглел :oops: ибо это можно легко нагуглить, но мало ли кому не в тягость)
2) Зачем создавался(был объявлен) сигнал wire [7:0] data_cnt в тестбенче?
Правильно ли я понял:
counter counter_inst(re set, clk, wdata, wr, data_cnt); - этой строчкой мы создаем инстанс модуля counter и подменяем выходной регистр data сигналом data_cnt? и какой смысл этого действия, почему нельзя было заменить сигналом с тем же именем data или даже регистром data, как в тестируемом модуле? Может ли вообще регистр быть выходом тестбенча, или всегда необходим только сигнал, в качестве выхода?
+2 #13 Молин Дмитрий 03.07.2014 12:07
Цитирую VakuL47:
Такая же проблема, как у Vadim и Ia.
Моделсим выдает прямые линии, при том, что делал все, как написано в статье. Так же писал свои программы и даже пытался посмотреть на работу элементов из стандартных библиотек, но результат один и тот же.


Было то же, решилось следующим образом: при выполнении Simulate\Start Simulation нужно выбрать только один файл тестбенча, я сначала оба выбирал - были прямые линии. Чтобы импульсы были похожи на те, что на скриншотах, можно уменьшить масштаб графика (правой кнопкой - далее найдете).
0 #12 nikson 16.06.2014 12:05
ребят кто может помочь решить пару задач в modlesim ???
+2 #11 VakuL47 30.03.2014 09:19
Такая же проблема, как у Vadim и Ia.
Моделсим выдает прямые линии, при том, что делал все, как написано в статье. Так же писал свои программы и даже пытался посмотреть на работу элементов из стандартных библиотек, но результат один и тот же.
+5 #10 Sem 30.04.2013 09:51
Если у Вас возникают проблемы с запуском ModelSim типа: "Error: can't read "map()": no such element in array" то вам сюда: http://www.altera.com/support/kdb/solutions/rd10132011_578.html или в свойствах ярлыка жестко задать рабочий каталог
+5 #9 Mark 19.02.2013 05:33
Прежде всего спасибо за очень хороший сайт,душа
радуется за когда- то родной Таганрог (более 20лет назад учился в тогда еще Радиотехническо м Институте),
Теперь вопрос- куда исчез сайт http://www.modelsim.ru ?
+5 #8 Ia 10.11.2012 17:02
Помогите разобраться, у меня тоже прямые линии как у Vadima, и подписи на оси не "ns" как у Вас а "ps"
+3 #7 nckma 30.07.2012 11:31
Цитирую 3ABXO3:
как осуществить моделирование работы UFM блока в modelsim?

написал статью на эту тему: https://marsohod.org/11-blog/207-ufmmodel
+3 #6 3ABXO3 25.07.2012 13:04
как осуществить моделирование работы UFM блока в modelsim?
+3 #5 СлесарьШарапов 17.05.2012 09:47
Хорошо было если бы Вы освятили тему интеграции ModelSim в Quartus. Такая возможность имеется насколько я понимаю, но слабо это освящено.
+3 #4 kd2k9 06.09.2011 09:48
пардон, проблема решена, надо было просто значения в хекс перевести, а не децимальные)
+3 #3 kd2k9 06.09.2011 09:40
вопрос по вашему примеру:
после сигнала wr записывает следующим значение 85, а не 55. текст скопирован один в один.
+10 #2 Vadim 06.06.2011 15:20
Теперь проблема с modelsim , все делаю как описано выше в результате на графиках прямые линии. У вас в примере на против сигналов стоят значения а у меня надписи Hiz , а в графическом окне напротив контролируемых сигналов написано No Data.В чем может быть проблема?
+3 #1 furius 15.12.2010 17:59
Круто. Вот этого ждал. Расскажите, как тестбенчи писать :)

Добавить комментарий



facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Статьи о разном Симулятор ModelSim