2 module buffer_int_tb ();
12 wire [31:0] fifo2buf, buf2fifo;
15 wire rd_sop_o, rd_eop_o;
16 reg rd_done_i = 0, rd_error_i = 0, rd_read_i = 0;
18 reg [31:0] wr_dat_i = 0;
19 reg wr_write_i=0, wr_done_i = 0, wr_error_i = 0;
20 wire wr_ready_o, wr_full_o;
22 reg clear = 0, write = 0, read = 0;
23 reg [8:0] firstline = 0, lastline = 0;
25 wire [31:0] ctrl_word = {4'b0,3'b0,clear,write,read,step,lastline,firstline};
31 .ctrl_word(ctrl_word),.go(go),
32 .done(done),.error(error),
35 .en_o(en),.we_o(we),.addr_o(addr),
36 .dat_to_buf(fifo2buf),.dat_from_buf(buf2fifo),
38 // Write FIFO Interface
39 .wr_dat_i(wr_dat_i), .wr_write_i(wr_write_i), .wr_done_i(wr_done_i), .wr_error_i(wr_error_i),
40 .wr_ready_o(wr_ready_o), .wr_full_o(wr_full_o),
42 // Read FIFO Interface
43 .rd_dat_o(rd_dat_o), .rd_read_i(rd_read_i), .rd_done_i(rd_done_i), .rd_error_i(rd_error_i),
44 .rd_sop_o(rd_sop_o), .rd_eop_o(rd_eop_o)
47 reg ram_en = 0, ram_we = 0;
48 reg [8:0] ram_addr = 0;
49 reg [31:0] ram_data = 0;
51 ram_2port #(.DWIDTH(32),.AWIDTH(9)) ram_2port
52 (.clka(clk), .ena(ram_en), .wea(ram_we), .addra(ram_addr), .dia(ram_data), .doa(),
53 .clkb(clk), .enb(en), .web(we), .addrb(addr), .dib(fifo2buf), .dob(buf2fifo) );
63 $display("Testing full read, no wait states.");
72 $display("Testing full read, 2 wait states.");
81 $display("Testing full read, done ON the last.");
93 $display("Testing partial read, 0 wait states, then nothing after last.");
102 $display("Testing partial read, 0 wait states, then done after last.");
114 $display("Testing partial read, 0 wait states, then done at same time as last.");
126 $display("Testing partial read, 3 wait states, then error at same time as last.");
138 $display("Testing Reading too much, 3 wait states.");
146 SetBufferRead(500,511);
147 $display("Testing full read, to the end of the buffer.");
155 SetBufferRead(0,511);
156 $display("Testing full read, start to end of the buffer.");
164 SetBufferRead(505,3);
165 $display("Testing full read, wraparound");
173 SetBufferWrite(10,15);
174 $display("Testing Full Write, no wait states");
182 SetBufferWrite(18,23);
183 $display("Testing Full Write, 1 wait states");
191 SetBufferWrite(27,40);
192 $display("Testing Partial Write, 0 wait states");
200 SetBufferWrite(35,200);
201 $display("Testing Partial Write, 0 wait states, then done");
212 SetBufferWrite(45,200);
213 $display("Testing Partial Write, 0 wait states, then done and write simultaneously");
224 SetBufferWrite(55,200);
225 $display("Testing Partial Write, 0 wait states, then error");
237 $display("Testing read after all the writes");
245 SetBufferWrite(508,4);
246 $display("Testing wraparound write");
254 SetBufferRead(506,10);
255 $display("Reading wraparound write");
263 SetBufferWrite(0,511);
264 $display("Testing Whole Buffer write");
267 WriteLines(512,0,1000);
272 SetBufferRead(0,511);
273 $display("Reading Whole Buffer write");
281 SetBufferWrite(5,10);
282 $display("Testing Write Too Many");
285 WriteLines(12,0,2000);
291 $display("Reading back Write Too Many");
299 SetBufferWrite(15,20);
300 $display("Testing Write One Less Than Full");
303 WriteLines(5,0,2000);
308 SetBufferRead(13,22);
309 $display("Reading back Write One Less Than Full");
322 always @(posedge clk)
323 if(rd_read_i == 1'd1)
324 $display("READ Buffer %d, rd_sop_o %d, rd_eop_o %d", rd_dat_o, rd_sop_o, rd_eop_o);
326 always @(posedge clk)
327 if(wr_write_i == 1'd1)
328 $display("WRITE Buffer %d, wr_ready_o %d, wr_full_o %d", wr_dat_i, wr_ready_o, wr_full_o);
331 $dumpfile("buffer_int_tb.vcd");
332 $dumpvars(0,buffer_int_tb);
345 ram_addr <= ram_addr + 1;
346 ram_data <= ram_data + 1;
354 $display("Filled the RAM");
360 clear <= 1; read <= 0; write <= 0;
365 $display("Buffer Reset");
367 endtask // ClearBuffer
373 clear <= 0; read <= 0; write <= 1;
380 $display("Buffer Set for Write");
382 endtask // SetBufferWrite
388 clear <= 0; read <= 1; write <= 0;
395 $display("Buffer Set for Read");
397 endtask // SetBufferRead
409 input [7:0] wait_states;
411 $display("Read Lines: Number %d, Wait States %d",lines,wait_states);
429 endtask // WriteALine
433 input [7:0] wait_states;
436 $display("Write Lines: Number %d, Wait States %d",lines,wait_states);
445 endtask // WriteLines
447 endmodule // buffer_int_tb