diff options
Diffstat (limited to 'fpga/usrp2/extramfifo/ext_fifo_tb.v')
-rw-r--r-- | fpga/usrp2/extramfifo/ext_fifo_tb.v | 432 |
1 files changed, 0 insertions, 432 deletions
diff --git a/fpga/usrp2/extramfifo/ext_fifo_tb.v b/fpga/usrp2/extramfifo/ext_fifo_tb.v deleted file mode 100644 index f6fe47297..000000000 --- a/fpga/usrp2/extramfifo/ext_fifo_tb.v +++ /dev/null @@ -1,432 +0,0 @@ -// -// Copyright 2011 Ettus Research LLC -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// - -`timescale 1ns / 1ps -`define USRP2 -//`define USRP2PLUS - -`ifdef USRP2 - `define INT_WIDTH 36 - `define EXT_WIDTH 18 - `define RAM_DEPTH 19 - `define FIFO_DEPTH 8 - `define DUMP_VCD_FULL - `define INT_CLK_PERIOD 5 - `define EXT_CLK_PERIOD 4 -`elsif USRP2PLUS - `define INT_WIDTH 36 - `define EXT_WIDTH 36 - `define RAM_DEPTH 18 - `define FIFO_DEPTH 8 - `define DUMP_VCD_FULL - `define INT_CLK_PERIOD 5 - `define EXT_CLK_PERIOD 5 -`endif // `ifdef USRP2 - - -module ext_fifo_tb(); - - reg int_clk; - reg ext_clk; - reg rst; - - wire [`EXT_WIDTH-1:0] RAM_D_pi; - wire [`EXT_WIDTH-1:0] RAM_D_po; - wire [`EXT_WIDTH-1:0] RAM_D; - wire RAM_D_poe; - wire [`RAM_DEPTH-1:0] RAM_A; - wire RAM_WEn; - wire RAM_CENn; - wire RAM_LDn; - wire RAM_OEn; - wire RAM_CE1n; - reg [`INT_WIDTH-1:0] datain; - reg src_rdy_i; // WRITE - wire dst_rdy_o; // not FULL - wire [`INT_WIDTH-1:0] dataout; - reg [`INT_WIDTH-1:0] ref_dataout; - wire src_rdy_o; // not EMPTY - reg dst_rdy_i; - integer ether_frame; - - // Clocks - // Int clock is 100MHz - // Ext clock is 125MHz - initial - begin - int_clk <= 0; - ext_clk <= 0; - ref_dataout <= 1; - src_rdy_i <= 0; - dst_rdy_i <= 0; - end - - always - #(`INT_CLK_PERIOD/2) int_clk <= ~int_clk; - - always - #(`EXT_CLK_PERIOD/2) ext_clk <= ~ext_clk; - - initial - begin - datain <= 0; - ether_frame <= 0; - - rst <= 1; - repeat (5) @(negedge int_clk); - rst <= 0; - @(negedge int_clk); - while (datain < 10000) - begin - @(negedge int_clk); - datain <= datain + dst_rdy_o; - src_rdy_i <= dst_rdy_o; - // Simulate inter-frame time - if (ether_frame == 1500) - begin - ether_frame <= 0; - repeat(1600) - begin - @(negedge int_clk); - src_rdy_i <= 0; - end - end - else - ether_frame <= ether_frame + dst_rdy_o; - end - end // initial begin - - - initial - begin - repeat (5) @(negedge int_clk); - dst_rdy_i <= 1; - - while (src_rdy_o !== 1) - @(negedge int_clk); - - // Fall through fifo, first output already valid - if (dataout !== ref_dataout) - $display("Error: Expected %x, got %x @%d",ref_dataout, dataout, $time); - ref_dataout <= ref_dataout + src_rdy_o ; - - // Decimate by 16 rate - while (ref_dataout < 2000) - begin - @(negedge int_clk); - ref_dataout <= ref_dataout + src_rdy_o ; - dst_rdy_i <= src_rdy_o; - if ((dataout !== ref_dataout) && src_rdy_o) - $display("Error: Expected %x, got %x @%d",ref_dataout, dataout, $time); - @(negedge int_clk); - dst_rdy_i <= 0; - repeat(14) @(negedge int_clk); - end // while (ref_dataout < 10000) - // Decimate by 8 rate - while (ref_dataout < 4000) - begin - @(negedge int_clk); - ref_dataout <= ref_dataout + src_rdy_o ; - dst_rdy_i <= src_rdy_o; - if ((dataout !== ref_dataout) && src_rdy_o) - $display("Error: Expected %x, got %x @%d",ref_dataout, dataout, $time); - @(negedge int_clk); - dst_rdy_i <= 0; - repeat(6) @(negedge int_clk); - end // while (ref_dataout < 10000) - // Decimate by 4 rate - while (ref_dataout < 6000) - begin - @(negedge int_clk); - ref_dataout <= ref_dataout + src_rdy_o ; - dst_rdy_i <= src_rdy_o; - if ((dataout !== ref_dataout) && src_rdy_o) - $display("Error: Expected %x, got %x @%d",ref_dataout, dataout, $time); - @(negedge int_clk); - dst_rdy_i <= 0; - repeat(2) @(negedge int_clk); - end // while (ref_dataout < 10000) - // Max rate - while (ref_dataout < 10000) - begin - @(negedge int_clk); - ref_dataout <= ref_dataout + src_rdy_o ; - dst_rdy_i <= src_rdy_o; - if ((dataout !== ref_dataout) && src_rdy_o) - $display("Error: Expected %x, got %x @%d",ref_dataout, dataout, $time); - - end // while (ref_dataout < 10000) - - @(negedge int_clk); - $finish; - - end - - -/* -----\/----- EXCLUDED -----\/----- - - initial - begin - rst <= 1; - repeat (5) @(negedge int_clk); - rst <= 0; - @(negedge int_clk); - repeat (4000) - begin - @(negedge int_clk); - datain <= datain + dst_rdy_o; - src_rdy_i <= dst_rdy_o; -// @(negedge int_clk); -// src_rdy_i <= 0; -// @(negedge int_clk); -// dst_rdy_i <= src_rdy_o; -// @(negedge int_clk); -// dst_rdy_i <= 0; -// repeat (2) @(negedge int_clk); - end // repeat (1000) - // Fall through fifo, first output already valid - if (dataout !== ref_dataout) - $display("Error: Expected %x, got %x",ref_dataout, dataout); - repeat (1000) - begin - @(negedge int_clk); - datain <= datain + dst_rdy_o ; - src_rdy_i <= dst_rdy_o; - @(negedge int_clk); - src_rdy_i <= 0; - @(negedge int_clk); - ref_dataout <= ref_dataout + src_rdy_o ; - dst_rdy_i <= src_rdy_o; - if ((dataout !== ref_dataout) && src_rdy_o) - $display("Error: Expected %x, got %x",ref_dataout, dataout); - @(negedge int_clk); - dst_rdy_i <= 0; -// repeat (2) @(negedge int_clk); - end // repeat (1000) - repeat (1000) - begin -// @(negedge int_clk); -// datain <= datain + 1; -// src_rdy_i <= 1; -// @(negedge int_clk); -// src_rdy_i <= 0; - @(negedge int_clk); - ref_dataout <= ref_dataout + src_rdy_o; - dst_rdy_i <= src_rdy_o; - if ((dataout !== ref_dataout) && src_rdy_o) - $display("Error: Expected %x, got %x",ref_dataout, dataout); - @(negedge int_clk); - dst_rdy_i <= 0; -// repeat (2) @(negedge int_clk); - end // repeat (1000) - - $finish; - - end // initial begin - - - -----/\----- EXCLUDED -----/\----- */ - /////////////////////////////////////////////////////////////////////////////////// - // Simulation control // - /////////////////////////////////////////////////////////////////////////////////// - `ifdef DUMP_LX2_TOP - // Set up output files - initial begin - $dumpfile("ext_fifo_tb.lx2"); - $dumpvars(1,ext_fifo_tb); - end - `endif - - `ifdef DUMP_LX2_FULL - // Set up output files - initial begin - $dumpfile("ext_fifo_tb.lx2"); - $dumpvars(0,ext_fifo_tb); - end - `endif - - `ifdef DUMP_VCD_TOP - // Set up output files - initial begin - $dumpfile("ext_fifo_tb.vcd"); - $dumpvars(1,ext_fifo_tb); - end - `endif - - `ifdef DUMP_VCD_TOP_PLUS_NEXT - // Set up output files - initial begin - $dumpfile("ext_fifo_tb.vcd"); - $dumpvars(2,ext_fifo_tb); - end - `endif - - - `ifdef DUMP_VCD_FULL - // Set up output files - initial begin - $dumpfile("ext_fifo_tb.vcd"); - $dumpvars(0,ext_fifo_tb); - end - `endif - - // Update display every 10 us - always #10000 $monitor("Time in uS ",$time/1000); - - wire [`EXT_WIDTH-1:0] RAM_D_pi_ext; - wire [`EXT_WIDTH-1:0] RAM_D_po_ext; - wire [`EXT_WIDTH-1:0] RAM_D_ext; - wire RAM_D_poe_ext; - - genvar i; - - // - // Instantiate IO for Bidirectional bus to SRAM - // - - generate - for (i=0;i<`EXT_WIDTH;i=i+1) - begin : gen_RAM_D_IO - - IOBUF #( - .DRIVE(12), - .IOSTANDARD("LVCMOS25"), - .SLEW("FAST") - ) - RAM_D_i ( - .O(RAM_D_pi_ext[i]), - .I(RAM_D_po_ext[i]), - .IO(RAM_D[i]), - .T(RAM_D_poe_ext) - ); - end // block: gen_RAM_D_IO - - endgenerate - - wire [`RAM_DEPTH-1:0] RAM_A_ext; - wire RAM_WEn_ext,RAM_LDn_ext,RAM_CE1n_ext,RAM_OEn_ext,RAM_CENn_ext; - - assign #1 RAM_D_pi = RAM_D_pi_ext; - - assign #1 RAM_D_po_ext = RAM_D_po; - - assign #1 RAM_D_poe_ext = RAM_D_poe; - - assign #2 RAM_WEn_ext = RAM_WEn; - - assign #2 RAM_LDn_ext = RAM_LDn; - - assign #2 RAM_CE1n_ext = RAM_CE1n; - - assign #2 RAM_OEn_ext = RAM_OEn; - - assign #2 RAM_CENn_ext = RAM_CENn; - - assign #2 RAM_A_ext = RAM_A; - - - generate - if (`EXT_WIDTH==18) begin: ram_tb_g1 - idt71v65603s150 idt71v65603s150_i1 - ( - .A(RAM_A_ext[17:0]), - .adv_ld_(RAM_LDn_ext), // advance (high) / load (low) - .bw1_(1'b0), - .bw2_(1'b0), - .bw3_(1'b1), - .bw4_(1'b1), // byte write enables (low) - .ce1_(RAM_CE1n_ext), - .ce2(1'b1), - .ce2_(1'b0), // chip enables - .cen_(RAM_CENn_ext), // clock enable (low) - .clk(ext_clk), // clock - .IO({RAM_D[16:9],RAM_D[7:0]}), - .IOP({RAM_D[17],RAM_D[8]}), // data bus - .lbo_(1'b0), // linear burst order (low) - .oe_(RAM_OEn_ext), // output enable (low) - .r_w_(RAM_WEn_ext) - ); // read (high) / write (low) - end // block: ram_tb_g1 - else if (`EXT_WIDTH==36) begin: ram_tb_g1 - idt71v65603s150 idt71v65603s150_i1 - ( - .A(RAM_A_ext[17:0]), - .adv_ld_(RAM_LDn_ext), // advance (high) / load (low) - .bw1_(1'b0), - .bw2_(1'b0), - .bw3_(1'b0), - .bw4_(1'b0), // byte write enables (low) - .ce1_(RAM_CE1n_ext), - .ce2(1'b1), - .ce2_(1'b0), // chip enables - .cen_(RAM_CENn_ext), // clock enable (low) - .clk(ext_clk), // clock - .IO(RAM_D[31:0]), - .IOP(RAM_D[35:32]), // data bus - .lbo_(1'b0), // linear burst order (low) - .oe_(RAM_OEn_ext), // output enable (low) - .r_w_(RAM_WEn_ext) - ); // read (high) / write (low) - end // block: ram_tb_g1 - - endgenerate - -/* -----\/----- EXCLUDED -----\/----- - - - cy1356 cy1356_i1 - ( .d(RAM_D), - .clk(ext_clk), - .a(RAM_A_ext), - .bws(2'b00), - .we_b(RAM_WEn_ext), - .adv_lb(RAM_LDn_ext), - .ce1b(RAM_CE1n_ext), - .ce2(1'b1), - .ce3b(1'b0), - .oeb(RAM_OEn_ext), - .cenb(RAM_CENn_ext), - .mode(1'b0) - ); - -----/\----- EXCLUDED -----/\----- */ - - - ext_fifo - #(.INT_WIDTH(`INT_WIDTH),.EXT_WIDTH(`EXT_WIDTH),.RAM_DEPTH(`RAM_DEPTH),.FIFO_DEPTH(`FIFO_DEPTH)) - ext_fifo_i1 - ( - .int_clk(int_clk), - .ext_clk(ext_clk), - .rst(rst), - .RAM_D_pi(RAM_D_pi), - .RAM_D_po(RAM_D_po), - .RAM_D_poe(RAM_D_poe), - .RAM_A(RAM_A), - .RAM_WEn(RAM_WEn), - .RAM_CENn(RAM_CENn), - .RAM_LDn(RAM_LDn), - .RAM_OEn(RAM_OEn), - .RAM_CE1n(RAM_CE1n), - .datain(datain), - .src_rdy_i(src_rdy_i), // WRITE - .dst_rdy_o(dst_rdy_o), // not FULL - .dataout(dataout), - .src_rdy_o(src_rdy_o), // not EMPTY - .dst_rdy_i(dst_rdy_i) - ); - -endmodule // ext_fifo_tb |