| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Verilog команда... http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=6258 |
Страница 1 от 1 |
| Автор: | Trigger [ Нед Ное 09, 2008 12:53 am ] |
| Заглавие: | Verilog команда... |
Има ли някаква команда или директива (тип $display(...,....);), която да дисплейва номера на реда на '.v' файла, от който е извикана.. Идеята е следната...testbench -а представлява един task, който прави разни проверки (състояния на регистри и т.н...)..и понеже този task се вика повече от 50 пъти ми се иска да знам на кое подред извикване (номер на реда) ми връща грешен резултат (евентуално) от проверките... Има вариант при всяко извикване да си инкрементвам един брояч...но ако има подобна команда ми се струва по добро решение... В една книжка има няколко реда за команда $settrace...но редактора не ми я разпознава като служебна... |
|
| Автор: | Trigger [ Нед Ное 09, 2008 9:38 pm ] | |||||||||
| Заглавие: | ||||||||||
Testbench-а ще си го има за да симулирам правилната работа на дизайна...Логиката не създава проблем...в смисъл дизайна е синтезируем... По долу съм дал пример за това, което се опитвам да направя (показал съм само важните моменти - целия RTL е орязан и само викането на task-а фигурира...може да има някоя и др. грешка при paste-ването)...Task "do_read " се извиква с входен параметър "location", на базата на който модула "readcycle" ще върне определени данни...аз знам какво трябва да ми върне (expected_value). Да кажем че при извикването от ред 52 поради някаква причина бъдат върнати грешни данни ще се изведе съобщение "wrong value returned"...освен него ми се иска да изведа и реда от където "do_read" е извикана (ред 52 в случая)... module readcycle(clock, data, address, read); output [31:0] data; output data_ready input [31:0] address; input read; input clock; reg [31:0] data; ... .... .... .... initial begin do_read('h00001234); //ред 52 (примерно) do_read('habcdbabe); // ред 53 .... // ред 54 .... end task do_read; input [31:0] location; reg [31:0] bus_value; begin @(posedge clock) address = location; @(posedge clock) read = 1; while( ! data_ready) @(posedge clock) ; bus_value = data; read = 0; if (bus_value !== expected_value) $display ("wrong value returned"); .... .... .... end endtask endmodule
А как си тестваш правилната работа на това което си написал.....? |
||||||||||
| Автор: | woody [ Нед Ное 09, 2008 11:04 pm ] | |||||||||
| Заглавие: | Re: Verilog команда... | |||||||||
Не съм чувал да има нещо подобно, но можеш спокойно да използваш 'C' препроцесор да ти набута номера на реда. 1) пишеш си verilog файла с друго разширение, примерно .vcpp и слагаш __LINE__ където искаш да ти е номер на ред. 2) минаваш го през 'C' препроцесор "cpp boza.vcpp > boza.v" 3) симулираш си .v-то, където вече имаш константи |
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|