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
А как си тестваш правилната работа на това което си написал.....?
_________________"...но мене ако питаш, стени не се разбиват с глави..."
http://www.youtube.com/watch?v=AugZsin4x1o