ViKo 1 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Имею учебный проект, в котором есть файл со следующим содержимым (из темы про палки в 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 матюками атрибутами - пустое дело. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Когда же указываю тестбенч в том же файле, где и сам пример, то симуляция работает как RTL, без учета задержек. Кто виноват? и Что делать? предварительной компиляции файла при этом нет ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexus.mephi 0 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Вот тут: always_ff @(posedge clk) a = !a; неблокирующее присваивание не нужно поставить? Еще посмотрите, может у вас в отдельном файле timescale другой и это как-то повлияло. Во многих книгах по Verilog написано, что для каждого модуля должен быть свой файл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба предварительной компиляции файла при этом нет ? Все равно, компилирую проект заново, или нет. Вот тут: неблокирующее присваивание не нужно поставить? не нужно. Не имеет значения. Еще посмотрите, может у вас в отдельном файле timescale другой и это как-то повлияло. одинаковые. Не имеет значения. Во многих книгах по Verilog написано, что для каждого модуля должен быть свой файл. Когда задаю тестбенч в том же файле, Quatrus это принимает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба а скрипты для запуска м-сима одинаковые? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Все равно, компилирую проект заново, или нет. Как это все равно то ? У вас есть два файла : нетлист и тестбенч с модулем. Если тестбенч компилируется последним, то в либе от Gate модуля ни останется ни следа. А цеплять sdo к RTL еще ни кто не умеет %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба а скрипты для запуска м-сима одинаковые? В скриптах не разбираюсь. Вот что было в окне 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 Вижу по логам, что библиотеки не прилепились, правильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Чтобы он не компилировался, я его обложил атрибутами. атрибутами для синтеза вырезали код для симулятора? :07: это сильно Кста вы привели логи работы симулятора, а не скрипты для синтеза моделирования. Но из них все равно следует правильность моего предположения %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Но из них все равно следует правильность моего предположения %) Я неясно выразился, наверное. Конечно, проект перекомпилировался, было бы там чего компилировать. Но на результатах это не сказывается. "Ты скажи, какая вина на мне, боярин?!" (с) Иван Васильевич. По поводу скриптов - коль из отдельного файла тот же тестбенч симулируется нормально, то... ? По-моему, и скрипты в логах имеются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба "Ты скажи, какая вина на мне, боярин?!" (с) Иван Васильевич. дык уже сказал. Смотрим что делал моделсим 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 лежит в либе? %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Теперь вопрос: какая именно модель модуля exGlitch лежит в либе? %) Да, верно. Еще один экспериментик провел - добавил в файл с тестбенчем тестируемый модуль. А чтобы не синтезировался (иначе Quartus ругается на две копии модуля), обложил матюками упомянутыми атрибутами. И Gate симуляция с использованием внешнего файла (в котором уже есть копия тестируемого модуля) потеряла задержки. Нельзя ли заставить ModelSim компилировать с учетом задержек? Библиотеки подключить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба нельзя ли заставить ModelSim компилировать с учетом задержек? Библиотеки подключить? Самый простой способ НЕ компилировать RTL модуль. Вот на вскидку как это можно сделать : 1. Разнести по файлам 2. Компилировать нетлист ПОСЛЕ файла тестбенча с модулем 3. Дать RTL модулю другое имя 4. Вырезать RTL модуль макросами синтеза и добавить определение макроса Gate моделирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба Самый простой способ НЕ компилировать RTL модуль. Вот на вскидку как это можно сделать : 1. Разнести по файлам 2. Компилировать нетлист ПОСЛЕ файла тестбенча с модулем 3. Дать RTL модулю другое имя 4. Вырезать RTL модуль макросами синтеза и добавить определение макроса Gate моделирования. Да, именно, этого я и хочу. По файлам разносить - это у меня уже есть. Компилировать устройство после тестбенча из Quartus не получается. Другое имя - аналогично. А вот 4-й пункт - как это? Как заставить ModelSim не компилировать весь файл, а только тот тестбенч. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба По файлам разносить - это у меня уже есть. Компилировать устройство после тестбенча из Quartus не получается. Другое имя - аналогично. А вот 4-й пункт - как это? Как заставить ModelSim не компилировать весь файл, а только тот тестбенч. странно, вы же стандарт читали, неужели не видели магических `ifdef `endif ? %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 октября, 2010 Опубликовано 25 октября, 2010 · Жалоба странно, вы же стандарт читали не до конца :) неужели не видели магических `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. Как-то все-же хреновато... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться