Перейти к содержанию
    

Gate Level Simulation в ModelSim из Quartus

Имею учебный проект, в котором есть файл со следующим содержимым (из темы про палки в RTL симуляции).

/* Проверка симуляции иголок */
`timescale 1 ns / 1 ps
/* example of glitch */
module exGlitch
(input wire clk,
  output logic a = 1, b, c);
  always_ff @(posedge clk) a = !a;
  always_comb begin
    b = a & clk;
    c = a ^ b;
  end
endmodule

/* synthesis translate_off */
module exGlitch_tb;
  logic clk, a, b, c;
  exGlitch eG(clk, a, b, c);
  initial clk = 1;    
  always #5 clk = !clk;
endmodule
/* synthesis translate_on */

Тот же exGlitch_tb имею в отдельном файле.

Когда запускаю gate симуляцию из Quartus в ModelSim (с помощью NativeLink), и указываю тестбенч из отдельного файла, все симулируется нормально. Когда же указываю тестбенч в том же файле, где и сам пример, то симуляция работает как RTL, без учета задержек. Кто виноват? и Что делать?

Обложил exGlitch_tb матюками атрибутами - пустое дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

предварительной компиляции файла при этом нет ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот тут:

always_ff @(posedge clk) a = !a;

неблокирующее присваивание не нужно поставить?

Еще посмотрите, может у вас в отдельном файле timescale другой и это как-то повлияло. Во многих книгах по Verilog написано, что для каждого модуля должен быть свой файл.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

предварительной компиляции файла при этом нет ?

Все равно, компилирую проект заново, или нет.

 

Вот тут:

неблокирующее присваивание не нужно поставить?

не нужно. Не имеет значения.

Еще посмотрите, может у вас в отдельном файле timescale другой и это как-то повлияло.

одинаковые. Не имеет значения.

Во многих книгах по Verilog написано, что для каждого модуля должен быть свой файл.

Когда задаю тестбенч в том же файле, Quatrus это принимает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все равно, компилирую проект заново, или нет.

Как это все равно то ?

 

У вас есть два файла : нетлист и тестбенч с модулем. Если тестбенч компилируется последним, то в либе от Gate модуля ни останется ни следа. А цеплять sdo к RTL еще ни кто не умеет %)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а скрипты для запуска м-сима одинаковые?

В скриптах не разбираюсь. Вот что было в окне Transcript в ModelSim при тестбенче из того же файла:

# Reading C:/Programs/Altera/91/modelsim_ase/tcl/vsim/pref.tcl 
# do exGlitch_run_msim_gate_verilog.do 
# if {[file exists gate_work]} {
# vdel -lib gate_work -all
# }
# vlib gate_work
# vmap work gate_work
# Copying C:\Programs\Altera\91\modelsim_ase\win32aloem/../modelsim.ini to modelsim.ini
# Modifying modelsim.ini
# ** Warning: Copied C:\Programs\Altera\91\modelsim_ase\win32aloem/../modelsim.ini to modelsim.ini.
# Updated modelsim.ini.
# 
# vlog -vlog01compat -work work +incdir+. {exGlitch_8_1200mv_85c_slow.vo}
# Model Technology ModelSim ALTERA vlog 6.5b Compiler 2009.10 Oct 1 2009
# -- Compiling module exGlitch
# 
# Top level modules:
# exGlitch
# 
# vlog -sv -work work +incdir+D:/ViKo/Projects/Quartus_Projects/Quartus_exGlitch {D:/ViKo/Projects/Quartus_Projects/Quartus_exGlitch/exGlitch.sv}
# Model Technology ModelSim ALTERA vlog 6.5b Compiler 2009.10 Oct 1 2009
# -- Compiling module exGlitch
# -- Compiling module exGlitch_tb
# 
# Top level modules:
# exGlitch_tb
# 
# vsim -t 1ps +transport_int_delays +transport_path_delays -L altera_ver -L cycloneiii_ver -L gate_work -L work -voptargs="+acc" exGlitch_tb
# vsim +transport_int_delays +transport_path_delays -L altera_ver -L cycloneiii_ver -L gate_work -L work -voptargs=\"+acc\" -t 1ps exGlitch_tb 
# Loading sv_std.std
# Loading work.exGlitch_tb
# Loading work.exGlitch
# 
# add wave *
# view structure
# .main_pane.structure.interior.cs.body.struct
# view signals
# .main_pane.objects.interior.cs.body
# run 120 ns

А вот что, когда тестбенч в отдельном файле

# Reading C:/Programs/Altera/91/modelsim_ase/tcl/vsim/pref.tcl 
# do exGlitch_run_msim_gate_verilog.do 
# if {[file exists gate_work]} {
# vdel -lib gate_work -all
# }
# vlib gate_work
# vmap work gate_work
# Copying C:\Programs\Altera\91\modelsim_ase\win32aloem/../modelsim.ini to modelsim.ini
# Modifying modelsim.ini
# ** Warning: Copied C:\Programs\Altera\91\modelsim_ase\win32aloem/../modelsim.ini to modelsim.ini.
# Updated modelsim.ini.
# 
# vlog -vlog01compat -work work +incdir+. {exGlitch_8_1200mv_85c_slow.vo}
# Model Technology ModelSim ALTERA vlog 6.5b Compiler 2009.10 Oct 1 2009
# -- Compiling module exGlitch
# 
# Top level modules:
# exGlitch
# 
# vlog -sv -work work +incdir+D:/ViKo/Projects/Quartus_Projects/Quartus_exGlitch {D:/ViKo/Projects/Quartus_Projects/Quartus_exGlitch/exGlitch_tb.sv}
# Model Technology ModelSim ALTERA vlog 6.5b Compiler 2009.10 Oct 1 2009
# -- Compiling module exGlitch_tb
# 
# Top level modules:
# exGlitch_tb
# 
# vsim -t 1ps +transport_int_delays +transport_path_delays -L altera_ver -L cycloneiii_ver -L gate_work -L work -voptargs="+acc" exGlitch_tb
# vsim +transport_int_delays +transport_path_delays -L altera_ver -L cycloneiii_ver -L gate_work -L work -voptargs=\"+acc\" -t 1ps exGlitch_tb 
# Loading sv_std.std
# Loading work.exGlitch_tb
# Loading work.exGlitch
# Loading cycloneiii_ver.cycloneiii_routing_wire
# Loading cycloneiii_ver.cycloneiii_io_obuf
# Loading cycloneiii_ver.cycloneiii_io_ibuf
# Loading cycloneiii_ver.cycloneiii_lcell_comb
# Loading altera_ver.dffeas
# SDF 6.5b Compiler 2009.10 Oct 1 2009
# 
# Loading instances from exGlitch_8_1200mv_85c_v_slow.sdo
# Loading altera_ver.PRIM_GDFF_LOW
# Loading timing data from exGlitch_8_1200mv_85c_v_slow.sdo
# ** Note: (vsim-3587) SDF Backannotation Successfully Completed.
# Time: 0 ps Iteration: 0 Region: /exGlitch_tb File: D:/ViKo/Projects/Quartus_Projects/Quartus_exGlitch/exGlitch_tb.sv
# 
# add wave *
# view structure
# .main_pane.structure.interior.cs.body.struct
# view signals
# .main_pane.objects.interior.cs.body
# run 120 ns

Сейчас сам почитаю :)

 

Если тестбенч компилируется последним, то в либе от Gate модуля ни останется ни следа.

Чтобы он не компилировался, я его обложил атрибутами.

 

Похоже, атрибуты synthesis translate_off Quartus'у до лампочки.

Если задаю топ-модуль exGlitch_tb, получаю ошибку:

Error: Can't synthesize current design -- Top partition does not contain any logic

Вижу по логам, что библиотеки не прилепились, правильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы он не компилировался, я его обложил атрибутами.

атрибутами для синтеза вырезали код для симулятора? :07: это сильно :biggrin:

 

Кста вы привели логи работы симулятора, а не скрипты для синтеза моделирования. Но из них все равно следует правильность моего предположения %)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но из них все равно следует правильность моего предположения %)

Я неясно выразился, наверное. Конечно, проект перекомпилировался, было бы там чего компилировать.

Но на результатах это не сказывается.

"Ты скажи, какая вина на мне, боярин?!" (с) Иван Васильевич.

 

По поводу скриптов - коль из отдельного файла тот же тестбенч симулируется нормально, то... ?

По-моему, и скрипты в логах имеются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Ты скажи, какая вина на мне, боярин?!" (с) Иван Васильевич.

дык уже сказал. Смотрим что делал моделсим

vlog -vlog01compat -work work +incdir+. {exGlitch_8_1200mv_85c_slow.vo}

скомпилировал нетлист, теперь у вас в либе gate модель модуля exGlitch. Затем

vlog -sv -work work +incdir+D:/ViKo/Projects/Quartus_Projects/Quartus_exGlitch {D:/ViKo/Projects/Quartus_Projects/Quartus_exGlitch/exGlitch.sv}

скомпилировали файл внутри которого RTL код модуля exGlitch и тестбенч. Теперь вопрос: какая именно модель модуля exGlitch лежит в либе? %)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь вопрос: какая именно модель модуля exGlitch лежит в либе? %)

Да, верно. Еще один экспериментик провел - добавил в файл с тестбенчем тестируемый модуль. А чтобы не синтезировался (иначе Quartus ругается на две копии модуля), обложил матюками упомянутыми атрибутами. И Gate симуляция с использованием внешнего файла (в котором уже есть копия тестируемого модуля) потеряла задержки.

Нельзя ли заставить ModelSim компилировать с учетом задержек? Библиотеки подключить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нельзя ли заставить ModelSim компилировать с учетом задержек? Библиотеки подключить?

Самый простой способ НЕ компилировать RTL модуль. Вот на вскидку как это можно сделать :

1. Разнести по файлам

2. Компилировать нетлист ПОСЛЕ файла тестбенча с модулем

3. Дать RTL модулю другое имя

4. Вырезать RTL модуль макросами синтеза и добавить определение макроса Gate моделирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Самый простой способ НЕ компилировать RTL модуль. Вот на вскидку как это можно сделать :

1. Разнести по файлам

2. Компилировать нетлист ПОСЛЕ файла тестбенча с модулем

3. Дать RTL модулю другое имя

4. Вырезать RTL модуль макросами синтеза и добавить определение макроса Gate моделирования.

Да, именно, этого я и хочу.

По файлам разносить - это у меня уже есть. Компилировать устройство после тестбенча из Quartus не получается. Другое имя - аналогично. А вот 4-й пункт - как это? Как заставить ModelSim не компилировать весь файл, а только тот тестбенч.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По файлам разносить - это у меня уже есть. Компилировать устройство после тестбенча из Quartus не получается. Другое имя - аналогично. А вот 4-й пункт - как это? Как заставить ModelSim не компилировать весь файл, а только тот тестбенч.

странно, вы же стандарт читали, неужели не видели магических `ifdef `endif ? %)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

странно, вы же стандарт читали
не до конца :)

неужели не видели магических `ifdef `endif ? %)

Допустим, будет у меня определение SIMULATE (или не будет). Если я запрещу компилировать свой модуль, что же мне тогда симулировать?

Нужно, чтобы Quartus скомпилировал, а ModelSim - нет.

 

А какой смысл имеет "Design Instance name in test bench" в NativeLink settings?

 

Уделал!

/* Проверка симуляции иголок */
`timescale 1 ns / 1 ps
`define NOSIMULATE

`ifdef NOSIMULATE
/* example of glitch */
module exGlitch
(input wire clk,
  output logic a = 1, b, c);
  always_ff @(posedge clk) a = !a;
  always_comb begin
    b = a & clk;
    c = a ^ b;
  end
endmodule

`else
module exGlitch_tb;
  logic clk, a, b, c;
  exGlitch eG(clk, a, b, c);
  initial clk = 1;    
  always #5 clk = !clk;
endmodule
`endif

Сначала компилирую в Quartus'е, потом комментирую `define NOSIMULATE, сохраняю, и запускаю EDA Gate Level Simulation. Как-то все-же хреновато...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...