S
shyamsundar
Guest
Ahoj všichni IM snaží psát KODEX PRO FIFO a dostal tento vzorek ze sítě.Teď jsem napsal testbench tohoto stavu a ve funkční SIMULATION IM Nelze získat čtení a zápisu AKTUALIZOVÁNO ukazatele.Může někdo pomoci vyřešit tento problém?
Modul fifo2 (CLK, RST, fr, FW, data, z);
parametr fifo_width = 8, fifo_depth = 16, ptr_width = 4;
vstup CLK, RST, fr, FW;
vstup [fifo_width-1: 0] data;
výkon [fifo_width-1: 0] z;
drát plné, prázdné;
integer j;
reg [fifo_width-1: 0] z;
reg [ptr_width-1: 0] WP;
reg [ptr_width-1: 0] RP;
reg [fifo_width-1: 0] stack [fifo_depth-1: 0];
reg [ptr_width-1: 0] fifo_count;
/***********************************************
Pokud je to zapisovat, dát data o
vstup autobusem do místa, na níž odkazuje
FIFO psát ukazatel
************************************************/
Vždy @ (posedge CLK)
začít
if (FW) začíná
stack [wp] <= data;
konec
konec
/***********************************************
Pokud je toto přečíst si data, která je v
místo, na níž odkazuje číst ukazatel
a dát ji na výstup sběrnice
************************************************/
Vždy @ (posedge CLK)
začít
if (fr) začíná
z <= stack [rp];
konec
konec
/************************************************
Přírůstek psát ukazatel na každém psát a
Přečtěte si ukazatel na každém čtení
************************************************/
Vždy @ (posedge CLK)
if (RST)
wp <= 0;
jiný
WP <= (FW)?WP 1: WP;
Vždy @ (posedge CLK)
if (RST)
rp <= 0;
jiný
rp <= (fr)?RP 1: RP;/*********************************************
FIFO počítadlo přírůstek na každém psát a
útlumu na každém čtení
**********************************************/
Vždy @ (posedge CLK)
začít
if (RST) začíná
fifo_count <= 0;
konec
jinde začnou
případě ((FW, fr))
2'b00: fifo_count <= fifo_count;
2'b01: fifo_count <= (fifo_count == 0)?fifo_depth: fifo_count - 1;
2'b10: fifo_count <= (fifo_count == fifo_depth)?0: fifo_count 1;
2'b11: fifo_count <= fifo_count;
endcase
konec
konec
/ / Přiřazení fifo_hf = (fifo_count> = 4);
/ / Přiřazení fifo_he = (fifo_count <= 4);
přidělit prázdné = (fifo_count == 0);
přidělit full = (fifo_count> = fifo_depth);
endmodule / / FIFO//----------------------------- Zkušební stolici ----------------- ------------------------------
Modul fifo_tb;
parametr fifo_width = 8, fifo_depth = 16, ptr_width = 4;
reg CLK, RST, fr, FW;
reg [fifo_width-1: 0] data;
drát [fifo_width-1: 0] z;
drát plné, prázdné;
integer h;
reg [ptr_width-1: 0] WP = 0, mp = 0;
reg [ptr_width-1: 0] rp = 0;
reg [fifo_width-1: 0] mem [fifo_depth-1: 0];
reg [ptr_width-1: 0] fifo_count;
fifo2 f1 (CLK, RST, fr, FW, data, z);
počáteční
začít
CLK = 1'b1;
RST = 1'b1;
$ Readmemb ("stimuli_fifo.txt", mem);
h = $ fopen ("result_fifo.txt");
# 20 RST = 1'b0;
konec
vždy
# 5 CLK = ~ CLK;
počáteční
začít
# 30 FW = 1'b1;
# 30 fr = 1'b1;
# 120 FW = 1'b0;
# 10 fr = 1'b0;
konec
Vždy @ (posedge CLK)
začít
if (FW)
začít
data = mem mp] [;
mp = MP 1; / / INCREMENT mem REJSTŘÍK
if (plný)
$ Display ("FIFO přetečení");
else if (prázdný)
$ Display ("FIFO podtečení");
konec
konec
Vždy @ (posedge CLK)
začít
$ Display ("out =% d, data =% d", out, data);
$ Display ("fifo_count =% d", fifo_count);
$ Fdisplay (h, "out =% d", out);
konec
endmodule [/ quote] [/ code]
Modul fifo2 (CLK, RST, fr, FW, data, z);
parametr fifo_width = 8, fifo_depth = 16, ptr_width = 4;
vstup CLK, RST, fr, FW;
vstup [fifo_width-1: 0] data;
výkon [fifo_width-1: 0] z;
drát plné, prázdné;
integer j;
reg [fifo_width-1: 0] z;
reg [ptr_width-1: 0] WP;
reg [ptr_width-1: 0] RP;
reg [fifo_width-1: 0] stack [fifo_depth-1: 0];
reg [ptr_width-1: 0] fifo_count;
/***********************************************
Pokud je to zapisovat, dát data o
vstup autobusem do místa, na níž odkazuje
FIFO psát ukazatel
************************************************/
Vždy @ (posedge CLK)
začít
if (FW) začíná
stack [wp] <= data;
konec
konec
/***********************************************
Pokud je toto přečíst si data, která je v
místo, na níž odkazuje číst ukazatel
a dát ji na výstup sběrnice
************************************************/
Vždy @ (posedge CLK)
začít
if (fr) začíná
z <= stack [rp];
konec
konec
/************************************************
Přírůstek psát ukazatel na každém psát a
Přečtěte si ukazatel na každém čtení
************************************************/
Vždy @ (posedge CLK)
if (RST)
wp <= 0;
jiný
WP <= (FW)?WP 1: WP;
Vždy @ (posedge CLK)
if (RST)
rp <= 0;
jiný
rp <= (fr)?RP 1: RP;/*********************************************
FIFO počítadlo přírůstek na každém psát a
útlumu na každém čtení
**********************************************/
Vždy @ (posedge CLK)
začít
if (RST) začíná
fifo_count <= 0;
konec
jinde začnou
případě ((FW, fr))
2'b00: fifo_count <= fifo_count;
2'b01: fifo_count <= (fifo_count == 0)?fifo_depth: fifo_count - 1;
2'b10: fifo_count <= (fifo_count == fifo_depth)?0: fifo_count 1;
2'b11: fifo_count <= fifo_count;
endcase
konec
konec
/ / Přiřazení fifo_hf = (fifo_count> = 4);
/ / Přiřazení fifo_he = (fifo_count <= 4);
přidělit prázdné = (fifo_count == 0);
přidělit full = (fifo_count> = fifo_depth);
endmodule / / FIFO//----------------------------- Zkušební stolici ----------------- ------------------------------
Modul fifo_tb;
parametr fifo_width = 8, fifo_depth = 16, ptr_width = 4;
reg CLK, RST, fr, FW;
reg [fifo_width-1: 0] data;
drát [fifo_width-1: 0] z;
drát plné, prázdné;
integer h;
reg [ptr_width-1: 0] WP = 0, mp = 0;
reg [ptr_width-1: 0] rp = 0;
reg [fifo_width-1: 0] mem [fifo_depth-1: 0];
reg [ptr_width-1: 0] fifo_count;
fifo2 f1 (CLK, RST, fr, FW, data, z);
počáteční
začít
CLK = 1'b1;
RST = 1'b1;
$ Readmemb ("stimuli_fifo.txt", mem);
h = $ fopen ("result_fifo.txt");
# 20 RST = 1'b0;
konec
vždy
# 5 CLK = ~ CLK;
počáteční
začít
# 30 FW = 1'b1;
# 30 fr = 1'b1;
# 120 FW = 1'b0;
# 10 fr = 1'b0;
konec
Vždy @ (posedge CLK)
začít
if (FW)
začít
data = mem mp] [;
mp = MP 1; / / INCREMENT mem REJSTŘÍK
if (plný)
$ Display ("FIFO přetečení");
else if (prázdný)
$ Display ("FIFO podtečení");
konec
konec
Vždy @ (posedge CLK)
začít
$ Display ("out =% d, data =% d", out, data);
$ Display ("fifo_count =% d", fifo_count);
$ Fdisplay (h, "out =% d", out);
konec
endmodule [/ quote] [/ code]