Отговори на тема  [ 3 мнения ] 
Verilog команда... 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Съб Окт 22, 2005 1:18 am
Мнения: 54
Мнение Verilog команда...
Има ли някаква команда или директива (тип $display(...,....);), която да дисплейва номера на реда на '.v' файла, от който е извикана..

Идеята е следната...testbench -а представлява един task, който прави разни проверки (състояния на регистри и т.н...)..и понеже този task се вика
повече от 50 пъти ми се иска да знам на кое подред извикване (номер на реда) ми връща грешен резултат (евентуално) от проверките...

Има вариант при всяко извикване да си инкрементвам един брояч...но ако има подобна команда ми се струва по добро решение...
В една книжка има няколко реда за команда $settrace...но редактора не ми я разпознава като служебна...

_________________
"...но мене ако питаш, стени не се разбиват с глави..."
http://www.youtube.com/watch?v=AugZsin4x1o


Нед Ное 09, 2008 12:53 am
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Съб Окт 22, 2005 1:18 am
Мнения: 54
Мнение 
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


Цитат:
На верилог-а не съм писал кой знае колко, но се научих по-лесно, отколкото на тея тестбенчове, отделих им 10ина дни занимания само с тях, загубено време.
Сигурно имат смисъл, който за дреболиите които правя, не съм открил.


А как си тестваш правилната работа на това което си написал.....?

_________________
"...но мене ако питаш, стени не се разбиват с глави..."
http://www.youtube.com/watch?v=AugZsin4x1o


Нед Ное 09, 2008 9:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение Re: Verilog команда...
Trigger написа:
Има ли някаква команда или директива (тип $display(...,....);), която да дисплейва номера на реда на '.v' файла, от който е извикана..


Не съм чувал да има нещо подобно, но можеш спокойно да използваш 'C' препроцесор да ти набута номера на реда.

1) пишеш си verilog файла с друго разширение, примерно .vcpp и слагаш __LINE__ където искаш да ти е номер на ред.
2) минаваш го през 'C' препроцесор "cpp boza.vcpp > boza.v"
3) симулираш си .v-то, където вече имаш константи


Нед Ное 09, 2008 11:04 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 3 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 27 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни