diff options
| author | Martin Braun <martin.braun@ettus.com> | 2014-10-07 11:25:20 +0200 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2014-10-07 11:25:20 +0200 | 
| commit | fd3e84941de463fa1a7ebab0a69515b4bf2614cd (patch) | |
| tree | 3fa721a13d41d2c0451d663a59a220a38fd5e614 /fpga/usrp2/fifo | |
| parent | 3b66804e41891e358c790b453a7a59ec7462dba4 (diff) | |
| download | uhd-fd3e84941de463fa1a7ebab0a69515b4bf2614cd.tar.gz uhd-fd3e84941de463fa1a7ebab0a69515b4bf2614cd.tar.bz2 uhd-fd3e84941de463fa1a7ebab0a69515b4bf2614cd.zip  | |
Removed copy of FPGA source files.
Diffstat (limited to 'fpga/usrp2/fifo')
45 files changed, 0 insertions, 5056 deletions
diff --git a/fpga/usrp2/fifo/.gitignore b/fpga/usrp2/fifo/.gitignore deleted file mode 100644 index 866f1faad..000000000 --- a/fpga/usrp2/fifo/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.vcd -*.lxt -a.out diff --git a/fpga/usrp2/fifo/Makefile.srcs b/fpga/usrp2/fifo/Makefile.srcs deleted file mode 100644 index 55ba0be2a..000000000 --- a/fpga/usrp2/fifo/Makefile.srcs +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright 2010-2012 Ettus Research LLC -# - -################################################## -# FIFO Sources -################################################## -FIFO_SRCS = $(abspath $(addprefix $(BASE_DIR)/../fifo/, \ -add_routing_header.v \ -buffer_int.v \ -buffer_int2.v \ -buffer_pool.v \ -crossbar36.v \ -dsp_framer36.v \ -fifo_2clock.v \ -fifo_2clock_cascade.v \ -ll8_shortfifo.v \ -fifo_short.v \ -fifo_long.v \ -fifo_cascade.v \ -fifo36_to_ll8.v \ -ll8_to_fifo36.v \ -fifo19_to_ll8.v \ -ll8_to_fifo19.v \ -fifo36_to_fifo19.v \ -fifo19_to_fifo36.v \ -fifo19_mux.v \ -fifo36_mux.v \ -fifo36_demux.v \ -packet_router.v \ -splitter36.v \ -valve36.v \ -fifo_pacer.v \ -packet_dispatcher36_x3.v \ -packet_dispatcher36_x4.v \ -packet_generator32.v \ -packet_generator.v \ -packet_verifier32.v \ -packet_verifier.v \ -fifo19_pad.v \ -packet_padder36.v \ -)) diff --git a/fpga/usrp2/fifo/add_routing_header.v b/fpga/usrp2/fifo/add_routing_header.v deleted file mode 100644 index ee6a635f5..000000000 --- a/fpga/usrp2/fifo/add_routing_header.v +++ /dev/null @@ -1,47 +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/>. -// - -module add_routing_header -  #(parameter PORT_SEL = 0, -    parameter PROT_ENG_FLAGS = 1) -   (input clk, input reset, input clear, -    input [35:0] data_i, input src_rdy_i, output dst_rdy_o, -    output [35:0] data_o, output src_rdy_o, input dst_rdy_i); - -   reg [1:0] 	  line; -   wire [1:0] 	  port_sel_bits = PORT_SEL; -   wire [15:0] 	  len = data_i[15:0]; -    -   always @(posedge clk) -     if(reset) -       line <= PROT_ENG_FLAGS ? 0 : 1; -     else -       if(src_rdy_o & dst_rdy_i) -	 if(data_o[33]) -	   line <= PROT_ENG_FLAGS ? 0 : 1; -	 else -	   if(line != 3) -	     line <= line + 1; - -   assign data_o = (line == 0) ? {4'b0001, 13'b0, port_sel_bits, 1'b1, len[13:0],2'b00} : -		   (line == 1) ? {3'b000, (PROT_ENG_FLAGS ? 1'b0: 1'b1), data_i[31:0]} :  -		   data_i[35:0]; - -   assign dst_rdy_o = dst_rdy_i & (line != 0); -   assign src_rdy_o = src_rdy_i; -    -endmodule // add_routing_header diff --git a/fpga/usrp2/fifo/buffer_int.v b/fpga/usrp2/fifo/buffer_int.v deleted file mode 100644 index c068226ec..000000000 --- a/fpga/usrp2/fifo/buffer_int.v +++ /dev/null @@ -1,184 +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/>. -// - - -// FIFO Interface to the 2K buffer RAMs -// Read port is read-acknowledge -// FIXME do we want to be able to interleave reads and writes? - -module buffer_int -  #(parameter BUF_NUM = 0, -    parameter BUF_SIZE = 9) -    (// Control Interface -     input clk, -     input rst, -     input [31:0] ctrl_word, -     input go, -     output done, -     output error, -     output idle, -      -     // Buffer Interface -     output en_o, -     output we_o, -     output reg [BUF_SIZE-1:0] addr_o, -     output [31:0] dat_to_buf, -     input [31:0] dat_from_buf, -      -     // Write FIFO Interface -     input [31:0] wr_data_i, -     input [3:0] wr_flags_i, -     input wr_ready_i, -     output wr_ready_o, -      -     // Read FIFO Interface -     output [31:0] rd_data_o, -     output [3:0] rd_flags_o, -     output rd_ready_o, -     input rd_ready_i -     ); -    -   reg [31:0] ctrl_reg; -   reg 	      go_reg; -    -   always @(posedge clk) -     go_reg <= go; -    -   always @(posedge clk) -     if(rst) -       ctrl_reg <= 0; -     else -       if(go & (ctrl_word[31:28] == BUF_NUM)) -	 ctrl_reg <= ctrl_word; -    -   wire [BUF_SIZE-1:0] firstline = ctrl_reg[BUF_SIZE-1:0]; -   wire [BUF_SIZE-1:0] lastline = ctrl_reg[2*BUF_SIZE-1:BUF_SIZE]; - -   wire       read = ctrl_reg[22]; -   wire       write = ctrl_reg[23]; -   wire       clear = ctrl_reg[24]; -   //wire [2:0] port = ctrl_reg[27:25];  // Ignored in this block -   //wire [3:0] buff_num = ctrl_reg[31:28];  // Ignored here ? -    -   localparam IDLE = 3'd0; -   localparam PRE_READ = 3'd1; -   localparam READING = 3'd2; -   localparam WRITING = 3'd3; -   localparam ERROR = 3'd4; -   localparam DONE = 3'd5; -    -   reg [2:0]  state; -   reg 	      rd_sop, rd_eop; -   wire       wr_sop, wr_eop, wr_error; -   reg [1:0]  rd_occ; -   wire [1:0] wr_occ; -    -   always @(posedge clk) -     if(rst) -       begin -	  state <= IDLE; -	  rd_sop <= 0; -	  rd_eop <= 0; -	  rd_occ <= 0; -       end -     else -       if(clear) -	 begin -	    state <= IDLE; -	    rd_sop <= 0; -	    rd_eop <= 0; -	    rd_occ <= 0; -	 end -       else  -	 case(state) -	   IDLE : -	     if(go_reg & read) -	       begin -		  addr_o <= firstline; -		  state <= PRE_READ; -	       end -	     else if(go_reg & write) -	       begin -		  addr_o <= firstline; -		  state <= WRITING; -	       end -	    -	   PRE_READ : -	     begin -		state <= READING; -		addr_o <= addr_o + 1; -		rd_occ <= 2'b00; -		rd_sop <= 1; -		rd_eop <= 0; -	     end -	    -	   READING : -	     if(rd_ready_i) -	       begin -		  rd_sop <= 0; -		  addr_o <= addr_o + 1; -		  if(addr_o == lastline) -		    begin -		       rd_eop <= 1; -		       // FIXME assign occ here -		       rd_occ <= 0; -		    end -		  else -		    rd_eop <= 0; -		  if(rd_eop) -		    state <= DONE; -	       end -	    -	   WRITING : -	     begin -		if(wr_ready_i) -		  begin -		     addr_o <= addr_o + 1; -		     if(wr_error) -		       begin -			  state <= ERROR; -			  // Save OCC flags here -		       end -		     else if((addr_o == lastline)||wr_eop) -		       state <= DONE; -		  end // if (wr_ready_i) -	     end // case: WRITING -	    -	 endcase // case(state) -    -   assign     dat_to_buf = wr_data_i; -   assign     rd_data_o = dat_from_buf; - -   assign     rd_flags_o = { rd_occ[1:0], rd_eop, rd_sop }; -   assign     rd_ready_o = (state == READING); -    -   assign     wr_sop = wr_flags_i[0]; -   assign     wr_eop = wr_flags_i[1]; -   assign     wr_occ = wr_flags_i[3:2]; -   assign     wr_error = wr_sop & wr_eop; -   assign     wr_ready_o = (state == WRITING); - -   assign     we_o = (state == WRITING); -   //assign     we_o = (state == WRITING) && wr_ready_i;  // always write to avoid timing issue - -   assign     en_o = ~((state==READING)& ~rd_ready_i);   // FIXME potential critical path -    -   assign     done = (state == DONE); -   assign     error = (state == ERROR); -   assign     idle = (state == IDLE); - -endmodule // buffer_int diff --git a/fpga/usrp2/fifo/buffer_int2.v b/fpga/usrp2/fifo/buffer_int2.v deleted file mode 100644 index 7dd528dd5..000000000 --- a/fpga/usrp2/fifo/buffer_int2.v +++ /dev/null @@ -1,194 +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/>. -// - - -// FIFO Interface to the 2K buffer RAMs -// Read port is read-acknowledge -// FIXME do we want to be able to interleave reads and writes? - -module buffer_int2 -  #(parameter BASE = 0, -    parameter BUF_SIZE = 9) -    (input clk, input rst, -     input set_stb, input [7:0] set_addr, input [31:0] set_data, -     output [31:0] status, - -     // Wishbone interface to RAM -     input wb_clk_i, -     input wb_rst_i, -     input wb_we_i, -     input wb_stb_i, -     input [15:0] wb_adr_i, -     input [31:0] wb_dat_i,    -     output [31:0] wb_dat_o, -     output reg wb_ack_o, - -     // Write FIFO Interface -     input [35:0] wr_data_i, -     input wr_ready_i, -     output wr_ready_o, -      -     // Read FIFO Interface -     output [35:0] rd_data_o, -     output rd_ready_o, -     input rd_ready_i -     ); - -   reg [15:0]         rd_addr, wr_addr;    // Handle pkt bigger than buffer -   wire [15:0] 	      rd_addr_next = rd_addr + 1; -   reg [15:0] 	      rd_length; - -   wire [31:0] 	      ctrl; -   wire 	      wr_done, wr_error, wr_idle; -   wire 	      rd_done, rd_error, rd_idle; -   wire 	      we, en, go; - -   wire 	      read = ctrl[3]; -   wire 	      rd_clear = ctrl[2]; -   wire 	      write = ctrl[1]; -   wire 	      wr_clear = ctrl[0]; -    -   reg [2:0] 	      rd_state, wr_state; -   reg 		      rd_sop, rd_eop; -   wire 	      wr_sop, wr_eop; -   reg [1:0] 	      rd_occ; -   wire [1:0] 	      wr_occ; -    -   localparam IDLE = 3'd0; -   localparam PRE_READ = 3'd1; -   localparam READING = 3'd2; -   localparam WRITING = 3'd3; -   localparam ERROR = 3'd4; -   localparam DONE = 3'd5; - -   // read state machine -   always @(posedge clk) -     if(rst | (rd_clear & go)) -       begin -	  rd_state <= IDLE; -	  rd_sop <= 0; -	  rd_eop <= 0; -	  rd_occ <= 0; -       end -     else -       case(rd_state) -	 IDLE : -	   if(go & read) -	     begin -		rd_addr <= 0; -		rd_state <= PRE_READ; -		rd_length <= ctrl[31:16]; -	     end -	  -	 PRE_READ : -	   begin -	      rd_state <= READING; -	      rd_addr <= rd_addr_next; -	      rd_occ <= 2'b00; -	      rd_sop <= 1; -	      rd_eop <= 0; -	   end -	  -	 READING : -	   if(rd_ready_i) -	     begin -		rd_sop <= 0; -		rd_addr <= rd_addr_next; -		if(rd_addr_next == rd_length) -		  begin -		     rd_eop <= 1; -		     // FIXME assign occ here -		     rd_occ <= 0; -		  end -		else -		  rd_eop <= 0; -		if(rd_eop) -		  rd_state <= DONE; -	     end -	  -       endcase // case(rd_state) -    -   // write state machine -   always @(posedge clk) -     if(rst | (wr_clear & go)) -       wr_state <= IDLE; -     else  -       case(wr_state) -	 IDLE : -	   if(go & write) -	     begin -		wr_addr <= 0; -		wr_state <= WRITING; -	     end -	  -	 WRITING : -	   if(wr_ready_i) -	     begin -		wr_addr <= wr_addr + 1; -		if(wr_sop & wr_eop) -		  wr_state <= ERROR;  // Should save OCC flags here -		else if(wr_eop) -		  wr_state <= DONE; -	     end // if (wr_ready_i) -       endcase // case(wr_state) -    -   assign     rd_data_o[35:32] = { rd_occ[1:0], rd_eop, rd_sop }; -   assign     rd_ready_o = (rd_state == READING); -    -   assign     wr_sop = wr_data_i[32]; -   assign     wr_eop = wr_data_i[33]; -   assign     wr_occ = wr_data_i[35:34]; -   assign     wr_ready_o = (wr_state == WRITING); - -   assign     we = (wr_state == WRITING); // always write to avoid timing issue -   assign     en = ~((rd_state==READING)& ~rd_ready_i);   // FIXME potential critical path -    -   assign     rd_done = (rd_state == DONE); -   assign     wr_done = (wr_state == DONE); -   assign     rd_error = (rd_state == ERROR); -   assign     wr_error = (wr_state == ERROR); -   assign     rd_idle = (rd_state == IDLE); -   assign     wr_idle = (wr_state == IDLE); - -   wire [BUF_SIZE-1:0] wr_addr_clip = (|wr_addr[15:BUF_SIZE]) ? {BUF_SIZE{1'b1}} : wr_addr[BUF_SIZE-1:0]; -    -   ram_2port #(.DWIDTH(32),.AWIDTH(BUF_SIZE)) buffer_in // CPU reads here -     (.clka(wb_clk_i),.ena(wb_stb_i),.wea(1'b0), -      .addra(wb_adr_i[BUF_SIZE+1:2]),.dia(0),.doa(wb_dat_o), -      .clkb(clk),.enb(1'b1),.web(we), -      .addrb(wr_addr_clip),.dib(wr_data_i[31:0]),.dob()); -    -   ram_2port #(.DWIDTH(32),.AWIDTH(BUF_SIZE)) buffer_out // CPU writes here -     (.clka(wb_clk_i),.ena(wb_stb_i),.wea(wb_we_i), -      .addra(wb_adr_i[BUF_SIZE+1:2]),.dia(wb_dat_i),.doa(), -      .clkb(clk),.enb(en),.web(1'b0), -      .addrb(rd_addr[BUF_SIZE-1:0]),.dib(0),.dob(rd_data_o[31:0])); -    -   always @(posedge wb_clk_i) -     if(wb_rst_i) -       wb_ack_o <= 0; -     else -       wb_ack_o <= wb_stb_i & ~wb_ack_o; - -   setting_reg #(.my_addr(BASE))  -   sreg(.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr),.in(set_data), -	.out(ctrl),.changed(go)); -    -   assign status = { wr_addr, -		     8'b0,1'b0,rd_idle,rd_error,rd_done, 1'b0,wr_idle,wr_error,wr_done}; - -endmodule // buffer_int2 diff --git a/fpga/usrp2/fifo/buffer_int_tb.v b/fpga/usrp2/fifo/buffer_int_tb.v deleted file mode 100644 index 44f8be0a0..000000000 --- a/fpga/usrp2/fifo/buffer_int_tb.v +++ /dev/null @@ -1,435 +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/>. -// - - -module buffer_int_tb (); - -   reg clk = 0; -   reg rst = 1; - -   initial #100 rst = 0; -   always #5 clk = ~clk; - -   wire en, we; -   wire [8:0] addr; -   wire [31:0] fifo2buf, buf2fifo; -    -   wire [31:0] rd_data_o; -   wire [3:0]  rd_flags_o; -   wire        rd_sop_o, rd_eop_o; -   reg 	       rd_error_i = 0, rd_read_i = 0; -    -   reg [31:0]  wr_data_i = 0; -   wire [3:0]  wr_flags_i; -   reg 	       wr_eop_i = 0, wr_sop_i = 0; -   reg 	       wr_write_i = 0; -   wire        wr_ready_o, wr_full_o; -    -   reg 	       clear = 0, write = 0, read = 0; -   reg [8:0]   firstline = 0, lastline = 0; -   wire [3:0]  step = 1; -   wire [31:0] ctrl_word = {4'b0,3'b0,clear,write,read,step,lastline,firstline}; -   reg 	       go = 0; -   wire        done, error; - -   assign      wr_flags_i = {2'b00, wr_eop_i, wr_sop_i}; -   assign      rd_sop_o = rd_flags_o[0]; -   assign      rd_eop_o = rd_flags_o[1]; -    -   buffer_int buffer_int -     (.clk(clk),.rst(rst), -      .ctrl_word(ctrl_word),.go(go), -      .done(done),.error(error), -       -      // Buffer Interface -      .en_o(en),.we_o(we),.addr_o(addr), -      .dat_to_buf(fifo2buf),.dat_from_buf(buf2fifo), - -      // Write FIFO Interface -      .wr_data_i(wr_data_i), .wr_flags_i(wr_flags_i), .wr_write_i(wr_write_i), .wr_ready_o(wr_ready_o), - -      // Read FIFO Interface -      .rd_data_o(rd_data_o), .rd_flags_o(rd_flags_o), .rd_ready_o(rd_ready_o), .rd_read_i(rd_read_i) -      ); -    -   reg 	       ram_en = 0, ram_we = 0; -   reg [8:0]   ram_addr = 0; -   reg [31:0]  ram_data = 0; -    -   ram_2port #(.DWIDTH(32),.AWIDTH(9)) ram_2port -     (.clka(clk), .ena(ram_en), .wea(ram_we), .addra(ram_addr), .dia(ram_data), .doa(), -      .clkb(clk), .enb(en), .web(we), .addrb(addr), .dib(fifo2buf), .dob(buf2fifo) ); -    -   initial -     begin -	@(negedge rst); -	@(posedge clk); -	FillRAM; - -	ResetBuffer; -	SetBufferRead(5,10); -	$display("Testing full read, no wait states."); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(6,0); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferRead(5,10); -	$display("Testing full read, 2 wait states."); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(6,2); -	repeat (10) -	  @(posedge clk); - -	ResetBuffer; -	SetBufferRead(5,10); -	$display("Testing partial read, 0 wait states, then nothing after last."); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(3,0); -	repeat (10) -	  @(posedge clk); - -	ResetBuffer; -	SetBufferRead(5,10); -	$display("Testing partial read, 0 wait states, then done at same time as last."); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(2,0); -	ReadALine; -	repeat (10) -	  @(posedge clk); - -	ResetBuffer; -	SetBufferRead(5,10); -	$display("Testing partial read, 3 wait states, then error at same time as last."); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(2,3); -	rd_error_i <= 1; -	ReadALine; -	rd_error_i <= 0; -	repeat (10) -	  @(posedge clk); - -	ResetBuffer; -	SetBufferRead(500,511); -	$display("Testing full read, to the end of the buffer."); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(12,0); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferRead(0,511); -	$display("Testing full read, start to end of the buffer."); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(512,0); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferRead(505,3); -	$display("Testing full read, wraparound"); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(11,0); -	repeat (10) -	  @(posedge clk); - -	ResetBuffer; -	SetBufferWrite(10,15); -	$display("Testing Full Write, no wait states"); -	while(!wr_ready_o) -	  @(posedge clk); -	WriteLines(6,0,72); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferWrite(18,23); -	$display("Testing Full Write, 1 wait states"); -	while(!wr_ready_o) -	  @(posedge clk); -	WriteLines(6,1,101); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferWrite(27,40); -	$display("Testing Partial Write, 0 wait states"); -	while(!wr_ready_o) -	  @(posedge clk); -	WriteLines(6,0,201); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferWrite(45,200); -	$display("Testing Partial Write, 0 wait states, then done and write simultaneously"); -	while(!wr_ready_o) -	  @(posedge clk); -	wr_sop_i <= 1; wr_eop_i <= 0; -	WriteLines(6,0,301); -	wr_sop_i <= 0; wr_eop_i <= 1; -	WriteALine(400); -	wr_sop_i <= 0; wr_eop_i <= 0; -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferWrite(55,200); -	$display("Testing Partial Write, 0 wait states, then error"); -	while(!wr_ready_o) -	  @(posedge clk); -	WriteLines(6,0,501); -	wr_sop_i <= 1; wr_eop_i <= 1; -	WriteALine(400); -	@(posedge clk); -	repeat (10) -	  @(posedge clk); -	wr_sop_i <= 0; wr_eop_i <= 0; -	 -	ResetBuffer; -	SetBufferRead(0,82); -	$display("Testing read after all the writes"); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(83,0); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferWrite(508,4); -	$display("Testing wraparound write"); -	while(!wr_ready_o) -	  @(posedge clk); -	WriteLines(9,0,601); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferRead(506,10); -	$display("Reading wraparound write"); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(17,0); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferWrite(0,511); -	$display("Testing Whole Buffer write"); -	while(!wr_ready_o) -	  @(posedge clk); -	WriteLines(512,0,1000); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferRead(0,511); -	$display("Reading Whole Buffer write"); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(512,0); -	repeat (10) -	  @(posedge clk); - -	/* -	ResetBuffer; -	SetBufferWrite(5,10); -	$display("Testing Write Too Many"); -	while(!wr_ready_o) -	  @(posedge clk); -	WriteLines(12,0,2000); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferRead(0,15); -	$display("Reading back Write Too Many"); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(16,0); -	repeat (10) -	  @(posedge clk); -	*/ -	ResetBuffer; -	SetBufferWrite(15,20); -	$display("Testing Write One Less Than Full"); -	while(!wr_ready_o) -	  @(posedge clk); -	wr_sop_i <= 1; wr_eop_i <= 0; -	WriteALine(400); -	wr_sop_i <= 0; wr_eop_i <= 0; -	WriteLines(3,0,2000); -	wr_sop_i <= 0; wr_eop_i <= 1; -	WriteALine(400); -	wr_sop_i <= 0; wr_eop_i <= 0; -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	SetBufferRead(13,22); -	$display("Reading back Write One Less Than Full"); -	while(!rd_sop_o) -	  @(posedge clk); -	ReadLines(10,0); -	repeat (10) -	  @(posedge clk); -	 -	ResetBuffer; -	repeat(100) -	  @(posedge clk); -	$finish; -     end -    -   always @(posedge clk) -     if(rd_read_i == 1'd1) -       $display("READ Buffer %d, rd_sop_o %d, rd_eop_o %d", rd_data_o, rd_sop_o, rd_eop_o); - -   always @(posedge clk) -     if(wr_write_i == 1'd1) -       $display("WRITE Buffer %d,  wr_ready_o %d, wr_full_o %d", wr_data_i, wr_ready_o, wr_full_o); -	    -   initial begin -      $dumpfile("buffer_int_tb.lxt"); -      $dumpvars(0,buffer_int_tb); -   end - -   task FillRAM; -      begin -	 ram_addr <= 0; -	 ram_data <= 0; -	 @(posedge clk); -	 ram_en <= 1; -	 ram_we <= 1; -	 @(posedge clk); -	 repeat (511) -	   begin -	      ram_addr <= ram_addr + 1; -	      ram_data <= ram_data + 1; -	      ram_en <= 1; -	      ram_we <= 1; -	      @(posedge clk); -	   end -	 ram_en <= 0; -	 ram_we <= 0; -	 @(posedge clk); -	 $display("Filled the RAM"); -      end -   endtask // FillRAM - -   task ResetBuffer; -      begin -	 clear <= 1; read <= 0; write <= 0; -	 go <= 1; -	 @(posedge clk); -	 go <= 0; -	 @(posedge clk); -	 $display("Buffer Reset"); -      end -   endtask // ClearBuffer -    -   task SetBufferWrite; -      input [8:0] start; -      input [8:0] stop; -      begin -	 clear <= 0; read <= 0; write <= 1; -	 firstline <= start; -	 lastline <= stop; -	 go <= 1; -	 @(posedge clk); -	 go <= 0; -	 @(posedge clk); -	 $display("Buffer Set for Write"); -      end -   endtask // SetBufferWrite -    -   task SetBufferRead; -      input [8:0] start; -      input [8:0] stop; -      begin -	 clear <= 0; read <= 1; write <= 0; -	 firstline <= start; -	 lastline <= stop; -	 go <= 1; -	 @(posedge clk); -	 go <= 0; -	 @(posedge clk); -	 $display("Buffer Set for Read"); -      end -   endtask // SetBufferRead - -   task ReadALine; -      begin -	 while(~rd_ready_o) -	   @(posedge clk); -	 #1 rd_read_i <= 1; -	 @(posedge clk); -	 rd_read_i <= 0; -      end -   endtask // ReadALine - -   task ReadLines; -      input [9:0] lines; -      input [7:0] wait_states; -      begin -	 $display("Read Lines: Number %d, Wait States %d",lines,wait_states); -	 repeat (lines) -	   begin -	      ReadALine; -	      repeat (wait_states) -		@(posedge clk); -	   end -      end -   endtask // ReadLines -    -   task WriteALine; -      input [31:0] value; -      begin -	 while(~wr_ready_o) -	   @(posedge clk); -	 #1 wr_write_i <= 1; -	 wr_data_i <= value; -	 @(posedge clk); -	 wr_write_i <= 0; -      end -   endtask // WriteALine -    -   task WriteLines; -      input [9:0] lines; -      input [7:0] wait_states; -      input [31:0] value; -      begin -	 $display("Write Lines: Number %d, Wait States %d",lines,wait_states); -	 repeat(lines) -	   begin -	      value <= value + 1; -	      WriteALine(value); -	      repeat(wait_states) -		@(posedge clk); -	   end -      end -   endtask // WriteLines -    -endmodule // buffer_int_tb diff --git a/fpga/usrp2/fifo/buffer_pool.v b/fpga/usrp2/fifo/buffer_pool.v deleted file mode 100644 index 48f5bd69c..000000000 --- a/fpga/usrp2/fifo/buffer_pool.v +++ /dev/null @@ -1,300 +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/>. -// - - -// Buffer pool.  Contains 8 buffers, each 2K (512 by 32).  Each buffer -// is a dual-ported RAM.  Port A on each of them is indirectly connected  -// to the wishbone bus by a bridge.  Port B may be connected any one of the -// 8 (4 rd, 4 wr) FIFO-like streaming interaces, or disconnected.  The wishbone bus -// provides access to all 8 buffers, and also controls the connections -// between the ports and the buffers, allocating them as needed. - -// wb_adr is 16 bits --  -//  bits 13:11 select which buffer -//  bits 10:2 select line in buffer -//  bits 1:0 are unused (32-bit access only) - -// BUF_SIZE is in address lines (i.e. log2 of number of lines).   -// For S3 it should be 9 (512 words, 2KB) -// For V5 it should be at least 10 (1024 words, 4KB) or 11 (2048 words, 8KB) - -module buffer_pool -  #(parameter BUF_SIZE = 9, -    parameter SET_ADDR = 64) -    (input wb_clk_i, -     input wb_rst_i, -     input wb_we_i, -     input wb_stb_i, -     input [15:0] wb_adr_i, -     input [31:0] wb_dat_i,    -     output [31:0] wb_dat_o, -     output reg wb_ack_o, -     output wb_err_o, -     output wb_rty_o, -    -     input stream_clk, -     input stream_rst, -      -     input set_stb, input [7:0] set_addr, input [31:0] set_data, -     output [31:0] status, -     output sys_int_o, -      -     output [31:0] s0, output [31:0] s1, output [31:0] s2, output [31:0] s3, -     output [31:0] s4, output [31:0] s5, output [31:0] s6, output [31:0] s7, -      -     // Write Interfaces -     input [31:0] wr0_data_i, input [3:0] wr0_flags_i, input wr0_ready_i, output wr0_ready_o, -     input [31:0] wr1_data_i, input [3:0] wr1_flags_i, input wr1_ready_i, output wr1_ready_o, -     input [31:0] wr2_data_i, input [3:0] wr2_flags_i, input wr2_ready_i, output wr2_ready_o, -     input [31:0] wr3_data_i, input [3:0] wr3_flags_i, input wr3_ready_i, output wr3_ready_o, -      -     // Read Interfaces -     output [31:0] rd0_data_o, output [3:0] rd0_flags_o, output rd0_ready_o, input rd0_ready_i,  -     output [31:0] rd1_data_o, output [3:0] rd1_flags_o, output rd1_ready_o, input rd1_ready_i,  -     output [31:0] rd2_data_o, output [3:0] rd2_flags_o, output rd2_ready_o, input rd2_ready_i,  -     output [31:0] rd3_data_o, output [3:0] rd3_flags_o, output rd3_ready_o, input rd3_ready_i -     ); -    -   wire [7:0] 	   sel_a; -    -   wire [BUF_SIZE-1:0] 	   buf_addra = wb_adr_i[BUF_SIZE+1:2];     // ignore address 1:0, 32-bit access only -   wire [2:0] 		   which_buf = wb_adr_i[BUF_SIZE+4:BUF_SIZE+2];   // address 15:14 selects the buffer pool -    -   decoder_3_8 dec(.sel(which_buf),.res(sel_a)); -    -   genvar 	 i; -    -   wire 	 go; - -   reg [2:0] 	 port[0:7];	  -   reg [3:0] 	 read_src[0:3]; -   reg [3:0] 	 write_src[0:3]; -    -   wire [7:0] 	 done; -   wire [7:0] 	 error; -   wire [7:0] 	 idle; -    -   wire [31:0] 	 buf_doa[0:7]; -    -   wire [7:0] 	 buf_enb; -   wire [7:0] 	 buf_web; -   wire [BUF_SIZE-1:0] 	 buf_addrb[0:7]; -   wire [31:0] 	 buf_dib[0:7]; -   wire [31:0] 	 buf_dob[0:7]; -    -   wire [31:0] 	 wr_data_i[0:7]; -   wire [3:0] 	 wr_flags_i[0:7]; -   wire [7:0] 	 wr_ready_i; -   wire [7:0] 	 wr_ready_o; -    -   wire [31:0] 	 rd_data_o[0:7]; -   wire [3:0] 	 rd_flags_o[0:7]; -   wire [7:0] 	 rd_ready_o; -   wire [7:0] 	 rd_ready_i; -    -   assign 	 status = {8'd0,idle[7:0],error[7:0],done[7:0]}; - -   assign 	 s0 = buf_addrb[0]; -   assign 	 s1 = buf_addrb[1]; -   assign 	 s2 = buf_addrb[2]; -   assign 	 s3 = buf_addrb[3]; -   assign 	 s4 = buf_addrb[4]; -   assign 	 s5 = buf_addrb[5]; -   assign 	 s6 = buf_addrb[6]; -   assign 	 s7 = buf_addrb[7]; -    -   wire [31:0] 	 fifo_ctrl; -   setting_reg #(.my_addr(SET_ADDR))  -     sreg(.clk(stream_clk),.rst(stream_rst),.strobe(set_stb),.addr(set_addr),.in(set_data), -	  .out(fifo_ctrl),.changed(go)); - -   integer 	 k; -   always @(posedge stream_clk) -     if(stream_rst) -       for(k=0;k<8;k=k+1) -	 port[k] <= 4;   // disabled -     else -       for(k=0;k<8;k=k+1) -	 if(go & (fifo_ctrl[31:28]==k)) -	   port[k] <= fifo_ctrl[27:25]; - -   always @(posedge stream_clk) -     if(stream_rst) -       for(k=0;k<4;k=k+1) -	 read_src[k] <= 8;  // disabled -     else -       for(k=0;k<4;k=k+1) -	 if(go & fifo_ctrl[22] & (fifo_ctrl[27:25]==k)) -	   read_src[k] <= fifo_ctrl[31:28]; -    -   always @(posedge stream_clk) -     if(stream_rst) -       for(k=0;k<4;k=k+1) -	 write_src[k] <= 8;  // disabled -     else -       for(k=0;k<4;k=k+1) -	 if(go & fifo_ctrl[23] & (fifo_ctrl[27:25]==k)) -	   write_src[k] <= fifo_ctrl[31:28]; -    -   generate -      for(i=0;i<8;i=i+1) -	begin : gen_buffer -	   RAMB16_S36_S36 dpram -	     (.DOA(buf_doa[i]),.ADDRA(buf_addra),.CLKA(wb_clk_i),.DIA(wb_dat_i),.DIPA(4'h0), -	      .ENA(wb_stb_i & sel_a[i]),.SSRA(0),.WEA(wb_we_i), -	      .DOB(buf_dob[i]),.ADDRB(buf_addrb[i]),.CLKB(stream_clk),.DIB(buf_dib[i]),.DIPB(4'h0), -	      .ENB(buf_enb[i]),.SSRB(0),.WEB(buf_web[i]) ); -	    -/*	    -	   ram_2port #(.DWIDTH(32),.AWIDTH(BUF_SIZE)) buffer -	     (.clka(wb_clk_i),.ena(wb_stb_i & sel_a[i]),.wea(wb_we_i), -	      .addra(buf_addra),.dia(wb_dat_i),.doa(buf_doa[i]), -	      .clkb(stream_clk),.enb(buf_enb[i]),.web(buf_web[i]), -	      .addrb(buf_addrb[i]),.dib(buf_dib[i]),.dob(buf_dob[i])); -  - */ -	    -	   buffer_int #(.BUF_NUM(i),.BUF_SIZE(BUF_SIZE)) buffer_int -	     (.clk(stream_clk),.rst(stream_rst), -	      .ctrl_word(fifo_ctrl),.go(go & (fifo_ctrl[31:28]==i)), -	      .done(done[i]),.error(error[i]),.idle(idle[i]), -	      .en_o(buf_enb[i]), -	      .we_o(buf_web[i]), -	      .addr_o(buf_addrb[i]), -	      .dat_to_buf(buf_dib[i]), -	      .dat_from_buf(buf_dob[i]), -	      .wr_data_i(wr_data_i[i]), -	      .wr_flags_i(wr_flags_i[i]), -	      .wr_ready_i(wr_ready_i[i]), -	      .wr_ready_o(wr_ready_o[i]), -	      .rd_data_o(rd_data_o[i]), -	      .rd_flags_o(rd_flags_o[i]), -	      .rd_ready_o(rd_ready_o[i]), -	      .rd_ready_i(rd_ready_i[i]) ); -	   mux4 #(.WIDTH(37)) -	     mux4_wr (.en(~port[i][2]),.sel(port[i][1:0]), -		      .i0({wr0_data_i,wr0_flags_i,wr0_ready_i}), -		      .i1({wr1_data_i,wr1_flags_i,wr1_ready_i}), -		      .i2({wr2_data_i,wr2_flags_i,wr2_ready_i}), -		      .i3({wr3_data_i,wr3_flags_i,wr3_ready_i}), -		      .o({wr_data_i[i],wr_flags_i[i],wr_ready_i[i]}) ); -	   mux4 #(.WIDTH(1)) -	     mux4_rd (.en(~port[i][2]),.sel(port[i][1:0]), -		      .i0(rd0_ready_i),.i1(rd1_ready_i),.i2(rd2_ready_i),.i3(rd3_ready_i), -		      .o(rd_ready_i[i])); -	end // block: gen_buffer -   endgenerate - -   //---------------------------------------------------------------------- -   // Wishbone Outputs - -   // Use the following lines if ram output and mux can be made fast enough - -   assign wb_err_o = 1'b0;  // Unused for now -   assign wb_rty_o = 1'b0;  // Unused for now -    -   always @(posedge wb_clk_i) -     wb_ack_o <= wb_stb_i & ~wb_ack_o; -   assign wb_dat_o = buf_doa[which_buf]; - -   // Use this if we can't make the RAM+MUX fast enough -   // reg [31:0] wb_dat_o_reg; -   // reg 	      stb_d1; - -   // always @(posedge wb_clk_i) -   //  begin -   //   wb_dat_o_reg <= buf_doa[which_buf]; -   //   stb_d1 <= wb_stb_i; -   //   wb_ack_o <= (stb_d1 & ~wb_ack_o) | (wb_we_i & wb_stb_i); -   //  end -   //assign     wb_dat_o = wb_dat_o_reg; -    -   mux8 #(.WIDTH(1))  -     mux8_wr0(.en(~write_src[0][3]),.sel(write_src[0][2:0]),  -	      .i0(wr_ready_o[0]), .i1(wr_ready_o[1]), .i2(wr_ready_o[2]), .i3(wr_ready_o[3]), -	      .i4(wr_ready_o[4]), .i5(wr_ready_o[5]), .i6(wr_ready_o[6]), .i7(wr_ready_o[7]), -	      .o(wr0_ready_o)); - -   mux8 #(.WIDTH(1))  -     mux8_wr1(.en(~write_src[1][3]),.sel(write_src[1][2:0]),  -	      .i0(wr_ready_o[0]), .i1(wr_ready_o[1]), .i2(wr_ready_o[2]), .i3(wr_ready_o[3]), -	      .i4(wr_ready_o[4]), .i5(wr_ready_o[5]), .i6(wr_ready_o[6]), .i7(wr_ready_o[7]), -	      .o(wr1_ready_o)); - -   mux8 #(.WIDTH(1))  -     mux8_wr2(.en(~write_src[2][3]),.sel(write_src[2][2:0]),  -	      .i0(wr_ready_o[0]), .i1(wr_ready_o[1]), .i2(wr_ready_o[2]), .i3(wr_ready_o[3]), -	      .i4(wr_ready_o[4]), .i5(wr_ready_o[5]), .i6(wr_ready_o[6]), .i7(wr_ready_o[7]), -	      .o(wr2_ready_o)); - -   mux8 #(.WIDTH(1))  -     mux8_wr3(.en(~write_src[3][3]),.sel(write_src[3][2:0]),  -	      .i0(wr_ready_o[0]), .i1(wr_ready_o[1]), .i2(wr_ready_o[2]), .i3(wr_ready_o[3]), -	      .i4(wr_ready_o[4]), .i5(wr_ready_o[5]), .i6(wr_ready_o[6]), .i7(wr_ready_o[7]), -	      .o(wr3_ready_o)); - -   mux8 #(.WIDTH(37))  -     mux8_rd0(.en(~read_src[0][3]),.sel(read_src[0][2:0]),  -	      .i0({rd_data_o[0],rd_flags_o[0],rd_ready_o[0]}), -	      .i1({rd_data_o[1],rd_flags_o[1],rd_ready_o[1]}), -	      .i2({rd_data_o[2],rd_flags_o[2],rd_ready_o[2]}), -	      .i3({rd_data_o[3],rd_flags_o[3],rd_ready_o[3]}), -	      .i4({rd_data_o[4],rd_flags_o[4],rd_ready_o[4]}), -	      .i5({rd_data_o[5],rd_flags_o[5],rd_ready_o[5]}), -	      .i6({rd_data_o[6],rd_flags_o[6],rd_ready_o[6]}), -	      .i7({rd_data_o[7],rd_flags_o[7],rd_ready_o[7]}), -	      .o({rd0_data_o,rd0_flags_o,rd0_ready_o})); -    -   mux8 #(.WIDTH(37))  -     mux8_rd1(.en(~read_src[1][3]),.sel(read_src[1][2:0]),  -	      .i0({rd_data_o[0],rd_flags_o[0],rd_ready_o[0]}), -	      .i1({rd_data_o[1],rd_flags_o[1],rd_ready_o[1]}), -	      .i2({rd_data_o[2],rd_flags_o[2],rd_ready_o[2]}), -	      .i3({rd_data_o[3],rd_flags_o[3],rd_ready_o[3]}), -	      .i4({rd_data_o[4],rd_flags_o[4],rd_ready_o[4]}), -	      .i5({rd_data_o[5],rd_flags_o[5],rd_ready_o[5]}), -	      .i6({rd_data_o[6],rd_flags_o[6],rd_ready_o[6]}), -	      .i7({rd_data_o[7],rd_flags_o[7],rd_ready_o[7]}), -	      .o({rd1_data_o,rd1_flags_o,rd1_ready_o})); -    -   mux8 #(.WIDTH(37))  -     mux8_rd2(.en(~read_src[2][3]),.sel(read_src[2][2:0]),  -	      .i0({rd_data_o[0],rd_flags_o[0],rd_ready_o[0]}), -	      .i1({rd_data_o[1],rd_flags_o[1],rd_ready_o[1]}), -	      .i2({rd_data_o[2],rd_flags_o[2],rd_ready_o[2]}), -	      .i3({rd_data_o[3],rd_flags_o[3],rd_ready_o[3]}), -	      .i4({rd_data_o[4],rd_flags_o[4],rd_ready_o[4]}), -	      .i5({rd_data_o[5],rd_flags_o[5],rd_ready_o[5]}), -	      .i6({rd_data_o[6],rd_flags_o[6],rd_ready_o[6]}), -	      .i7({rd_data_o[7],rd_flags_o[7],rd_ready_o[7]}), -	      .o({rd2_data_o,rd2_flags_o,rd2_ready_o})); -    -   mux8 #(.WIDTH(37))  -     mux8_rd3(.en(~read_src[3][3]),.sel(read_src[3][2:0]),  -	      .i0({rd_data_o[0],rd_flags_o[0],rd_ready_o[0]}), -	      .i1({rd_data_o[1],rd_flags_o[1],rd_ready_o[1]}), -	      .i2({rd_data_o[2],rd_flags_o[2],rd_ready_o[2]}), -	      .i3({rd_data_o[3],rd_flags_o[3],rd_ready_o[3]}), -	      .i4({rd_data_o[4],rd_flags_o[4],rd_ready_o[4]}), -	      .i5({rd_data_o[5],rd_flags_o[5],rd_ready_o[5]}), -	      .i6({rd_data_o[6],rd_flags_o[6],rd_ready_o[6]}), -	      .i7({rd_data_o[7],rd_flags_o[7],rd_ready_o[7]}), -	      .o({rd3_data_o,rd3_flags_o,rd3_ready_o})); -    -   assign sys_int_o = (|error) | (|done); -    -endmodule // buffer_pool diff --git a/fpga/usrp2/fifo/buffer_pool_tb.v b/fpga/usrp2/fifo/buffer_pool_tb.v deleted file mode 100644 index 0ee76689e..000000000 --- a/fpga/usrp2/fifo/buffer_pool_tb.v +++ /dev/null @@ -1,75 +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/>. -// - - -module buffer_pool_tb(); -    -   wire wb_clk_i; -   wire wb_rst_i; -   wire wb_we_i; -   wire wb_stb_i; -   wire [15:0] wb_adr_i; -   wire [31:0] wb_dat_i;    -   wire [31:0] wb_dat_o; -   wire wb_ack_o; -   wire wb_err_o; -   wire wb_rty_o; - -   wire stream_clk, stream_rst; - -   wire set_stb; -   wire [7:0] set_addr; -   wire [31:0] set_data; - -   wire [31:0] wr0_data, wr1_data, wr2_data, wr3_data; -   wire [31:0] rd0_data, rd1_data, rd2_data, rd3_data; -   wire [3:0]  wr0_flags, wr1_flags, wr2_flags, wr3_flags; -   wire [3:0]  rd0_flags, rd1_flags, rd2_flags, rd3_flags; -   wire        wr0_ready, wr1_ready, wr2_ready, wr3_ready; -   wire        rd0_ready, rd1_ready, rd2_ready, rd3_ready; -   wire        wr0_write, wr1_write, wr2_write, wr3_write; -   wire        rd0_read, rd1_read, rd2_read, rd3_read; - -   buffer_pool dut -     (.wb_clk_i(wb_clk_i), -      .wb_rst_i(wb_rst_i), -      .wb_we_i(wb_we_i), -      .wb_stb_i(wb_stb_i), -      .wb_adr_i(wb_adr_i), -      .wb_dat_i(wb_dat_i),    -      .wb_dat_o(wb_dat_o), -      .wb_ack_o(wb_ack_o), -      .wb_err_o(wb_err_o), -      .wb_rty_o(wb_rty_o), -       -      .stream_clk(stream_clk), -      .stream_rst(stream_rst), -       -      .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), -       -      .wr0_data_i(wr0_data), .wr0_write_i(wr0_write), .wr0_flags_i(wr0_flags), .wr0_ready_o(wr0_ready), -      .wr1_data_i(wr1_data), .wr1_write_i(wr1_write), .wr1_flags_i(wr1_flags), .wr1_ready_o(wr1_ready), -      .wr2_data_i(wr2_data), .wr2_write_i(wr2_write), .wr2_flags_i(wr2_flags), .wr2_ready_o(wr2_ready), -      .wr3_data_i(wr3_data), .wr3_write_i(wr3_write), .wr3_flags_i(wr3_flags), .wr3_ready_o(wr3_ready), -       -      .rd0_data_o(rd0_data), .rd0_read_i(rd0_read), .rd0_flags_o(rd0_flags), .rd0_ready_o(rd0_ready), -      .rd1_data_o(rd1_data), .rd1_read_i(rd1_read), .rd1_flags_o(rd1_flags), .rd1_ready_o(rd1_ready), -      .rd2_data_o(rd2_data), .rd2_read_i(rd2_read), .rd2_flags_o(rd2_flags), .rd2_ready_o(rd2_ready), -      .rd3_data_o(rd3_data), .rd3_read_i(rd3_read), .rd3_flags_o(rd3_flags), .rd3_ready_o(rd3_ready) -      ); -    -endmodule // buffer_pool_tb diff --git a/fpga/usrp2/fifo/crossbar36.v b/fpga/usrp2/fifo/crossbar36.v deleted file mode 100644 index 4e2aed7ce..000000000 --- a/fpga/usrp2/fifo/crossbar36.v +++ /dev/null @@ -1,59 +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/>. -// - - - -module crossbar36 -  (input clk, input reset, input clear, -   input cross, -   input [35:0] data0_i, input src0_rdy_i, output dst0_rdy_o, -   input [35:0] data1_i, input src1_rdy_i, output dst1_rdy_o, -   output [35:0] data0_o, output src0_rdy_o, input dst0_rdy_i, -   output [35:0] data1_o, output src1_rdy_o, input dst1_rdy_i); - -   reg 		 cross_int, active0, active1; -   wire active0_next = (src0_rdy_i & dst0_rdy_o)? ~data0_i[33] : active0; -   wire active1_next = (src1_rdy_i & dst1_rdy_o)? ~data1_i[33] : active1; - -   assign data0_o = cross_int ? data1_i : data0_i; -   assign data1_o = cross_int ? data0_i : data1_i; - -   assign src0_rdy_o = cross_int ? src1_rdy_i : src0_rdy_i; -   assign src1_rdy_o = cross_int ? src0_rdy_i : src1_rdy_i; - -   assign dst0_rdy_o = cross_int ? dst1_rdy_i : dst0_rdy_i; -   assign dst1_rdy_o = cross_int ? dst0_rdy_i : dst1_rdy_i; -    -   always @(posedge clk) -     if(reset | clear) -       active0 <= 0; -     else -       active0 <= active0_next; -    -   always @(posedge clk) -     if(reset | clear) -       active1 <= 0; -     else -       active1 <= active1_next; - -   always @(posedge clk) -     if(reset | clear) -       cross_int <= 0; -     else if(~active0_next & ~active1_next) -       cross_int <= cross; -    -endmodule // crossbar36 diff --git a/fpga/usrp2/fifo/dsp_framer36.v b/fpga/usrp2/fifo/dsp_framer36.v deleted file mode 100644 index ef7395551..000000000 --- a/fpga/usrp2/fifo/dsp_framer36.v +++ /dev/null @@ -1,89 +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/>. -// - - -// This has 3 functions: -//   Correct the VITA packet length -//   [optional] Frame DSP packets with an header line to be handled by the protocol machine -//   Hold on to the packet until there is a complete one before allowing to leave - -module dsp_framer36 -  #(parameter BUF_SIZE = 9,  -    parameter PORT_SEL = 0, -    parameter PROT_ENG_FLAGS = 1) -   (input clk, input reset, input clear, -    input [35:0] data_i, input src_rdy_i, output dst_rdy_o, -    output [35:0] data_o, output src_rdy_o, input dst_rdy_i); - -   wire 	  dfifo_in_dst_rdy, dfifo_in_src_rdy, dfifo_out_dst_rdy, dfifo_out_src_rdy; -   wire 	  tfifo_in_dst_rdy, tfifo_in_src_rdy, tfifo_out_dst_rdy, tfifo_out_src_rdy; - -   wire 	  do_xfer_in = dfifo_in_src_rdy & dfifo_in_dst_rdy; -   wire 	  do_xfer_out = src_rdy_o & dst_rdy_i; -    -   wire 	  have_space = dfifo_in_dst_rdy & tfifo_in_dst_rdy; -   reg [15:0] 	  pkt_len_in, pkt_len_out; -   wire [15:0] 	  tfifo_data; -   wire [35:0] 	  dfifo_out_data; -    -   assign dst_rdy_o        = have_space; -   assign dfifo_in_src_rdy = src_rdy_i & have_space; -    -   fifo_cascade #(.WIDTH(36), .SIZE(BUF_SIZE)) dfifo -     (.clk(clk), .reset(reset), .clear(clear), -      .datain(data_i), .src_rdy_i(dfifo_in_src_rdy), .dst_rdy_o(dfifo_in_dst_rdy), -      .dataout(dfifo_out_data), .src_rdy_o(dfifo_out_src_rdy),  .dst_rdy_i(dfifo_out_dst_rdy) ); - -   fifo_short #(.WIDTH(16)) tfifo -     (.clk(clk), .reset(reset), .clear(clear), -      .datain(pkt_len_in),  .src_rdy_i(tfifo_in_src_rdy), .dst_rdy_o(tfifo_in_dst_rdy), -      .dataout(tfifo_data), .src_rdy_o(tfifo_out_src_rdy), .dst_rdy_i(tfifo_out_dst_rdy), -      .space(), .occupied() ); - -   // FIXME won't handle single-line packets, will show wrong length -   always @(posedge clk) -     if(reset | clear) -       pkt_len_in <= 0; -     else if(do_xfer_in) -       if(data_i[32])   // sof -	 pkt_len_in <= 2;  // fixes off by one since number is stored before increment -       else -	 pkt_len_in <= pkt_len_in + 1; - -   assign tfifo_in_src_rdy = do_xfer_in & data_i[33]; // store length when at eof in -   assign tfifo_out_dst_rdy = do_xfer_out & data_o[33]; // remove length from list at eof out - -   always @(posedge clk) -     if(reset | clear) -       pkt_len_out <= (PROT_ENG_FLAGS ? 1'b0 : 1'b1); -     else if(do_xfer_out) -       if(dfifo_out_data[33]) // eof -	 pkt_len_out <= (PROT_ENG_FLAGS ? 1'b0 : 1'b1); -       else -	 pkt_len_out <= pkt_len_out + 1; -    -   assign dfifo_out_dst_rdy = do_xfer_out & (pkt_len_out != 0); - -   wire [1:0] 	  port_sel_bits = PORT_SEL; -    -   assign data_o = (pkt_len_out == 0) ? {3'b000, 1'b1, 13'b0, port_sel_bits, 1'b1, tfifo_data[13:0],2'b00} : -		   (pkt_len_out == 1) ? {3'b000, (PROT_ENG_FLAGS ? 1'b0: 1'b1), dfifo_out_data[31:16],tfifo_data} :  -		   {dfifo_out_data[35:33], 1'b0, dfifo_out_data[31:0] }; - -   assign src_rdy_o = dfifo_out_src_rdy & tfifo_out_src_rdy; -    -endmodule // dsp_framer36 diff --git a/fpga/usrp2/fifo/fifo19_mux.v b/fpga/usrp2/fifo/fifo19_mux.v deleted file mode 100644 index a23ac2bb4..000000000 --- a/fpga/usrp2/fifo/fifo19_mux.v +++ /dev/null @@ -1,94 +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/>. -// - - -// Mux packets from multiple FIFO interfaces onto a single one. -//  Can alternate or give priority to one port (port 0) -//  In prio mode, port 1 will never get access if port 0 is always busy - -module fifo19_mux -  #(parameter prio = 0) -   (input clk, input reset, input clear, -    input [18:0] data0_i, input src0_rdy_i, output dst0_rdy_o, -    input [18:0] data1_i, input src1_rdy_i, output dst1_rdy_o, -    output [18:0] data_o, output src_rdy_o, input dst_rdy_i); - -   wire [18:0] 	  data0_int, data1_int; -   wire 	  src0_rdy_int, dst0_rdy_int, src1_rdy_int, dst1_rdy_int; -    -   fifo_short #(.WIDTH(19)) mux_fifo_in0 -     (.clk(clk), .reset(reset), .clear(clear), -      .datain(data0_i), .src_rdy_i(src0_rdy_i), .dst_rdy_o(dst0_rdy_o), -      .dataout(data0_int), .src_rdy_o(src0_rdy_int), .dst_rdy_i(dst0_rdy_int)); - -   fifo_short #(.WIDTH(19)) mux_fifo_in1 -     (.clk(clk), .reset(reset), .clear(clear), -      .datain(data1_i), .src_rdy_i(src1_rdy_i), .dst_rdy_o(dst1_rdy_o), -      .dataout(data1_int), .src_rdy_o(src1_rdy_int), .dst_rdy_i(dst1_rdy_int)); - -   localparam MUX_IDLE0 = 0; -   localparam MUX_DATA0 = 1; -   localparam MUX_IDLE1 = 2; -   localparam MUX_DATA1 = 3; -    -   reg [1:0] 	  state; - -   wire 	  eof0 = data0_int[17]; -   wire 	  eof1 = data1_int[17]; -    -   wire [18:0] 	  data_int; -   wire 	  src_rdy_int, dst_rdy_int; -    -   always @(posedge clk) -     if(reset | clear) -       state <= MUX_IDLE0; -     else -       case(state) -	 MUX_IDLE0 : -	   if(src0_rdy_int) -	     state <= MUX_DATA0; -	   else if(src1_rdy_int) -	     state <= MUX_DATA1; - -	 MUX_DATA0 : -	   if(src0_rdy_int & dst_rdy_int & eof0) -	     state <= prio ? MUX_IDLE0 : MUX_IDLE1; - -	 MUX_IDLE1 : -	   if(src1_rdy_int) -	     state <= MUX_DATA1; -	   else if(src0_rdy_int) -	     state <= MUX_DATA0; -	    -	 MUX_DATA1 : -	   if(src1_rdy_int & dst_rdy_int & eof1) -	     state <= MUX_IDLE0; -	  -	 default : -	   state <= MUX_IDLE0; -       endcase // case (state) - -   assign dst0_rdy_int = (state==MUX_DATA0) ? dst_rdy_int : 0; -   assign dst1_rdy_int = (state==MUX_DATA1) ? dst_rdy_int : 0; -   assign src_rdy_int = (state==MUX_DATA0) ? src0_rdy_int : (state==MUX_DATA1) ? src1_rdy_int : 0; -   assign data_int = (state==MUX_DATA0) ? data0_int : data1_int; -    -   fifo_short #(.WIDTH(19)) mux_fifo -     (.clk(clk), .reset(reset), .clear(clear), -      .datain(data_int), .src_rdy_i(src_rdy_int), .dst_rdy_o(dst_rdy_int), -      .dataout(data_o), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i)); -endmodule // fifo19_mux diff --git a/fpga/usrp2/fifo/fifo19_pad.v b/fpga/usrp2/fifo/fifo19_pad.v deleted file mode 100644 index bb6e1fa92..000000000 --- a/fpga/usrp2/fifo/fifo19_pad.v +++ /dev/null @@ -1,83 +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/>. -// - - -// Pads a packet out to the minimum length -//  Packets already longer than min length are unchanged - - -module fifo19_pad -  #(parameter LENGTH=16, -    parameter PAD_VALUE=0) -   (input clk, input reset, input clear, -    input [18:0] data_i, -    input src_rdy_i, -    output dst_rdy_o, -    output [18:0] data_o, -    output src_rdy_o, -    input dst_rdy_i); - -   reg [15:0] count; -   reg [1:0]  pad_state; -   localparam PAD_IDLE = 0; -   localparam PAD_TOOSHORT = 1; -   localparam PAD_LONGENOUGH = 2; -   localparam PAD_PADDING = 3; - -   always @(posedge clk) -     if(reset | clear) -       pad_state <= PAD_IDLE; -     else -       case(pad_state) -	 PAD_IDLE : -	   begin -	      count <= 1; -	      pad_state <= PAD_TOOSHORT; -	   end -	 PAD_TOOSHORT : -	   if(src_rdy_i & dst_rdy_i) -	     begin -		count <= count + 1; -		if(data_i[17]) -		  pad_state <= PAD_PADDING; -		else if(count == (LENGTH-1)) -		  pad_state <= PAD_LONGENOUGH; -	     end -	 PAD_PADDING : -	   if(dst_rdy_i) -	     begin -		count <= count + 1; -		if(count == LENGTH) -		  pad_state <= PAD_IDLE; -	     end -	 PAD_LONGENOUGH : -	   if(src_rdy_i & dst_rdy_i & data_i[17]) -	     pad_state <= PAD_IDLE; -       endcase // case (pad_state) -    -   wire passthru = (pad_state == PAD_TOOSHORT) | (pad_state == PAD_LONGENOUGH); -    -   assign dst_rdy_o = passthru ? dst_rdy_i : 1'b0; -   assign src_rdy_o = passthru ? src_rdy_i : (pad_state == PAD_PADDING); -    -   assign data_o[15:0] = (pad_state == PAD_PADDING) ? PAD_VALUE : data_i[15:0]; -   assign data_o[16] = (count == 1); -   assign data_o[17] = (pad_state == PAD_LONGENOUGH) ? data_i[17] : (count == LENGTH); -   assign data_o[18] = (pad_state == PAD_LONGENOUGH) ? data_i[18] : 1'b0; -    -          -endmodule // fifo19_pad diff --git a/fpga/usrp2/fifo/fifo19_to_fifo36.v b/fpga/usrp2/fifo/fifo19_to_fifo36.v deleted file mode 100644 index 32734405a..000000000 --- a/fpga/usrp2/fifo/fifo19_to_fifo36.v +++ /dev/null @@ -1,127 +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/>. -// - - -// Parameter LE tells us if we are little-endian.   -// Little-endian means send lower 16 bits first. -// Default is big endian (network order), send upper bits first. - -module fifo19_to_fifo36 -  #(parameter LE=0) -   (input clk, input reset, input clear, -    input [18:0] f19_datain, -    input f19_src_rdy_i, -    output f19_dst_rdy_o, - -    output [35:0] f36_dataout, -    output f36_src_rdy_o, -    input f36_dst_rdy_i, -    output [31:0] debug -    ); -    -   // Shortfifo on input to guarantee no deadlock -   wire [18:0] 	  f19_data_int; -   wire 	  f19_src_rdy_int, f19_dst_rdy_int; -    -   fifo_short #(.WIDTH(19)) head_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(f19_datain), .src_rdy_i(f19_src_rdy_i), .dst_rdy_o(f19_dst_rdy_o), -      .dataout(f19_data_int), .src_rdy_o(f19_src_rdy_int), .dst_rdy_i(f19_dst_rdy_int), -      .space(),.occupied() ); - -   // Actual f19 to f36 which could deadlock if not connected to shortfifos -   reg 		  f36_sof_int, f36_eof_int; -   reg [1:0] 	  f36_occ_int; -   wire [35:0] 	  f36_data_int; -   wire 	  f36_src_rdy_int, f36_dst_rdy_int; -       -   reg [1:0] 	  state; -   reg [15:0] 	  dat0, dat1; - -   wire 	  f19_sof_int  = f19_data_int[16]; -   wire 	  f19_eof_int  = f19_data_int[17]; -   wire 	  f19_occ_int  = f19_data_int[18]; - -   wire 	  xfer_out = f36_src_rdy_int & f36_dst_rdy_int; - -   always @(posedge clk) -     if(f19_src_rdy_int & ((state==0)|xfer_out)) -       f36_sof_int 	<= f19_sof_int; - -   always @(posedge clk) -     if(f19_src_rdy_int & ((state != 2)|xfer_out)) -       f36_eof_int 	<= f19_eof_int; - -   always @(posedge clk) -     if(reset) -       begin -	  state 	<= 0; -	  f36_occ_int <= 0; -       end -     else -       if(f19_src_rdy_int) -	 case(state) -	   0 :  -	     begin -		dat0 <= f19_data_int; -		if(f19_eof_int) -		  begin -		     state <= 2; -		     f36_occ_int <= f19_occ_int ? 2'b01 : 2'b10; -		  end -		else -		  state <= 1; -	     end -	   1 :  -	     begin -		dat1 <= f19_data_int; -		state <= 2; -		if(f19_eof_int) -		  f36_occ_int <= f19_occ_int ? 2'b11 : 2'b00; -	     end -	   2 :  -	     if(xfer_out) -	       begin -		  dat0 <= f19_data_int; -		  if(f19_eof_int) // remain in state 2 if we are at eof -		    f36_occ_int <= f19_occ_int ? 2'b01 : 2'b10; -		  else -		    state 	   <= 1; -	       end -	 endcase // case(state) -       else -	 if(xfer_out) -	   begin -	      state 	   <= 0; -	      f36_occ_int <= 0; -	   end -    -   assign    f19_dst_rdy_int  = xfer_out | (state != 2); -   assign    f36_data_int     = LE ? {f36_occ_int,f36_eof_int,f36_sof_int,dat1,dat0} : -				{f36_occ_int,f36_eof_int,f36_sof_int,dat0,dat1}; -   assign    f36_src_rdy_int  = (state == 2); - -   assign    debug = state; - -   // Shortfifo on output to guarantee no deadlock -   fifo_short #(.WIDTH(36)) tail_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(f36_data_int), .src_rdy_i(f36_src_rdy_int), .dst_rdy_o(f36_dst_rdy_int), -      .dataout(f36_dataout), .src_rdy_o(f36_src_rdy_o), .dst_rdy_i(f36_dst_rdy_i), -      .space(),.occupied() ); -    -endmodule // fifo19_to_fifo36 diff --git a/fpga/usrp2/fifo/fifo19_to_ll8.v b/fpga/usrp2/fifo/fifo19_to_ll8.v deleted file mode 100644 index 1ebb140c2..000000000 --- a/fpga/usrp2/fifo/fifo19_to_ll8.v +++ /dev/null @@ -1,70 +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/>. -// - - -module fifo19_to_ll8 -  (input clk, input reset, input clear, -   input [18:0] f19_data, -   input f19_src_rdy_i, -   output f19_dst_rdy_o, - -   output reg [7:0] ll_data, -   output ll_sof_n, -   output ll_eof_n, -   output ll_src_rdy_n, -   input ll_dst_rdy_n); - -   wire  ll_sof, ll_eof, ll_src_rdy; -   assign ll_sof_n 	= ~ll_sof; -   assign ll_eof_n 	= ~ll_eof; -   assign ll_src_rdy_n 	= ~ll_src_rdy; -   wire ll_dst_rdy 	= ~ll_dst_rdy_n; - -   wire   f19_sof 	= f19_data[16]; -   wire   f19_eof 	= f19_data[17]; -   wire   f19_occ 	= f19_data[18]; -    -   wire advance, end_early; -   reg state; - -   always @(posedge clk) -     if(reset) -       state 	  <= 0; -     else -       if(advance) -	 if(ll_eof) -	   state  <= 0; -	 else -	   state  <= state + 1; - -   always @* -     case(state) -       0 : ll_data = f19_data[15:8]; -       1 : ll_data = f19_data[7:0]; -       default : ll_data = f19_data[15:8]; -       endcase // case (state) -    -   assign ll_sof 	 = (state==0) & f19_sof; -   assign ll_eof 	 = f19_eof & ((f19_occ==1)|(state==1)); -    -   assign ll_src_rdy 	 = f19_src_rdy_i; - -   assign advance 	 = ll_src_rdy & ll_dst_rdy; -   assign f19_dst_rdy_o  = advance & ((state==1)|ll_eof); -    -endmodule // fifo19_to_ll8 - diff --git a/fpga/usrp2/fifo/fifo36_demux.v b/fpga/usrp2/fifo/fifo36_demux.v deleted file mode 100644 index 6f516691a..000000000 --- a/fpga/usrp2/fifo/fifo36_demux.v +++ /dev/null @@ -1,67 +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/>. -// - - -// Demux packets from a fifo based on the contents of the first line -//  If first line matches the parameter and mask, send to data1, otherwise send to data0 - -module fifo36_demux -  #(parameter match_data = 0, -    parameter match_mask = 0) -   (input clk, input reset, input clear, -    input [35:0] data_i, input src_rdy_i, output dst_rdy_o, -    output [35:0] data0_o, output src0_rdy_o, input dst0_rdy_i, -    output [35:0] data1_o, output src1_rdy_o, input dst1_rdy_i); - -   localparam DMX_IDLE = 0; -   localparam DMX_DATA0 = 1; -   localparam DMX_DATA1 = 2; -    -   reg [1:0] 	  state; - -   wire 	  match = |( (data_i ^ match_data) & match_mask ); -   wire 	  eof = data_i[33]; -    -   always @(posedge clk) -     if(reset | clear) -       state <= DMX_IDLE; -     else -       case(state) -	 DMX_IDLE : -	   if(src_rdy_i) -	     if(match) -	       state <= DMX_DATA1; -	     else -	       state <= DMX_DATA0; -	 DMX_DATA0 : -	   if(src_rdy_i & dst0_rdy_i & eof) -	     state <= DMX_IDLE; -	 DMX_DATA1 : -	   if(src_rdy_i & dst1_rdy_i & eof) -	     state <= DMX_IDLE; -	 default : -	   state <= DMX_IDLE; -       endcase // case (state) - -   assign dst_rdy_o = (state==DMX_IDLE) ? 0 : (state==DMX_DATA0) ? dst0_rdy_i : dst1_rdy_i; -   assign src0_rdy_o = (state==DMX_DATA0) ? src_rdy_i : 0; -   assign src1_rdy_o = (state==DMX_DATA1) ? src_rdy_i : 0; - -   assign data0_o = data_i; -   assign data1_o = data_i; -    -endmodule // fifo36_demux diff --git a/fpga/usrp2/fifo/fifo36_mux.v b/fpga/usrp2/fifo/fifo36_mux.v deleted file mode 100644 index cf7b2b4d1..000000000 --- a/fpga/usrp2/fifo/fifo36_mux.v +++ /dev/null @@ -1,94 +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/>. -// - - -// Mux packets from multiple FIFO interfaces onto a single one. -//  Can alternate or give priority to one port (port 0) -//  In prio mode, port 1 will never get access if port 0 is always busy - -module fifo36_mux -  #(parameter prio = 0) -   (input clk, input reset, input clear, -    input [35:0] data0_i, input src0_rdy_i, output dst0_rdy_o, -    input [35:0] data1_i, input src1_rdy_i, output dst1_rdy_o, -    output [35:0] data_o, output src_rdy_o, input dst_rdy_i); - -   wire [35:0] 	  data0_int, data1_int; -   wire 	  src0_rdy_int, dst0_rdy_int, src1_rdy_int, dst1_rdy_int; -    -   fifo_short #(.WIDTH(36)) mux_fifo_in0 -     (.clk(clk), .reset(reset), .clear(clear), -      .datain(data0_i), .src_rdy_i(src0_rdy_i), .dst_rdy_o(dst0_rdy_o), -      .dataout(data0_int), .src_rdy_o(src0_rdy_int), .dst_rdy_i(dst0_rdy_int)); - -   fifo_short #(.WIDTH(36)) mux_fifo_in1 -     (.clk(clk), .reset(reset), .clear(clear), -      .datain(data1_i), .src_rdy_i(src1_rdy_i), .dst_rdy_o(dst1_rdy_o), -      .dataout(data1_int), .src_rdy_o(src1_rdy_int), .dst_rdy_i(dst1_rdy_int)); - -   localparam MUX_IDLE0 = 0; -   localparam MUX_DATA0 = 1; -   localparam MUX_IDLE1 = 2; -   localparam MUX_DATA1 = 3; -    -   reg [1:0] 	  state; - -   wire 	  eof0 = data0_int[33]; -   wire 	  eof1 = data1_int[33]; -    -   wire [35:0] 	  data_int; -   wire 	  src_rdy_int, dst_rdy_int; -    -   always @(posedge clk) -     if(reset | clear) -       state <= MUX_IDLE0; -     else -       case(state) -	 MUX_IDLE0 : -	   if(src0_rdy_int) -	     state <= MUX_DATA0; -	   else if(src1_rdy_int) -	     state <= MUX_DATA1; - -	 MUX_DATA0 : -	   if(src0_rdy_int & dst_rdy_int & eof0) -	     state <= prio ? MUX_IDLE0 : MUX_IDLE1; - -	 MUX_IDLE1 : -	   if(src1_rdy_int) -	     state <= MUX_DATA1; -	   else if(src0_rdy_int) -	     state <= MUX_DATA0; -	    -	 MUX_DATA1 : -	   if(src1_rdy_int & dst_rdy_int & eof1) -	     state <= MUX_IDLE0; -	  -	 default : -	   state <= MUX_IDLE0; -       endcase // case (state) - -   assign dst0_rdy_int = (state==MUX_DATA0) ? dst_rdy_int : 0; -   assign dst1_rdy_int = (state==MUX_DATA1) ? dst_rdy_int : 0; -   assign src_rdy_int = (state==MUX_DATA0) ? src0_rdy_int : (state==MUX_DATA1) ? src1_rdy_int : 0; -   assign data_int = (state==MUX_DATA0) ? data0_int : data1_int; -    -   fifo_short #(.WIDTH(36)) mux_fifo -     (.clk(clk), .reset(reset), .clear(clear), -      .datain(data_int), .src_rdy_i(src_rdy_int), .dst_rdy_o(dst_rdy_int), -      .dataout(data_o), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i)); -endmodule // fifo36_demux diff --git a/fpga/usrp2/fifo/fifo36_to_fifo19.v b/fpga/usrp2/fifo/fifo36_to_fifo19.v deleted file mode 100644 index cb93e10ad..000000000 --- a/fpga/usrp2/fifo/fifo36_to_fifo19.v +++ /dev/null @@ -1,80 +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/>. -// - - -// Parameter LE tells us if we are little-endian.   -// Little-endian means send lower 16 bits first. -// Default is big endian (network order), send upper bits first. - -module fifo36_to_fifo19 -  #(parameter LE=0) -   (input clk, input reset, input clear, -    input [35:0] f36_datain, -    input f36_src_rdy_i, -    output f36_dst_rdy_o, -     -    output [18:0] f19_dataout, -    output f19_src_rdy_o, -    input f19_dst_rdy_i ); -       -   wire [18:0] f19_data_int; -   wire        f19_src_rdy_int, f19_dst_rdy_int; -   wire [35:0] f36_data_int; -   wire        f36_src_rdy_int, f36_dst_rdy_int; -    -   // Shortfifo on input to guarantee no deadlock -   fifo_short #(.WIDTH(36)) head_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(f36_datain), .src_rdy_i(f36_src_rdy_i), .dst_rdy_o(f36_dst_rdy_o), -      .dataout(f36_data_int), .src_rdy_o(f36_src_rdy_int), .dst_rdy_i(f36_dst_rdy_int), -      .space(),.occupied() ); - -   // Main fifo36_to_fifo19, needs shortfifos to guarantee no deadlock -   wire [1:0]  f36_occ_int  = f36_data_int[35:34]; -   wire        f36_sof_int  = f36_data_int[32]; -   wire        f36_eof_int  = f36_data_int[33]; -    -   reg 	  phase; -   wire   half_line 	   = f36_eof_int & ((f36_occ_int==1)|(f36_occ_int==2)); -    -   assign f19_data_int[15:0] = (LE ^ phase) ? f36_data_int[15:0] : f36_data_int[31:16]; -   assign f19_data_int[16]   = phase ? 0 : f36_sof_int; -   assign f19_data_int[17]   = phase ? f36_eof_int : half_line; -   assign f19_data_int[18]   = f19_data_int[17] & ((f36_occ_int==1)|(f36_occ_int==3)); -    -   assign f19_src_rdy_int    = f36_src_rdy_int; -   assign f36_dst_rdy_int    = (phase | half_line) & f19_dst_rdy_int; -    -   wire   f19_xfer 	   = f19_src_rdy_int & f19_dst_rdy_int; -   wire   f36_xfer 	   = f36_src_rdy_int & f36_dst_rdy_int; -    -   always @(posedge clk) -     if(reset) -       phase 		  <= 0; -     else if(f36_xfer) -       phase 		  <= 0; -     else if(f19_xfer) -       phase 		  <= 1; -    -   // Shortfifo on output to guarantee no deadlock -   fifo_short #(.WIDTH(19)) tail_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(f19_data_int), .src_rdy_i(f19_src_rdy_int), .dst_rdy_o(f19_dst_rdy_int), -      .dataout(f19_dataout), .src_rdy_o(f19_src_rdy_o), .dst_rdy_i(f19_dst_rdy_i), -      .space(),.occupied() ); - -endmodule // fifo36_to_fifo19 diff --git a/fpga/usrp2/fifo/fifo36_to_fifo72.v b/fpga/usrp2/fifo/fifo36_to_fifo72.v deleted file mode 100644 index 237149cc2..000000000 --- a/fpga/usrp2/fifo/fifo36_to_fifo72.v +++ /dev/null @@ -1,142 +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/>. -// - - -// Parameter LE tells us if we are little-endian.   -// Little-endian means send lower 16 bits first. -// Default is big endian (network order), send upper bits first. - -module fifo36_to_fifo72 -  #(parameter LE=0) -   (input clk, input reset, input clear, -    input [35:0] f36_datain, -    input f36_src_rdy_i, -    output f36_dst_rdy_o, - -    output [71:0] f72_dataout, -    output f72_src_rdy_o, -    input f72_dst_rdy_i, -    output [31:0] debug -    ); -    -   // Shortfifo on input to guarantee no deadlock -   wire [35:0] 	  f36_data_int; -   wire 	  f36_src_rdy_int, f36_dst_rdy_int; -    -   fifo_short #(.WIDTH(36)) head_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(f36_datain), .src_rdy_i(f36_src_rdy_i), .dst_rdy_o(f36_dst_rdy_o), -      .dataout(f36_data_int), .src_rdy_o(f36_src_rdy_int), .dst_rdy_i(f36_dst_rdy_int), -      .space(),.occupied() ); - -   // Actual f36 to f72 which could deadlock if not connected to shortfifos -   reg 		  f72_sof_int, f72_eof_int; -   reg [2:0] 	  f72_occ_int; -   wire [71:0] 	  f72_data_int; -   wire 	  f72_src_rdy_int, f72_dst_rdy_int; -       -   reg [1:0] 	  state; -   reg [31:0] 	  dat0, dat1; - -   wire 	  f36_sof_int  = f36_data_int[32]; -   wire 	  f36_eof_int  = f36_data_int[33]; -   wire [1:0]	  f36_occ_int  = f36_data_int[35:34]; - -   wire 	  xfer_out = f72_src_rdy_int & f72_dst_rdy_int; - -   always @(posedge clk) -     if(f36_src_rdy_int & ((state==0)|xfer_out)) -       f72_sof_int 	<= f36_sof_int; - -   always @(posedge clk) -     if(f36_src_rdy_int & ((state != 2)|xfer_out)) -       f72_eof_int 	<= f36_eof_int; - -   always @(posedge clk) -     if(reset) -       begin -	  state 	<= 0; -	  f72_occ_int   <= 0; -       end -     else -       if(f36_src_rdy_int) -	 case(state) -	   0 :  -	     begin -		dat0 <= f36_data_int; -		if(f36_eof_int) -		  begin -		     state <= 2; -		     case (f36_occ_int) -		       0 : f72_occ_int <= 3'd4; -		       1 : f72_occ_int <= 3'd1; -		       2 : f72_occ_int <= 3'd2; -		       3 : f72_occ_int <= 3'd3; -		     endcase // case (f36_occ_int) -		  end -		else -		  state <= 1; -	     end -	   1 :  -	     begin -		dat1 <= f36_data_int; -		state <= 2; -		if(f36_eof_int) -		  case (f36_occ_int) -		    0 : f72_occ_int <= 3'd0; -		    1 : f72_occ_int <= 3'd5; -		    2 : f72_occ_int <= 3'd6; -		    3 : f72_occ_int <= 3'd7; -		  endcase // case (f36_occ_int) -	     end -	   2 :  -	     if(xfer_out) -	       begin -		  dat0 <= f36_data_int; -		  if(f36_eof_int) // remain in state 2 if we are at eof -		    case (f36_occ_int) -		      0 : f72_occ_int <= 3'd4; -		      1 : f72_occ_int <= 3'd1; -		      2 : f72_occ_int <= 3'd2; -		      3 : f72_occ_int <= 3'd3; -		    endcase // case (f36_occ_int) -		  else -		    state 	   <= 1; -	       end -	 endcase // case(state) -       else -	 if(xfer_out) -	   begin -	      state 	   <= 0; -	      f72_occ_int  <= 0; -	   end -    -   assign    f36_dst_rdy_int  = xfer_out | (state != 2); -   assign    f72_data_int     = LE ? {3'b000,f72_occ_int[2:0],f72_eof_int,f72_sof_int,dat1,dat0} : -				{3'b000,f72_occ_int[2:0],f72_eof_int,f72_sof_int,dat0,dat1}; -   assign    f72_src_rdy_int  = (state == 2); - -   assign    debug = state; - -   // Shortfifo on output to guarantee no deadlock -   fifo_short #(.WIDTH(72)) tail_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(f72_data_int), .src_rdy_i(f72_src_rdy_int), .dst_rdy_o(f72_dst_rdy_int), -      .dataout(f72_dataout), .src_rdy_o(f72_src_rdy_o), .dst_rdy_i(f72_dst_rdy_i), -      .space(),.occupied() ); -    -endmodule // fifo36_to_fifo72 diff --git a/fpga/usrp2/fifo/fifo36_to_ll8.v b/fpga/usrp2/fifo/fifo36_to_ll8.v deleted file mode 100644 index 5c2da812f..000000000 --- a/fpga/usrp2/fifo/fifo36_to_ll8.v +++ /dev/null @@ -1,92 +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/>. -// - - -module fifo36_to_ll8 -  (input clk, input reset, input clear, -   input [35:0] f36_data, -   input f36_src_rdy_i, -   output f36_dst_rdy_o, - -   output [7:0] ll_data, -   output ll_sof, -   output ll_eof, -   output ll_src_rdy, -   input ll_dst_rdy, - -   output [31:0] debug); - -   // Shortfifo on input to guarantee no deadlock -   wire [35:0] 	 f36_data_int; -   wire 	 f36_src_rdy_int, f36_dst_rdy_int; -   reg [7:0] 	 ll_data_int; -   wire 	 ll_sof_int, ll_eof_int, ll_src_rdy_int, ll_dst_rdy_int; -    -   fifo_short #(.WIDTH(36)) head_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(f36_data), .src_rdy_i(f36_src_rdy_i), .dst_rdy_o(f36_dst_rdy_o), -      .dataout(f36_data_int), .src_rdy_o(f36_src_rdy_int), .dst_rdy_i(f36_dst_rdy_int), -      .space(),.occupied() ); - -   // Actual fifo36 to ll8, can deadlock if not connected to shortfifo -   wire [1:0] 	 f36_occ_int = f36_data_int[35:34]; -   wire 	 f36_sof_int = f36_data_int[32]; -   wire 	 f36_eof_int = f36_data_int[33]; -   wire 	 advance, end_early; -   reg [1:0] 	 state; -    -   assign debug    = {29'b0,state}; - -   always @(posedge clk) -     if(reset) -       state 	  <= 0; -     else -       if(advance) -	 if(ll_eof_int) -	   state  <= 0; -	 else -	   state  <= state + 1; - -   always @* -     case(state) -       0 : ll_data_int = f36_data_int[31:24]; -       1 : ll_data_int = f36_data_int[23:16]; -       2 : ll_data_int = f36_data_int[15:8]; -       3 : ll_data_int = f36_data_int[7:0]; -       default : ll_data_int = f36_data_int[31:24]; -       endcase // case (state) -    -   assign ll_sof_int 	 = (state==0) & f36_sof_int; -   assign ll_eof_int 	 = f36_eof_int & (((state==0)&(f36_occ_int==1)) | -					  ((state==1)&(f36_occ_int==2)) | -					  ((state==2)&(f36_occ_int==3)) | -					  (state==3)); -    -   assign ll_src_rdy_int = f36_src_rdy_int; -    -   assign advance 	 = ll_src_rdy_int & ll_dst_rdy_int; -   assign f36_dst_rdy_int= advance & ((state==3)|ll_eof_int); - -   // Short FIFO on output to guarantee no deadlock -   ll8_shortfifo tail_fifo -     (.clk(clk), .reset(reset), .clear(clear), -      .datain(ll_data_int), .sof_i(ll_sof_int), .eof_i(ll_eof_int), -      .error_i(0), .src_rdy_i(ll_src_rdy_int), .dst_rdy_o(ll_dst_rdy_int), -      .dataout(ll_data), .sof_o(ll_sof), .eof_o(ll_eof), -      .error_o(), .src_rdy_o(ll_src_rdy), .dst_rdy_i(ll_dst_rdy)); - -endmodule // fifo36_to_ll8 diff --git a/fpga/usrp2/fifo/fifo72_to_fifo36.v b/fpga/usrp2/fifo/fifo72_to_fifo36.v deleted file mode 100644 index c365f0196..000000000 --- a/fpga/usrp2/fifo/fifo72_to_fifo36.v +++ /dev/null @@ -1,80 +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/>. -// - - -// Parameter LE tells us if we are little-endian.   -// Little-endian means send lower 16 bits first. -// Default is big endian (network order), send upper bits first. - -module fifo72_to_fifo36 -  #(parameter LE=0) -   (input clk, input reset, input clear, -    input [71:0] f72_datain, -    input f72_src_rdy_i, -    output f72_dst_rdy_o, -     -    output [35:0] f36_dataout, -    output f36_src_rdy_o, -    input f36_dst_rdy_i ); -       -   wire [35:0] f36_data_int; -   wire        f36_src_rdy_int, f36_dst_rdy_int; -   wire [71:0] f72_data_int; -   wire        f72_src_rdy_int, f72_dst_rdy_int; -    -   // Shortfifo on input to guarantee no deadlock -   fifo_short #(.WIDTH(72)) head_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(f72_datain), .src_rdy_i(f72_src_rdy_i), .dst_rdy_o(f72_dst_rdy_o), -      .dataout(f72_data_int), .src_rdy_o(f72_src_rdy_int), .dst_rdy_i(f72_dst_rdy_int), -      .space(),.occupied() ); - -   // Main fifo72_to_fifo36, needs shortfifos to guarantee no deadlock -   wire [2:0]  f72_occ_int  = f72_data_int[68:66]; -   wire        f72_sof_int  = f72_data_int[64]; -   wire        f72_eof_int  = f72_data_int[65]; -    -   reg 	  phase; -   wire   half_line 	   = f72_eof_int & ( (f72_occ_int==1)|(f72_occ_int==2)|(f72_occ_int==3)|(f72_occ_int==4) ); -       -   assign f36_data_int[31:0]   = (LE ^ phase) ? f72_data_int[31:0] : f72_data_int[63:32]; -   assign f36_data_int[32]     = phase ? 0 : f72_sof_int; -   assign f36_data_int[33]     = phase ? f72_eof_int : half_line; -   assign f36_data_int[35:34]  = f36_data_int[33] ? f72_occ_int[1:0] : 2'b00; -       -   assign f36_src_rdy_int    = f72_src_rdy_int; -   assign f72_dst_rdy_int    = (phase | half_line) & f36_dst_rdy_int; -    -   wire   f36_xfer 	   = f36_src_rdy_int & f36_dst_rdy_int; -   wire   f72_xfer 	   = f72_src_rdy_int & f72_dst_rdy_int; -    -   always @(posedge clk) -     if(reset) -       phase 		  <= 0; -     else if(f72_xfer) -       phase 		  <= 0; -     else if(f36_xfer) -       phase 		  <= 1; -    -   // Shortfifo on output to guarantee no deadlock -   fifo_short #(.WIDTH(36)) tail_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(f36_data_int), .src_rdy_i(f36_src_rdy_int), .dst_rdy_o(f36_dst_rdy_int), -      .dataout(f36_dataout), .src_rdy_o(f36_src_rdy_o), .dst_rdy_i(f36_dst_rdy_i), -      .space(),.occupied() ); - -endmodule // fifo72_to_fifo36 diff --git a/fpga/usrp2/fifo/fifo_19to36_tb.v b/fpga/usrp2/fifo/fifo_19to36_tb.v deleted file mode 100644 index 143b92b1b..000000000 --- a/fpga/usrp2/fifo/fifo_19to36_tb.v +++ /dev/null @@ -1,99 +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/>. -// - -module fifo_tb(); -    -   reg clk = 0; -   reg rst = 1; -   reg clear = 0; -   initial #1000 rst = 0; -   always #50 clk = ~clk; - -   reg [18:0] f19a; -   wire [18:0] f19b, f19c, f19d; -   wire [35:0] f36a, f36b; - -   reg 	       f19a_sr = 0; -   wire        f19b_sr, f19c_sr, f19d_sr, f36a_sr, f36b_sr; -   wire        f19a_dr, f19b_dr, f19c_dr, f19d_dr, f36a_dr, f36b_dr; -    -   fifo_short #(.WIDTH(19)) fifo_short1 -     (.clk(clk),.reset(rst),.clear(clear), -      .datain(f19a),.src_rdy_i(f19a_sr),.dst_rdy_o(f19a_dr), -      .dataout(f19b),.src_rdy_o(f19b_sr),.dst_rdy_i(f19b_dr) ); - -   fifo19_to_fifo36 fifo19_to_fifo36 -     (.clk(clk),.reset(rst),.clear(clear), -      .f19_datain(f19b),.f19_src_rdy_i(f19b_sr),.f19_dst_rdy_o(f19b_dr), -      .f36_dataout(f36a),.f36_src_rdy_o(f36a_sr),.f36_dst_rdy_i(f36a_dr) ); - -   fifo_short #(.WIDTH(36)) fifo_short2 -     (.clk(clk),.reset(rst),.clear(clear), -      .datain(f36a),.src_rdy_i(f36a_sr),.dst_rdy_o(f36a_dr), -      .dataout(f36b),.src_rdy_o(f36b_sr),.dst_rdy_i(f36b_dr) ); - -   fifo36_to_fifo19 fifo36_to_fifo19 -     (.clk(clk),.reset(rst),.clear(clear), -      .f36_datain(f36b),.f36_src_rdy_i(f36b_sr),.f36_dst_rdy_o(f36b_dr), -      .f19_dataout(f19c),.f19_src_rdy_o(f19c_sr),.f19_dst_rdy_i(f19c_dr) ); - -   fifo_short #(.WIDTH(19)) fifo_short3 -     (.clk(clk),.reset(rst),.clear(clear), -      .datain(f19c),.src_rdy_i(f19c_sr),.dst_rdy_o(f19c_dr), -      .dataout(f19d),.src_rdy_o(f19d_sr),.dst_rdy_i(f19d_dr) ); - -   assign f19d_dr = 1; - -    always @(posedge clk) -     if(f19a_sr & f19a_dr) -       $display("18IN: %h", f19a); -   -    always @(posedge clk) -     if(f19d_sr & f19d_dr) -       $display("                            18OUT: %h", f19d); -   -   always @(posedge clk) -     if(f36b_sr & f36b_dr) -       $display("             36: %h", f36b); -    -   initial $dumpfile("fifo_tb.vcd"); -   initial $dumpvars(0,fifo_tb); - -   initial -     begin -	@(negedge rst); -	@(posedge clk); -	repeat (2) -	  begin -	     f19a <= 19'h1_AA01; -	     f19a_sr <= 1; -	     @(posedge clk); -	     f19a <= 19'h0_AA02; -	     repeat (4) -	       begin -		  @(posedge clk); -		  f19a <= f19a + 1; -	       end -	     f19a[18:16] <= 3'b010; -	     @(posedge clk); -	     f19a_sr <= 0; -	     f19a <= 19'h7_FFFF; -	     @(posedge clk); -	  end -	#20000 $finish; -     end -endmodule // longfifo_tb diff --git a/fpga/usrp2/fifo/fifo_2clock.v b/fpga/usrp2/fifo/fifo_2clock.v deleted file mode 100644 index 98aab18a5..000000000 --- a/fpga/usrp2/fifo/fifo_2clock.v +++ /dev/null @@ -1,141 +0,0 @@ -// -// Copyright 2011-2012 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/>. -// - - -// FIXME ignores the AWIDTH (fifo size) parameter - -module fifo_2clock -  #(parameter WIDTH=36, SIZE=6) -   (input wclk, input [WIDTH-1:0] datain, input src_rdy_i, output dst_rdy_o, output [15:0] space, -    input rclk, output [WIDTH-1:0] dataout, output src_rdy_o, input dst_rdy_i, output [15:0] occupied, -    input arst); -    -   wire [SIZE:0] level_rclk, level_wclk; // xilinx adds an extra bit if you ask for accurate levels -   wire 	 full, empty, write, read; - -   assign dst_rdy_o  = ~full; -   assign src_rdy_o  = ~empty; -   assign write      = src_rdy_i & dst_rdy_o; -   assign read 	     = src_rdy_o & dst_rdy_i; - -   generate -      if((WIDTH <= 36) && (WIDTH > 19)) begin -	wire [35:0] data_in_wide, data_out_wide; -	assign data_in_wide[WIDTH-1:0] = datain; -	assign dataout = data_out_wide[WIDTH-1:0]; -	if(SIZE==9) -	  fifo_xlnx_512x36_2clk fifo_xlnx_512x36_2clk -	       (.rst(arst), -		.wr_clk(wclk),.din(data_in_wide),.full(full),.wr_en(write),.wr_data_count(level_wclk), -		.rd_clk(rclk),.dout(data_out_wide),.empty(empty),.rd_en(read),.rd_data_count(level_rclk) ); -	else if(SIZE==11) -	  fifo_xlnx_2Kx36_2clk fifo_xlnx_2Kx36_2clk  -		     (.rst(arst), -		      .wr_clk(wclk),.din(data_in_wide),.full(full),.wr_en(write),.wr_data_count(level_wclk), -		      .rd_clk(rclk),.dout(data_out_wide),.empty(empty),.rd_en(read),.rd_data_count(level_rclk) ); -	else if(SIZE==6) -	  fifo_xlnx_64x36_2clk fifo_xlnx_64x36_2clk  -		     (.rst(arst), -		      .wr_clk(wclk),.din(data_in_wide),.full(full),.wr_en(write),.wr_data_count(level_wclk), -		      .rd_clk(rclk),.dout(data_out_wide),.empty(empty),.rd_en(read),.rd_data_count(level_rclk) ); -	else -	  fifo_xlnx_512x36_2clk fifo_xlnx_512x36_2clk -	       (.rst(arst), -		.wr_clk(wclk),.din(data_in_wide),.full(full),.wr_en(write),.wr_data_count(level_wclk), -		.rd_clk(rclk),.dout(data_out_wide),.empty(empty),.rd_en(read),.rd_data_count(level_rclk) ); -      end -      else if((WIDTH <= 19) && (SIZE <= 4)) begin -	wire [18:0] data_in_wide, data_out_wide; -	assign data_in_wide[WIDTH-1:0] = datain; -	assign dataout = data_out_wide[WIDTH-1:0]; -	fifo_xlnx_16x19_2clk fifo_xlnx_16x19_2clk -	  (.rst(arst), -	   .wr_clk(wclk),.din(data_in_wide),.full(full),.wr_en(write),.wr_data_count(level_wclk), -	   .rd_clk(rclk),.dout(data_out_wide),.empty(empty),.rd_en(read),.rd_data_count(level_rclk) ); -      end -   endgenerate - -   assign occupied  = {{(16-SIZE-1){1'b0}},level_rclk}; -   assign space     = ((1<<SIZE)+1)-level_wclk; -    -endmodule // fifo_2clock - -/* -`else -   // ISE sucks, so the following doesn't work properly - -   reg [AWIDTH-1:0] wr_addr, rd_addr; -   wire [AWIDTH-1:0] wr_addr_rclk, rd_addr_wclk; -   wire [AWIDTH-1:0] next_rd_addr; -   wire 	    enb_read; -    -   // Write side management -   wire [AWIDTH-1:0] next_wr_addr = wr_addr + 1; -   always @(posedge wclk or posedge arst) -     if(arst) -       wr_addr <= 0; -     else if(write) -       wr_addr <= next_wr_addr; -   assign 	    full = (next_wr_addr == rd_addr_wclk); - -   //  RAM for data storage.  Data out is registered, complicating the -   //     read side logic -   ram_2port #(.DWIDTH(DWIDTH),.AWIDTH(AWIDTH)) mac_rx_ff_ram -     (.clka(wclk),.ena(1'b1),.wea(write),.addra(wr_addr),.dia(datain),.doa(), -      .clkb(rclk),.enb(enb_read),.web(1'b0),.addrb(next_rd_addr),.dib(0),.dob(dataout) ); - -   // Read side management -   reg 		    data_valid; -   assign 	    empty = ~data_valid; -   assign 	    next_rd_addr = rd_addr + data_valid; -   assign 	    enb_read = read | ~data_valid; - -   always @(posedge rclk or posedge arst) -     if(arst) -       rd_addr <= 0; -     else if(read) -       rd_addr <= rd_addr + 1; - -   always @(posedge rclk or posedge arst) -     if(arst) -       data_valid <= 0; -     else -       if(read & (next_rd_addr == wr_addr_rclk)) -	 data_valid <= 0; -       else if(next_rd_addr != wr_addr_rclk) -	 data_valid <= 1; -	  -   // Send pointers across clock domains via gray code -   gray_send #(.WIDTH(AWIDTH)) send_wr_addr -     (.clk_in(wclk),.addr_in(wr_addr), -      .clk_out(rclk),.addr_out(wr_addr_rclk) ); -    -   gray_send #(.WIDTH(AWIDTH)) send_rd_addr -     (.clk_in(rclk),.addr_in(rd_addr), -      .clk_out(wclk),.addr_out(rd_addr_wclk) ); - -   // Generate fullness info, these are approximate and may be delayed  -   // and are only for higher-level flow control.   -   // Only full and empty are guaranteed exact. -   always @(posedge wclk)  -     level_wclk <= wr_addr - rd_addr_wclk; -   always @(posedge rclk)  -     level_rclk <= wr_addr_rclk - rd_addr; -`endif -endmodule // fifo_2clock - -*/ diff --git a/fpga/usrp2/fifo/fifo_2clock_cascade.v b/fpga/usrp2/fifo/fifo_2clock_cascade.v deleted file mode 100644 index 49cac7097..000000000 --- a/fpga/usrp2/fifo/fifo_2clock_cascade.v +++ /dev/null @@ -1,58 +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/>. -// - - -module fifo_2clock_cascade -  #(parameter WIDTH=32, SIZE=9) -   (input wclk, input [WIDTH-1:0] datain, input src_rdy_i, output dst_rdy_o,  -    output [15:0] space, output [15:0] short_space, -    input rclk, output [WIDTH-1:0] dataout, output src_rdy_o, input dst_rdy_i,  -    output [15:0] occupied, output [15:0] short_occupied, -    input arst); -    -   wire [WIDTH-1:0] data_int1, data_int2; -   wire 	    src_rdy_int1, src_rdy_int2, dst_rdy_int1, dst_rdy_int2; -   wire [SIZE-1:0]  level_wclk, level_rclk; -   wire [4:0] 	    s1_space, s1_occupied, s2_space, s2_occupied; -   wire [15:0] 	    l_space, l_occupied; -    -   fifo_short #(.WIDTH(WIDTH)) shortfifo -     (.clk(wclk), .reset(arst), .clear(0), -      .datain(datain), .src_rdy_i(src_rdy_i), .dst_rdy_o(dst_rdy_o), -      .dataout(data_int1), .src_rdy_o(src_rdy_int1), .dst_rdy_i(dst_rdy_int1), -      .space(s1_space), .occupied(s1_occupied) ); -    -   fifo_2clock #(.WIDTH(WIDTH),.SIZE(SIZE)) fifo_2clock -     (.wclk(wclk), .datain(data_int1), .src_rdy_i(src_rdy_int1), .dst_rdy_o(dst_rdy_int1), .space(l_space), -      .rclk(rclk), .dataout(data_int2), .src_rdy_o(src_rdy_int2), .dst_rdy_i(dst_rdy_int2), .occupied(l_occupied), -      .arst(arst) ); -    -   fifo_short #(.WIDTH(WIDTH)) shortfifo2 -     (.clk(rclk), .reset(arst), .clear(0), -      .datain(data_int2), .src_rdy_i(src_rdy_int2), .dst_rdy_o(dst_rdy_int2), -      .dataout(dataout), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i), -      .space(s2_space), .occupied(s2_occupied)); - -   // Be conservative -- Only advertise space from input side of fifo, occupied from output side -   assign 	    space 	    = {11'b0,s1_space} + l_space; -   assign 	    occupied 	    = {11'b0,s2_occupied} + l_occupied; - -   // For the fifo_extram, we only want to know the immediately adjacent space -   assign 	    short_space     = {11'b0,s1_space}; -   assign 	    short_occupied  = {11'b0,s2_occupied}; -    -endmodule // fifo_2clock_cascade diff --git a/fpga/usrp2/fifo/fifo_cascade.v b/fpga/usrp2/fifo/fifo_cascade.v deleted file mode 100644 index 5a79c4090..000000000 --- a/fpga/usrp2/fifo/fifo_cascade.v +++ /dev/null @@ -1,69 +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/>. -// - - - -// This FIFO exists to provide an intermediate point for the data on its -// long trek from one RAM (in the buffer pool) to another (in the longfifo) -// The shortfifo is more flexible in its placement since it is based on -// distributed RAM - -// This one has the shortfifo on both the in and out sides. -module fifo_cascade -  #(parameter WIDTH=32, SIZE=9) -    (input clk, input reset, input clear, -     input [WIDTH-1:0] datain, -     input src_rdy_i, -     output dst_rdy_o, -     output [WIDTH-1:0] dataout, -     output src_rdy_o, -     input dst_rdy_i, -     output [15:0] space, -     output [15:0] occupied); - -   wire [WIDTH-1:0] data_int, data_int2; -   wire src_rdy_1, dst_rdy_1, src_rdy_2, dst_rdy_2; -    -   wire [4:0] 	    s1_space, s1_occupied, s2_space, s2_occupied; -   wire [15:0] 	    l_space, l_occupied; -    -   fifo_short #(.WIDTH(WIDTH)) head_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(datain), .src_rdy_i(src_rdy_i), .dst_rdy_o(dst_rdy_o), -      .dataout(data_int), .src_rdy_o(src_rdy_1), .dst_rdy_i(dst_rdy_1), -      .space(s1_space),.occupied(s1_occupied) ); -       -   fifo_long #(.WIDTH(WIDTH),.SIZE(SIZE)) middle_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(data_int), .src_rdy_i(src_rdy_1), .dst_rdy_o(dst_rdy_1), -      .dataout(data_int2), .src_rdy_o(src_rdy_2), .dst_rdy_i(dst_rdy_2), -      .space(l_space),.occupied(l_occupied) ); -    -   fifo_short #(.WIDTH(WIDTH)) tail_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(data_int2), .src_rdy_i(src_rdy_2), .dst_rdy_o(dst_rdy_2), -      .dataout(dataout), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i), -      .space(s2_space),.occupied(s2_occupied) ); -    -   assign 	    space = {11'b0,s1_space} + {11'b0,s2_space} + l_space; -   assign 	    occupied = {11'b0,s1_occupied} + {11'b0,s2_occupied} + l_occupied; -       -endmodule // cascadefifo2 - - - - diff --git a/fpga/usrp2/fifo/fifo_long.v b/fpga/usrp2/fifo/fifo_long.v deleted file mode 100644 index c4f0a1cc2..000000000 --- a/fpga/usrp2/fifo/fifo_long.v +++ /dev/null @@ -1,165 +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/>. -// - - -// FIFO intended to be interchangeable with shortfifo, but -//  based on block ram instead of SRL16's -//  only one clock domain - -// Port A is write port, Port B is read port - -module fifo_long -  #(parameter WIDTH=32, SIZE=9) -   (input clk, input reset, input clear, -    input [WIDTH-1:0] datain, -    input src_rdy_i, -    output dst_rdy_o, -    output [WIDTH-1:0] dataout, -    output src_rdy_o, -    input dst_rdy_i, -     -    output reg [15:0] space, -    output reg [15:0] occupied); -    -   wire write 	     = src_rdy_i & dst_rdy_o; -   wire read 	     = dst_rdy_i & src_rdy_o; -   wire full, empty; -    -   assign dst_rdy_o  = ~full; -   assign src_rdy_o  = ~empty; -    -   // Read side states -   localparam 	  EMPTY = 0; -   localparam 	  PRE_READ = 1; -   localparam 	  READING = 2; - -   reg [SIZE-1:0] wr_addr, rd_addr; -   reg [1:0] 	  read_state; - -   reg 	  empty_reg, full_reg; -   always @(posedge clk) -     if(reset) -       wr_addr <= 0; -     else if(clear) -       wr_addr <= 0; -     else if(write) -       wr_addr <= wr_addr + 1; - -   ram_2port #(.DWIDTH(WIDTH),.AWIDTH(SIZE)) -     ram (.clka(clk), -	  .ena(1'b1), -	  .wea(write), -	  .addra(wr_addr), -	  .dia(datain), -	  .doa(), - -	  .clkb(clk), -	  .enb((read_state==PRE_READ)|read), -	  .web(0), -	  .addrb(rd_addr), -	  .dib({WIDTH{1'b1}}), -	  .dob(dataout)); - -   always @(posedge clk) -     if(reset) -       begin -	  read_state <= EMPTY; -	  rd_addr <= 0; -	  empty_reg <= 1; -       end -     else -       if(clear) -	 begin -	    read_state <= EMPTY; -	    rd_addr <= 0; -	    empty_reg <= 1; -	 end -       else  -	 case(read_state) -	   EMPTY : -	     if(write) -	       begin -		  //rd_addr <= wr_addr; -		  read_state <= PRE_READ; -	       end -	   PRE_READ : -	     begin -		read_state <= READING; -		empty_reg <= 0; -		rd_addr <= rd_addr + 1; -	     end -	    -	   READING : -	     if(read) -	       if(rd_addr == wr_addr) -		 begin -		    empty_reg <= 1; -		    if(write) -		      read_state <= PRE_READ; -		    else -		      read_state <= EMPTY; -		 end -	       else -		 rd_addr <= rd_addr + 1; -	 endcase // case(read_state) - -   wire [SIZE-1:0] dont_write_past_me = rd_addr - 3; -   wire 	   becoming_full = wr_addr == dont_write_past_me; -      -   always @(posedge clk) -     if(reset) -       full_reg <= 0; -     else if(clear) -       full_reg <= 0; -     else if(read & ~write) -       full_reg <= 0; -     //else if(write & ~read & (wr_addr == (rd_addr-3))) -     else if(write & ~read & becoming_full) -       full_reg <= 1; - -   //assign empty = (read_state != READING); -   assign empty = empty_reg; - -   // assign full = ((rd_addr - 1) == wr_addr); -   assign full = full_reg; - -   ////////////////////////////////////////////// -   // space and occupied are for diagnostics only -   // not guaranteed exact - -   localparam NUMLINES = (1<<SIZE)-2; -   always @(posedge clk) -     if(reset) -       space <= NUMLINES; -     else if(clear) -       space <= NUMLINES; -     else if(read & ~write) -       space <= space + 1; -     else if(write & ~read) -       space <= space - 1; -    -   always @(posedge clk) -     if(reset) -       occupied <= 0; -     else if(clear) -       occupied <= 0; -     else if(read & ~write) -       occupied <= occupied - 1; -     else if(write & ~read) -       occupied <= occupied + 1; -    -endmodule // fifo_long diff --git a/fpga/usrp2/fifo/fifo_pacer.v b/fpga/usrp2/fifo/fifo_pacer.v deleted file mode 100644 index 3e3fbf8b8..000000000 --- a/fpga/usrp2/fifo/fifo_pacer.v +++ /dev/null @@ -1,41 +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/>. -// - - - -module fifo_pacer -  (input clk, -   input reset, -   input [7:0] rate, -   input enable, -   input src1_rdy_i, output dst1_rdy_o, -   output src2_rdy_o, input dst2_rdy_i, -   output underrun, overrun); - -   wire   strobe; -    -   cic_strober strober (.clock(clk), .reset(reset), .enable(enable), -			.rate(rate), .strobe_fast(1), .strobe_slow(strobe)); - -   wire   all_ready = src1_rdy_i & dst2_rdy_i; -   assign dst1_rdy_o = all_ready & strobe; -   assign src2_rdy_o = dst1_rdy_o; - -   assign underrun = strobe & ~src1_rdy_i; -   assign overrun = strobe & ~dst2_rdy_i; -    -endmodule // fifo_pacer diff --git a/fpga/usrp2/fifo/fifo_short.v b/fpga/usrp2/fifo/fifo_short.v deleted file mode 100644 index 32f26beef..000000000 --- a/fpga/usrp2/fifo/fifo_short.v +++ /dev/null @@ -1,112 +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/>. -// - - -module fifo_short -  #(parameter WIDTH=32) -   (input clk, input reset, input clear, -    input [WIDTH-1:0] datain, -    input src_rdy_i, -    output dst_rdy_o, -    output [WIDTH-1:0] dataout, -    output src_rdy_o, -    input dst_rdy_i, -     -    output reg [4:0] space, -    output reg [4:0] occupied); - -   reg full, empty; -   wire write 	     = src_rdy_i & dst_rdy_o; -   wire read 	     = dst_rdy_i & src_rdy_o; - -   assign dst_rdy_o  = ~full; -   assign src_rdy_o  = ~empty; -    -   reg [3:0] 	  a; -   genvar 	  i; -    -   generate -      for (i=0;i<WIDTH;i=i+1) -	begin : gen_srl16 -	   SRL16E -	     srl16e(.Q(dataout[i]), -		    .A0(a[0]),.A1(a[1]),.A2(a[2]),.A3(a[3]), -		    .CE(write),.CLK(clk),.D(datain[i])); -	end -   endgenerate -    -   always @(posedge clk) -     if(reset) -       begin -	  a <= 0; -	  empty <= 1; -	  full <= 0; -       end -     else if(clear) -       begin -	  a <= 0; -	  empty <= 1; -	  full<= 0; -       end -     else if(read & ~write) -       begin -	  full <= 0; -	  if(a==0) -	    empty <= 1; -	  else -	    a <= a - 1; -       end -     else if(write & ~read) -       begin -	  empty <= 0; -	  if(~empty) -	    a <= a + 1; -	  if(a == 14) -	    full <= 1; -       end - -   // NOTE will fail if you write into a full fifo or read from an empty one - -   ////////////////////////////////////////////////////////////// -   // space and occupied are used for diagnostics, not  -   // guaranteed correct -    -   //assign space = full ? 0 : empty ? 16 : 15-a; -   //assign occupied = empty ? 0 : full ? 16 : a+1; - -   always @(posedge clk) -     if(reset) -       space <= 16; -     else if(clear) -       space <= 16; -     else if(read & ~write) -       space <= space + 1; -     else if(write & ~read) -       space <= space - 1; -    -   always @(posedge clk) -     if(reset) -       occupied <= 0; -     else if(clear) -       occupied <= 0; -     else if(read & ~write) -       occupied <= occupied - 1; -     else if(write & ~read) -       occupied <= occupied + 1; -       -endmodule // fifo_short - diff --git a/fpga/usrp2/fifo/fifo_spec.txt b/fpga/usrp2/fifo/fifo_spec.txt deleted file mode 100644 index 133b9fa8e..000000000 --- a/fpga/usrp2/fifo/fifo_spec.txt +++ /dev/null @@ -1,36 +0,0 @@ - - -FIFO and Buffer Interface Spec - -Buffer Interface Data Wires -- matches fifo36 -     DATA[31:0] -     FLAGS[3:0] -     Bit 0	SOP -     Bit 1	EOP -	If SOP=1 && EOP=1, OCC contains error flags -     Bits 3:2	OCC[1:0] --> 00 = all 4 bytes -		     01 = 1 byte -		     10 = 2 bytes -		     11 = 3 bytes - -fifo36 -->  {OCC[1:0],EOP,SOP,DATA[31:0]} -       OCC same as buffer interface - -fifo19 -->  {OCC,EOP,SOP,DATA[15:0]}     -       Doesn't fit well into BRAM, dist RAM ok -       OCC = 1 means last word is half full -	   = 0 means last word is full - -fifo18 -->  {EOP,SOP,DATA[15:0]} -       No half-word capability?  Should we drop sop instead? - -Control Wires - Data into FIFO -	SRC_RDY_i    Upstream has data for me -	DST_RDY_o    I have space -		     Transfer occurs if SRC_RDI_i && DST_RDY_o -	 -Control Wires - Data out of FIFO -	SRC_RDY_o    I have data for downstream -	DST_RDY_i    Downstream has space -		     Transfer occurs if SRC_RDI_o && DST_RDY_i -	 diff --git a/fpga/usrp2/fifo/fifo_tb.v b/fpga/usrp2/fifo/fifo_tb.v deleted file mode 100644 index c63c201d0..000000000 --- a/fpga/usrp2/fifo/fifo_tb.v +++ /dev/null @@ -1,72 +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/>. -// - -module fifo_tb(); -    -   reg clk = 0; -   reg rst = 1; -   reg clear = 0; -   initial #1000 rst = 0; -   always #50 clk = ~clk; -    -   reg [31:0] f36_data = 0; -   reg [1:0] f36_occ = 0; -   reg f36_sof = 0, f36_eof = 0; -   reg f36_src_rdy; -   wire f36_dst_rdy; -    -   wire [7:0] ll_data; -   wire ll_src_rdy, ll_dst_rdy, ll_sof, ll_eof; -   wire [35:0] err_dat; -   wire        err_src_rdy, err_dst_rdy; - -   fifo36_to_ll8 fifo36_to_ll8 -     (.clk(clk),.reset(rst),.clear(clear), -      .f36_data({f36_occ,f36_eof,f36_sof,f36_data}),.f36_src_rdy_i(f36_src_rdy),.f36_dst_rdy_o(f36_dst_rdy), -      .ll_data(ll_data),.ll_sof(ll_sof),.ll_eof(ll_eof), -      .ll_src_rdy(ll_src_rdy),.ll_dst_rdy(ll_dst_rdy)); - -   assign ll_dst_rdy = 1; -    -   always @(posedge clk) -     if(ll_src_rdy) -       $display("LL: SOF %d, EOF %d, DAT %x",ll_sof,ll_eof,ll_data); -    -   initial $dumpfile("fifo_tb.vcd"); -   initial $dumpvars(0,fifo_tb); - -   initial -     begin -	@(negedge rst); -	@(posedge clk); -	@(posedge clk); -	@(posedge clk); -	@(posedge clk); -	f36_src_rdy <= 1; -	{f36_occ,f36_eof,f36_sof,f36_data} <= { 2'b00,1'b0,1'b1,32'h00010203}; -	@(posedge clk); -	{f36_occ,f36_eof,f36_sof,f36_data} <= { 2'b00,1'b0,1'b0,32'h04050607}; -	@(posedge clk); -	{f36_occ,f36_eof,f36_sof,f36_data} <= { 2'b00,1'b0,1'b0,32'h08090a0b}; -	@(posedge clk); -	{f36_occ,f36_eof,f36_sof,f36_data} <= { 2'b11,1'b1,1'b0,32'h0c0d0e0f}; -	@(posedge clk); -	f36_src_rdy <= 0; -     end -    -   initial #4000 $finish; -endmodule // longfifo_tb diff --git a/fpga/usrp2/fifo/ll8_shortfifo.v b/fpga/usrp2/fifo/ll8_shortfifo.v deleted file mode 100644 index 49b3a3139..000000000 --- a/fpga/usrp2/fifo/ll8_shortfifo.v +++ /dev/null @@ -1,30 +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/>. -// - - - -module ll8_shortfifo -  (input clk, input reset, input clear, -   input [7:0] datain, input sof_i, input eof_i, input error_i, input src_rdy_i, output dst_rdy_o, -   output [7:0] dataout, output sof_o, output eof_o, output error_o, output src_rdy_o, input dst_rdy_i); - -   fifo_short #(.WIDTH(11)) fifo_short -     (.clk(clk), .reset(reset), .clear(clear), -      .datain({error_i,eof_i,sof_i,datain}), .src_rdy_i(src_rdy_i), .dst_rdy_o(dst_rdy_o), -      .dataout({error_o,eof_o,sof_o,dataout}), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i)); - -endmodule // ll8_shortfifo diff --git a/fpga/usrp2/fifo/ll8_to_fifo19.v b/fpga/usrp2/fifo/ll8_to_fifo19.v deleted file mode 100644 index 4503d0c3d..000000000 --- a/fpga/usrp2/fifo/ll8_to_fifo19.v +++ /dev/null @@ -1,104 +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/>. -// - - -module ll8_to_fifo19 -  (input clk, input reset, input clear, -   input [7:0] ll_data, -   input ll_sof, -   input ll_eof, -   input ll_src_rdy, -   output ll_dst_rdy, - -   output [18:0] f19_data, -   output f19_src_rdy_o, -   input f19_dst_rdy_i ); - -   // Short FIFO on input to guarantee no deadlock -   wire [7:0] ll_data_int; -   wire       ll_sof_int, ll_eof_int, ll_src_rdy_int, ll_dst_rdy_int; -    -   ll8_shortfifo head_fifo -     (.clk(clk), .reset(reset), .clear(clear), -      .datain(ll_data), .sof_i(ll_sof), .eof_i(ll_eof), -      .error_i(0), .src_rdy_i(ll_src_rdy), .dst_rdy_o(ll_dst_rdy), -      .dataout(ll_data_int), .sof_o(ll_sof_int), .eof_o(ll_eof_int), -      .error_o(), .src_rdy_o(ll_src_rdy_int), .dst_rdy_i(ll_dst_rdy_int)); - -   // Actual ll8_to_fifo19 which could deadlock if not connected to a shortfifo -   localparam XFER_EMPTY       = 0; -   localparam XFER_HALF        = 1; -   localparam XFER_HALF_WRITE  = 3; -    -   wire [18:0] f19_data_int; -   wire        f19_sof_int, f19_eof_int, f19_occ_int, f19_src_rdy_int, f19_dst_rdy_int; - -   wire        xfer_out    = f19_src_rdy_int & f19_dst_rdy_int; -   wire        xfer_in 	   = ll_src_rdy_int & ll_dst_rdy_int;  -   reg 	       hold_sof; -    -   reg [1:0]   state; -   reg [7:0]   hold_reg; -    -   always @(posedge clk) -     if(ll_src_rdy_int & (state==XFER_EMPTY)) -       hold_reg 	      <= ll_data_int; -    -   always @(posedge clk) -     if(ll_sof_int & (state==XFER_EMPTY)) -       hold_sof 	      <= 1; -     else if(xfer_out) -       hold_sof 	      <= 0; -    -   always @(posedge clk) -     if(reset | clear) -       state 		      <= XFER_EMPTY; -     else -       case(state) -	 XFER_EMPTY : -	   if(ll_src_rdy_int) -	     if(ll_eof_int) -	       state 	      <= XFER_HALF_WRITE; -	     else -	       state 	      <= XFER_HALF; -	 XFER_HALF : -	   if(ll_src_rdy_int & f19_dst_rdy_int) -	       state 	      <= XFER_EMPTY; -         XFER_HALF_WRITE : -	   if(f19_dst_rdy_int) -	     state 	<= XFER_EMPTY; -       endcase // case (state) -       -   assign ll_dst_rdy_int = (state==XFER_EMPTY) | ((state==XFER_HALF)&f19_dst_rdy_int); -   assign f19_src_rdy_int= (state==XFER_HALF_WRITE) | ((state==XFER_HALF)&ll_src_rdy_int); -    -   assign f19_sof_int 	 = hold_sof | (ll_sof_int & (state==XFER_HALF)); -   assign f19_eof_int 	 = (state == XFER_HALF_WRITE) | ll_eof_int; -   assign f19_occ_int 	 = (state == XFER_HALF_WRITE); -    -   assign f19_data_int 	 = {f19_occ_int,f19_eof_int,f19_sof_int,hold_reg,ll_data_int}; - -   // Shortfifo on output to guarantee no deadlock -   fifo_short #(.WIDTH(19)) tail_fifo -     (.clk(clk),.reset(reset),.clear(clear), -      .datain(f19_data_int), .src_rdy_i(f19_src_rdy_int), .dst_rdy_o(f19_dst_rdy_int), -      .dataout(f19_data), .src_rdy_o(f19_src_rdy_o), .dst_rdy_i(f19_dst_rdy_i), -      .space(),.occupied() ); -       -    -endmodule // ll8_to_fifo19 - diff --git a/fpga/usrp2/fifo/ll8_to_fifo36.v b/fpga/usrp2/fifo/ll8_to_fifo36.v deleted file mode 100644 index b26f745d2..000000000 --- a/fpga/usrp2/fifo/ll8_to_fifo36.v +++ /dev/null @@ -1,114 +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/>. -// - - -module ll8_to_fifo36 -  (input clk, input reset, input clear, -   input [7:0] ll_data, -   input ll_sof_n, -   input ll_eof_n, -   input ll_src_rdy_n, -   output ll_dst_rdy_n, - -   output [35:0] f36_data, -   output f36_src_rdy_o, -   input f36_dst_rdy_i ); - -   wire f36_write    = f36_src_rdy_o & f36_dst_rdy_i; -       -   // Why anybody would use active low in an FPGA is beyond me... -   wire  ll_sof      = ~ll_sof_n; -   wire  ll_eof      = ~ll_eof_n; -   wire  ll_src_rdy  = ~ll_src_rdy_n; -   wire  ll_dst_rdy; -   assign    ll_dst_rdy_n = ~ll_dst_rdy; - -   reg 	 f36_sof, f36_eof; -   reg [1:0] f36_occ; -    -    -   reg [2:0] state; -   reg [7:0] dat0, dat1, dat2, dat3; - -   always @(posedge clk) -     if(ll_src_rdy & ((state==0)|f36_write)) -       f36_sof <= ll_sof; - -   always @(posedge clk) -     if(ll_src_rdy & ((state !=4)|f36_write)) -       f36_eof <= ll_eof; - -   always @(posedge clk) -     if(ll_eof) -       f36_occ <= state[1:0] + 1; -     else -       f36_occ <= 0; -    -   always @(posedge clk) -     if(reset) -       state   <= 0; -     else -       if(ll_src_rdy) -	 case(state) -	   0 :  -	     if(ll_eof) -	       state <= 4; -	     else -	       state <= 1; -	   1 :  -	     if(ll_eof) -	       state <= 4; -	     else -	       state <= 2; -	   2 :  -	     if(ll_eof) -	       state <= 4; -	     else  -	       state <= 3; -	   3 : state <= 4; -	   4 :  -	     if(f36_dst_rdy_i) -	       if(ll_eof) -		 state 	   <= 4; -	       else -		 state 	   <= 1; -	 endcase // case(state) -       else -	 if(f36_write) -	   state 	   <= 0; - -   always @(posedge clk) -     if(ll_src_rdy & (state==3)) -       dat3 		   <= ll_data; - -   always @(posedge clk) -     if(ll_src_rdy & (state==2)) -       dat2 		   <= ll_data; - -   always @(posedge clk) -     if(ll_src_rdy & (state==1)) -       dat1 		   <= ll_data; - -   always @(posedge clk) -     if(ll_src_rdy & ((state==0) | f36_write)) -       dat0 		   <= ll_data; -    -   assign    ll_dst_rdy     = f36_dst_rdy_i | (state != 4); -   assign    f36_data 	    = {f36_occ,f36_eof,f36_sof,dat0,dat1,dat2,dat3};  // FIXME endianess -   assign    f36_src_rdy_o  = (state == 4); -       -endmodule // ll8_to_fifo36 diff --git a/fpga/usrp2/fifo/packet32_tb.v b/fpga/usrp2/fifo/packet32_tb.v deleted file mode 100644 index 8a7cfcec5..000000000 --- a/fpga/usrp2/fifo/packet32_tb.v +++ /dev/null @@ -1,44 +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/>. -// - - - -module packet32_tb(); - -   wire [35:0] data; -   wire       src_rdy, dst_rdy; - -   wire       clear = 0; -   reg 	      clk = 0; -   reg 	      reset = 1; - -   always #10 clk <= ~clk; -   initial #1000 reset <= 0; - -   initial $dumpfile("packet32_tb.vcd"); -   initial $dumpvars(0,packet32_tb); - -   wire [31:0] total, crc_err, seq_err, len_err; -    -   packet_generator32 pkt_gen (.clk(clk), .reset(reset), .clear(clear), -			       .data_o(data), .src_rdy_o(src_rdy), .dst_rdy_i(dst_rdy)); - -   packet_verifier32 pkt_ver (.clk(clk), .reset(reset), .clear(clear), -			      .data_i(data), .src_rdy_i(src_rdy), .dst_rdy_o(dst_rdy), -			      .total(total), .crc_err(crc_err), .seq_err(seq_err), .len_err(len_err)); - -endmodule // packet32_tb diff --git a/fpga/usrp2/fifo/packet_dispatcher36_x3.v b/fpga/usrp2/fifo/packet_dispatcher36_x3.v deleted file mode 100644 index 0f9e752c8..000000000 --- a/fpga/usrp2/fifo/packet_dispatcher36_x3.v +++ /dev/null @@ -1,294 +0,0 @@ -// -// Copyright 2011 Ettus Research LLC -// -// Packet dispatcher with fifo36 interface and 3 outputs. -// -// The packet dispatcher expects 2-byte padded ethernet frames. -// The frames will be inspected at ethernet, IPv4, UDP, and VRT layers. -// Packets are dispatched into the following streams: -//   * tx dsp stream -//   * to cpu stream -//   * to external stream -//   * to both cpu and external -// -// The following registers are used for dispatcher control: -//   * base + 0 = this ipv4 address (32 bits) -//   * base + 1 = udp dst port (lower 16 bits) -// - -module packet_dispatcher36_x3 -    #( -        parameter BASE = 0 -    ) -    ( -        //clocking and reset interface: -        input clk, input rst, input clr, - -        //setting register interface: -        input set_stb, input [7:0] set_addr, input [31:0] set_data, - -        //input stream interfaces: -        input [35:0] com_inp_data, input com_inp_valid, output com_inp_ready, - -        //output stream interfaces: -        output [35:0] ext_out_data, output ext_out_valid, input ext_out_ready, -        output [35:0] dsp_out_data, output dsp_out_valid, input dsp_out_ready, -        output [35:0] cpu_out_data, output cpu_out_valid, input cpu_out_ready -    ); - -    //setting register to program the IP address -    wire [31:0] my_ip_addr; -    setting_reg #(.my_addr(BASE+0)) sreg_ip_addr( -        .clk(clk),.rst(rst), -        .strobe(set_stb),.addr(set_addr),.in(set_data), -        .out(my_ip_addr),.changed() -    ); - -    //setting register to program the UDP DSP port -    wire [15:0] dsp_udp_port; -    setting_reg #(.my_addr(BASE+1), .width(16)) sreg_data_port( -        .clk(clk),.rst(rst), -        .strobe(set_stb),.addr(set_addr),.in(set_data), -        .out(dsp_udp_port),.changed() -    ); - -    //////////////////////////////////////////////////////////////////// -    // Communication input inspector -    //   - inspect com input and send it to DSP, EXT, CPU, or BOTH -    //////////////////////////////////////////////////////////////////// -    localparam PD_STATE_READ_COM_PRE = 0; -    localparam PD_STATE_READ_COM = 1; -    localparam PD_STATE_WRITE_REGS = 2; -    localparam PD_STATE_WRITE_LIVE = 3; - -    localparam PD_DEST_DSP = 0; -    localparam PD_DEST_EXT = 1; -    localparam PD_DEST_CPU = 2; -    localparam PD_DEST_BOF = 3; - -    localparam PD_MAX_NUM_DREGS = 13; //padded_eth + ip + udp + seq + vrt_hdr -    localparam PD_DREGS_DSP_OFFSET = 11; //offset to start dsp at - -    //output inspector interfaces -    wire [35:0] pd_out_dsp_data; -    wire        pd_out_dsp_valid; -    wire        pd_out_dsp_ready; - -    wire [35:0] pd_out_ext_data; -    wire        pd_out_ext_valid; -    wire        pd_out_ext_ready; - -    wire [35:0] pd_out_cpu_data; -    wire        pd_out_cpu_valid; -    wire        pd_out_cpu_ready; - -    wire [35:0] pd_out_bof_data; -    wire        pd_out_bof_valid; -    wire        pd_out_bof_ready; - -    reg [1:0] pd_state; -    reg [1:0] pd_dest; -    reg [3:0] pd_dreg_count; //data registers to buffer headers -    wire [3:0] pd_dreg_count_next = pd_dreg_count + 1'b1; -    wire pd_dreg_counter_done = (pd_dreg_count_next == PD_MAX_NUM_DREGS)? 1'b1 : 1'b0; -    reg [35:0] pd_dregs [PD_MAX_NUM_DREGS-1:0]; - -    reg is_eth_dst_mac_bcast; -    reg is_eth_type_ipv4; -    reg is_eth_ipv4_proto_udp; -    reg is_eth_ipv4_dst_addr_here; -    reg is_eth_udp_dst_port_here; -    wire is_vrt_size_zero = (com_inp_data[15:0] == 16'h0); //needed on the same cycle, so it cant be registered - -    //Inspector output flags special case: -    //Inject SOF into flags at first DSP line. -    wire [3:0] pd_out_flags = ( -        (pd_dreg_count == PD_DREGS_DSP_OFFSET) && -        (pd_dest == PD_DEST_DSP) -    )? 4'b0001 : pd_dregs[pd_dreg_count][35:32]; - -    //The communication inspector ouput data and valid signals: -    //Mux between com input and data registers based on the state. -    wire [35:0] pd_out_data = (pd_state == PD_STATE_WRITE_REGS)? -        {pd_out_flags, pd_dregs[pd_dreg_count][31:0]} : com_inp_data -    ; -    wire pd_out_valid = -        (pd_state == PD_STATE_WRITE_REGS)? 1'b1          : ( -        (pd_state == PD_STATE_WRITE_LIVE)? com_inp_valid : ( -    1'b0)); - -    //The communication inspector ouput ready signal: -    //Mux between the various destination ready signals. -    wire pd_out_ready = -        (pd_dest == PD_DEST_DSP)? pd_out_dsp_ready : ( -        (pd_dest == PD_DEST_EXT)? pd_out_ext_ready : ( -        (pd_dest == PD_DEST_CPU)? pd_out_cpu_ready : ( -        (pd_dest == PD_DEST_BOF)? pd_out_bof_ready : ( -    1'b0)))); - -    //Always connected output data lines. -    assign pd_out_dsp_data = pd_out_data; -    assign pd_out_ext_data = pd_out_data; -    assign pd_out_cpu_data = pd_out_data; -    assign pd_out_bof_data = pd_out_data; - -    //Destination output valid signals: -    //Comes from inspector valid when destination is selected, and otherwise low. -    assign pd_out_dsp_valid = (pd_dest == PD_DEST_DSP)? pd_out_valid : 1'b0; -    assign pd_out_ext_valid = (pd_dest == PD_DEST_EXT)? pd_out_valid : 1'b0; -    assign pd_out_cpu_valid = (pd_dest == PD_DEST_CPU)? pd_out_valid : 1'b0; -    assign pd_out_bof_valid = (pd_dest == PD_DEST_BOF)? pd_out_valid : 1'b0; - -    //The communication inspector ouput ready signal: -    //Always ready when storing to data registers, -    //comes from inspector ready output when live, -    //and otherwise low. -    assign com_inp_ready = -        (pd_state == PD_STATE_READ_COM_PRE)  ? 1'b1         : ( -        (pd_state == PD_STATE_READ_COM)      ? 1'b1         : ( -        (pd_state == PD_STATE_WRITE_LIVE)    ? pd_out_ready : ( -    1'b0))); - -    //inspect the incoming data and mark register booleans -    always @(posedge clk) -    if (com_inp_ready & com_inp_valid) begin -        case(pd_dreg_count) -        0: begin -            is_eth_dst_mac_bcast <= (com_inp_data[15:0] == 16'hffff); -        end -        1: begin -            is_eth_dst_mac_bcast <= is_eth_dst_mac_bcast && (com_inp_data[31:0] == 32'hffffffff); -        end -        3: begin -            is_eth_type_ipv4 <= (com_inp_data[15:0] == 16'h800); -        end -        6: begin -            is_eth_ipv4_proto_udp <= (com_inp_data[23:16] == 8'h11); -        end -        8: begin -            is_eth_ipv4_dst_addr_here <= (com_inp_data[31:0] == my_ip_addr); -        end -        9: begin -            is_eth_udp_dst_port_here <= (com_inp_data[15:0] == dsp_udp_port); -        end -        endcase //pd_dreg_count -    end - -    always @(posedge clk) -    if(rst | clr) begin -        pd_state <= PD_STATE_READ_COM_PRE; -        pd_dreg_count <= 0; -    end -    else begin -        case(pd_state) -        PD_STATE_READ_COM_PRE: begin -            if (com_inp_ready & com_inp_valid & com_inp_data[32]) begin -                pd_state <= PD_STATE_READ_COM; -                pd_dreg_count <= pd_dreg_count_next; -                pd_dregs[pd_dreg_count] <= com_inp_data; -            end -        end - -        PD_STATE_READ_COM: begin -            if (com_inp_ready & com_inp_valid) begin -                pd_dregs[pd_dreg_count] <= com_inp_data; -                if (pd_dreg_counter_done | com_inp_data[33]) begin -                    pd_state <= PD_STATE_WRITE_REGS; -                    pd_dreg_count <= 0; - -                    //---------- begin inspection decision -----------// -                    //EOF or bcast or not IPv4 or not UDP: -                    if ( -                        com_inp_data[33] || is_eth_dst_mac_bcast || -                        ~is_eth_type_ipv4 || ~is_eth_ipv4_proto_udp -                    ) begin -                        pd_dest <= PD_DEST_BOF; -                    end - -                    //not my IP address: -                    else if (~is_eth_ipv4_dst_addr_here) begin -                        pd_dest <= PD_DEST_EXT; -                    end - -                    //UDP data port and VRT: -                    else if (is_eth_udp_dst_port_here && ~is_vrt_size_zero) begin -                        pd_dest <= PD_DEST_DSP; -                        pd_dreg_count <= PD_DREGS_DSP_OFFSET; -                    end - -                    //other: -                    else begin -                        pd_dest <= PD_DEST_CPU; -                    end -                    //---------- end inspection decision -------------// - -                end -                else begin -                    pd_dreg_count <= pd_dreg_count_next; -                end -            end -        end - -        PD_STATE_WRITE_REGS: begin -            if (pd_out_ready & pd_out_valid) begin -                if (pd_out_data[33]) begin -                    pd_state <= PD_STATE_READ_COM_PRE; -                    pd_dreg_count <= 0; -                end -                else if (pd_dreg_counter_done) begin -                    pd_state <= PD_STATE_WRITE_LIVE; -                    pd_dreg_count <= 0; -                end -                else begin -                    pd_dreg_count <= pd_dreg_count_next; -                end -            end -        end - -        PD_STATE_WRITE_LIVE: begin -            if (pd_out_ready & pd_out_valid & pd_out_data[33]) begin -                pd_state <= PD_STATE_READ_COM_PRE; -            end -        end - -        endcase //pd_state -    end - -    //connect this fast-path signals directly to the DSP out -    assign dsp_out_data = pd_out_dsp_data; -    assign dsp_out_valid = pd_out_dsp_valid; -    assign pd_out_dsp_ready = dsp_out_ready; - -    //////////////////////////////////////////////////////////////////// -    // Splitter and output muxes for the bof packets -    //   - split the bof packets into two streams -    //   - mux split packets into cpu out and ext out -    //////////////////////////////////////////////////////////////////// - -    //dummy signals to join the the splitter and muxes below -    wire [35:0] _split_to_ext_data,  _split_to_cpu_data; -    wire        _split_to_ext_valid, _split_to_cpu_valid; -    wire        _split_to_ext_ready, _split_to_cpu_ready; - -    splitter36 bof_out_splitter( -        .clk(clk), .rst(rst), .clr(clr), -        .inp_data(pd_out_bof_data), .inp_valid(pd_out_bof_valid), .inp_ready(pd_out_bof_ready), -        .out0_data(_split_to_ext_data), .out0_valid(_split_to_ext_valid), .out0_ready(_split_to_ext_ready), -        .out1_data(_split_to_cpu_data), .out1_valid(_split_to_cpu_valid), .out1_ready(_split_to_cpu_ready) -    ); - -    fifo36_mux ext_out_mux( -        .clk(clk), .reset(rst), .clear(clr), -        .data0_i(pd_out_ext_data), .src0_rdy_i(pd_out_ext_valid), .dst0_rdy_o(pd_out_ext_ready), -        .data1_i(_split_to_ext_data), .src1_rdy_i(_split_to_ext_valid), .dst1_rdy_o(_split_to_ext_ready), -        .data_o(ext_out_data), .src_rdy_o(ext_out_valid), .dst_rdy_i(ext_out_ready) -    ); - -    fifo36_mux cpu_out_mux( -        .clk(clk), .reset(rst), .clear(clr), -        .data0_i(pd_out_cpu_data), .src0_rdy_i(pd_out_cpu_valid), .dst0_rdy_o(pd_out_cpu_ready), -        .data1_i(_split_to_cpu_data), .src1_rdy_i(_split_to_cpu_valid), .dst1_rdy_o(_split_to_cpu_ready), -        .data_o(cpu_out_data), .src_rdy_o(cpu_out_valid), .dst_rdy_i(cpu_out_ready) -    ); - -endmodule // packet_dispatcher36_x3 diff --git a/fpga/usrp2/fifo/packet_dispatcher36_x4.v b/fpga/usrp2/fifo/packet_dispatcher36_x4.v deleted file mode 100644 index 7eedb3e74..000000000 --- a/fpga/usrp2/fifo/packet_dispatcher36_x4.v +++ /dev/null @@ -1,316 +0,0 @@ -// -// Copyright 2011-2012 Ettus Research LLC -// -// Packet dispatcher with fifo36 interface and 4 outputs. -// -// The packet dispatcher expects 2-byte padded ethernet frames. -// The frames will be inspected at ethernet, IPv4, UDP, and VRT layers. -// Packets are dispatched into the following streams: -//   * tx dsp stream -//   * tx control stream -//   * to cpu stream -//   * to external stream -//   * to both cpu and external -// -// The following registers are used for dispatcher control: -//   * base + 0 = this ipv4 address (32 bits) -//   * base + 1 = udp control port (upper 16 bits), udp dsp port (lower 16 bits) -// - -module packet_dispatcher36_x4 -    #( -        parameter BASE = 0 -    ) -    ( -        //clocking and reset interface: -        input clk, input rst, input clr, - -        //setting register interface: -        input set_stb, input [7:0] set_addr, input [31:0] set_data, - -        //input stream interfaces: -        input [35:0] com_inp_data, input com_inp_valid, output com_inp_ready, - -        //output stream interfaces: -        output [35:0] ext_out_data, output ext_out_valid, input ext_out_ready, -        output [35:0] dsp_out_data, output dsp_out_valid, input dsp_out_ready, -        output [35:0] ctl_out_data, output ctl_out_valid, input ctl_out_ready, -        output [35:0] cpu_out_data, output cpu_out_valid, input cpu_out_ready -    ); - -    //setting register to program the IP address -    wire [31:0] my_ip_addr; -    setting_reg #(.my_addr(BASE+0)) sreg_ip_addr( -        .clk(clk),.rst(rst), -        .strobe(set_stb),.addr(set_addr),.in(set_data), -        .out(my_ip_addr),.changed() -    ); - -    //setting register to program the UDP DSP port -    wire [15:0] dsp_udp_port, ctl_udp_port; -    setting_reg #(.my_addr(BASE+1), .width(32)) sreg_data_port( -        .clk(clk),.rst(rst), -        .strobe(set_stb),.addr(set_addr),.in(set_data), -        .out({ctl_udp_port, dsp_udp_port}),.changed() -    ); - -    //////////////////////////////////////////////////////////////////// -    // Communication input inspector -    //   - inspect com input and send it to DSP, EXT, CPU, or BOTH -    //////////////////////////////////////////////////////////////////// -    localparam PD_STATE_READ_COM_PRE = 0; -    localparam PD_STATE_READ_COM = 1; -    localparam PD_STATE_WRITE_REGS = 2; -    localparam PD_STATE_WRITE_LIVE = 3; - -    localparam PD_DEST_DSP = 0; -    localparam PD_DEST_EXT = 1; -    localparam PD_DEST_CPU = 2; -    localparam PD_DEST_BOF = 3; -    localparam PD_DEST_CTL = 4; - -    localparam PD_MAX_NUM_DREGS = 13; //padded_eth + ip + udp + seq + vrt_hdr -    localparam PD_DREGS_DSP_OFFSET = 11; //offset to start dsp at - -    //output inspector interfaces -    wire [35:0] pd_out_dsp_data; -    wire        pd_out_dsp_valid; -    wire        pd_out_dsp_ready; - -    wire [35:0] pd_out_ext_data; -    wire        pd_out_ext_valid; -    wire        pd_out_ext_ready; - -    wire [35:0] pd_out_cpu_data; -    wire        pd_out_cpu_valid; -    wire        pd_out_cpu_ready; - -    wire [35:0] pd_out_bof_data; -    wire        pd_out_bof_valid; -    wire        pd_out_bof_ready; - -    wire [35:0] pd_out_ctl_data; -    wire        pd_out_ctl_valid; -    wire        pd_out_ctl_ready; - -    reg [1:0] pd_state; -    reg [2:0] pd_dest; -    reg [3:0] pd_dreg_count; //data registers to buffer headers -    wire [3:0] pd_dreg_count_next = pd_dreg_count + 1'b1; -    wire pd_dreg_counter_done = (pd_dreg_count_next == PD_MAX_NUM_DREGS)? 1'b1 : 1'b0; -    reg [35:0] pd_dregs [PD_MAX_NUM_DREGS-1:0]; - -    reg is_eth_dst_mac_bcast; -    reg is_eth_type_ipv4; -    reg is_eth_ipv4_proto_udp; -    reg is_eth_ipv4_dst_addr_here; -    reg is_eth_udp_dsp_port_here; -    reg is_eth_udp_ctl_port_here; -    wire is_vrt_size_zero = (com_inp_data[15:0] == 16'h0); //needed on the same cycle, so it cant be registered - -    //Inspector output flags special case: -    //Inject SOF into flags at first DSP line. -    wire [3:0] pd_out_flags = ( -        (pd_dreg_count == PD_DREGS_DSP_OFFSET) && -        (pd_dest == PD_DEST_DSP) -    )? 4'b0001 : pd_dregs[pd_dreg_count][35:32]; - -    //The communication inspector ouput data and valid signals: -    //Mux between com input and data registers based on the state. -    wire [35:0] pd_out_data = (pd_state == PD_STATE_WRITE_REGS)? -        {pd_out_flags, pd_dregs[pd_dreg_count][31:0]} : com_inp_data -    ; -    wire pd_out_valid = -        (pd_state == PD_STATE_WRITE_REGS)? 1'b1          : ( -        (pd_state == PD_STATE_WRITE_LIVE)? com_inp_valid : ( -    1'b0)); - -    //The communication inspector ouput ready signal: -    //Mux between the various destination ready signals. -    wire pd_out_ready = -        (pd_dest == PD_DEST_DSP)? pd_out_dsp_ready : ( -        (pd_dest == PD_DEST_EXT)? pd_out_ext_ready : ( -        (pd_dest == PD_DEST_CPU)? pd_out_cpu_ready : ( -        (pd_dest == PD_DEST_BOF)? pd_out_bof_ready : ( -        (pd_dest == PD_DEST_CTL)? pd_out_ctl_ready : ( -    1'b0))))); - -    //Always connected output data lines. -    assign pd_out_dsp_data = pd_out_data; -    assign pd_out_ext_data = pd_out_data; -    assign pd_out_cpu_data = pd_out_data; -    assign pd_out_bof_data = pd_out_data; -    assign pd_out_ctl_data = pd_out_data; - -    //Destination output valid signals: -    //Comes from inspector valid when destination is selected, and otherwise low. -    assign pd_out_dsp_valid = (pd_dest == PD_DEST_DSP)? pd_out_valid : 1'b0; -    assign pd_out_ext_valid = (pd_dest == PD_DEST_EXT)? pd_out_valid : 1'b0; -    assign pd_out_cpu_valid = (pd_dest == PD_DEST_CPU)? pd_out_valid : 1'b0; -    assign pd_out_bof_valid = (pd_dest == PD_DEST_BOF)? pd_out_valid : 1'b0; -    assign pd_out_ctl_valid = (pd_dest == PD_DEST_CTL)? pd_out_valid : 1'b0; - -    //The communication inspector ouput ready signal: -    //Always ready when storing to data registers, -    //comes from inspector ready output when live, -    //and otherwise low. -    assign com_inp_ready = -        (pd_state == PD_STATE_READ_COM_PRE)  ? 1'b1         : ( -        (pd_state == PD_STATE_READ_COM)      ? 1'b1         : ( -        (pd_state == PD_STATE_WRITE_LIVE)    ? pd_out_ready : ( -    1'b0))); - -    //inspect the incoming data and mark register booleans -    always @(posedge clk) -    if (com_inp_ready & com_inp_valid) begin -        case(pd_dreg_count) -        0: begin -            is_eth_dst_mac_bcast <= (com_inp_data[15:0] == 16'hffff); -        end -        1: begin -            is_eth_dst_mac_bcast <= is_eth_dst_mac_bcast && (com_inp_data[31:0] == 32'hffffffff); -        end -        3: begin -            is_eth_type_ipv4 <= (com_inp_data[15:0] == 16'h800); -        end -        6: begin -            is_eth_ipv4_proto_udp <= (com_inp_data[23:16] == 8'h11); -        end -        8: begin -            is_eth_ipv4_dst_addr_here <= (com_inp_data[31:0] == my_ip_addr); -        end -        9: begin -            is_eth_udp_dsp_port_here <= (com_inp_data[15:0] == dsp_udp_port); -            is_eth_udp_ctl_port_here <= (com_inp_data[15:0] == ctl_udp_port); -        end -        endcase //pd_dreg_count -    end - -    always @(posedge clk) -    if(rst | clr) begin -        pd_state <= PD_STATE_READ_COM_PRE; -        pd_dreg_count <= 0; -    end -    else begin -        case(pd_state) -        PD_STATE_READ_COM_PRE: begin -            if (com_inp_ready & com_inp_valid & com_inp_data[32]) begin -                pd_state <= PD_STATE_READ_COM; -                pd_dreg_count <= pd_dreg_count_next; -                pd_dregs[pd_dreg_count] <= com_inp_data; -            end -        end - -        PD_STATE_READ_COM: begin -            if (com_inp_ready & com_inp_valid) begin -                pd_dregs[pd_dreg_count] <= com_inp_data; -                if (pd_dreg_counter_done | com_inp_data[33]) begin -                    pd_state <= PD_STATE_WRITE_REGS; -                    pd_dreg_count <= 0; - -                    //---------- begin inspection decision -----------// -                    //EOF or bcast or not IPv4 or not UDP: -                    if ( -                        com_inp_data[33] || is_eth_dst_mac_bcast || -                        ~is_eth_type_ipv4 || ~is_eth_ipv4_proto_udp -                    ) begin -                        pd_dest <= PD_DEST_BOF; -                    end - -                    //not my IP address: -                    else if (~is_eth_ipv4_dst_addr_here) begin -                        pd_dest <= PD_DEST_EXT; -                    end - -                    //UDP control port and VRT: -                    else if (is_eth_udp_ctl_port_here && ~is_vrt_size_zero) begin -                        pd_dest <= PD_DEST_CTL; -                        pd_dreg_count <= PD_DREGS_DSP_OFFSET; -                    end - -                    //UDP data port and VRT: -                    else if (is_eth_udp_dsp_port_here && ~is_vrt_size_zero) begin -                        pd_dest <= PD_DEST_DSP; -                        pd_dreg_count <= PD_DREGS_DSP_OFFSET; -                    end - -                    //other: -                    else begin -                        pd_dest <= PD_DEST_CPU; -                    end -                    //---------- end inspection decision -------------// - -                end -                else begin -                    pd_dreg_count <= pd_dreg_count_next; -                end -            end -        end - -        PD_STATE_WRITE_REGS: begin -            if (pd_out_ready & pd_out_valid) begin -                if (pd_out_data[33]) begin -                    pd_state <= PD_STATE_READ_COM_PRE; -                    pd_dreg_count <= 0; -                end -                else if (pd_dreg_counter_done) begin -                    pd_state <= PD_STATE_WRITE_LIVE; -                    pd_dreg_count <= 0; -                end -                else begin -                    pd_dreg_count <= pd_dreg_count_next; -                end -            end -        end - -        PD_STATE_WRITE_LIVE: begin -            if (pd_out_ready & pd_out_valid & pd_out_data[33]) begin -                pd_state <= PD_STATE_READ_COM_PRE; -            end -        end - -        endcase //pd_state -    end - -    //connect this fast-path signals directly to the DSP out -    assign dsp_out_data = pd_out_dsp_data; -    assign dsp_out_valid = pd_out_dsp_valid; -    assign pd_out_dsp_ready = dsp_out_ready; - -    assign ctl_out_data = pd_out_ctl_data; -    assign ctl_out_valid = pd_out_ctl_valid; -    assign pd_out_ctl_ready = ctl_out_ready; - -    //////////////////////////////////////////////////////////////////// -    // Splitter and output muxes for the bof packets -    //   - split the bof packets into two streams -    //   - mux split packets into cpu out and ext out -    //////////////////////////////////////////////////////////////////// - -    //dummy signals to join the the splitter and muxes below -    wire [35:0] _split_to_ext_data,  _split_to_cpu_data; -    wire        _split_to_ext_valid, _split_to_cpu_valid; -    wire        _split_to_ext_ready, _split_to_cpu_ready; - -    splitter36 bof_out_splitter( -        .clk(clk), .rst(rst), .clr(clr), -        .inp_data(pd_out_bof_data), .inp_valid(pd_out_bof_valid), .inp_ready(pd_out_bof_ready), -        .out0_data(_split_to_ext_data), .out0_valid(_split_to_ext_valid), .out0_ready(_split_to_ext_ready), -        .out1_data(_split_to_cpu_data), .out1_valid(_split_to_cpu_valid), .out1_ready(_split_to_cpu_ready) -    ); - -    fifo36_mux ext_out_mux( -        .clk(clk), .reset(rst), .clear(clr), -        .data0_i(pd_out_ext_data), .src0_rdy_i(pd_out_ext_valid), .dst0_rdy_o(pd_out_ext_ready), -        .data1_i(_split_to_ext_data), .src1_rdy_i(_split_to_ext_valid), .dst1_rdy_o(_split_to_ext_ready), -        .data_o(ext_out_data), .src_rdy_o(ext_out_valid), .dst_rdy_i(ext_out_ready) -    ); - -    fifo36_mux cpu_out_mux( -        .clk(clk), .reset(rst), .clear(clr), -        .data0_i(pd_out_cpu_data), .src0_rdy_i(pd_out_cpu_valid), .dst0_rdy_o(pd_out_cpu_ready), -        .data1_i(_split_to_cpu_data), .src1_rdy_i(_split_to_cpu_valid), .dst1_rdy_o(_split_to_cpu_ready), -        .data_o(cpu_out_data), .src_rdy_o(cpu_out_valid), .dst_rdy_i(cpu_out_ready) -    ); - -endmodule // packet_dispatcher36_x3 diff --git a/fpga/usrp2/fifo/packet_generator.v b/fpga/usrp2/fifo/packet_generator.v deleted file mode 100644 index 5e9d3c2ab..000000000 --- a/fpga/usrp2/fifo/packet_generator.v +++ /dev/null @@ -1,100 +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/>. -// - - - -module packet_generator -  (input clk, input reset, input clear, -   output reg [7:0] data_o, output sof_o, output eof_o, -   input [127:0] header, -   output src_rdy_o, input dst_rdy_i); - -   localparam len = 32'd2000; - -   reg [31:0] state; -   reg [31:0] seq; -   reg [31:0] crc_out; -   wire        calc_crc = src_rdy_o & dst_rdy_i & ~(state[31:2] == 30'h3FFF_FFFF); -    -	 -   always @(posedge clk) -     if(reset | clear) -       seq <= 0; -     else -       if(eof_o & src_rdy_o & dst_rdy_i) -	 seq <= seq + 1; -    -   always @(posedge clk) -     if(reset | clear) -       state <= 0; -     else -       if(src_rdy_o & dst_rdy_i) -	 if(state == (len - 1)) -	   state <= 32'hFFFF_FFFC; -	 else -	   state <= state + 1; - -   always @* -     case(state) -       0 :   data_o <= len[31:24]; -       1 :   data_o <= len[23:16]; -       2 :   data_o <= len[15:8]; -       3 :   data_o <= len[7:0]; -       4 :   data_o <= seq[31:24]; -       5 :   data_o <= seq[23:16]; -       6 :   data_o <= seq[15:8]; -       7 :   data_o <= seq[7:0]; -       8 :   data_o <= header[7:0]; -       9 :   data_o <= header[15:8]; -       10 :  data_o <= header[23:16]; -       11 :  data_o <= header[31:24]; -       12 :  data_o <= header[39:32]; -       13 :  data_o <= header[47:40]; -       14 :  data_o <= header[55:48]; -       15 :  data_o <= header[63:56]; -       16 :  data_o <= header[71:64]; -       17 :  data_o <= header[79:72]; -       18 :  data_o <= header[87:80]; -       19 :  data_o <= header[95:88]; -       20 :  data_o <= header[103:96]; -       21 :  data_o <= header[111:104]; -       22 :  data_o <= header[119:112]; -       23 :  data_o <= header[127:120]; - -       32'hFFFF_FFFC : data_o <= crc_out[31:24]; -       32'hFFFF_FFFD : data_o <= crc_out[23:16]; -       32'hFFFF_FFFE : data_o <= crc_out[15:8]; -       32'hFFFF_FFFF : data_o <= crc_out[7:0]; -       default : data_o <= state[7:0]; -     endcase // case (state) -    -   assign src_rdy_o = 1; -   assign sof_o = (state == 0); -   assign eof_o = (state == 32'hFFFF_FFFF); - -   wire        clear_crc = eof_o & src_rdy_o & dst_rdy_i; -    -//   crc crc(.clk(clk), .reset(reset), .clear(clear_crc), .data(data_o),  -//	   .calc(calc_crc), .crc_out(crc_out), .match()); -   always @(posedge clk) -     if(reset | clear | clear_crc) -       crc_out <= 0; -     else -       if(calc_crc) -	 crc_out <= crc_out + data_o; -    -endmodule // packet_generator diff --git a/fpga/usrp2/fifo/packet_generator32.v b/fpga/usrp2/fifo/packet_generator32.v deleted file mode 100644 index 7b4e3bd57..000000000 --- a/fpga/usrp2/fifo/packet_generator32.v +++ /dev/null @@ -1,40 +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/>. -// - - - -module packet_generator32 -  (input clk, input reset, input clear, -   input [127:0] header, -   output [35:0] data_o, output src_rdy_o, input dst_rdy_i); - -   wire [7:0] 	     ll_data; -   wire 	     ll_sof, ll_eof, ll_src_rdy, ll_dst_rdy_n; -    -   packet_generator pkt_gen -     (.clk(clk), .reset(reset), .clear(clear), -      .data_o(ll_data), .sof_o(ll_sof), .eof_o(ll_eof), -      .header(header), -      .src_rdy_o(ll_src_rdy), .dst_rdy_i(~ll_dst_rdy_n)); - -   ll8_to_fifo36 ll8_to_f36 -     (.clk(clk), .reset(reset), .clear(clear), -      .ll_data(ll_data), .ll_sof_n(~ll_sof), .ll_eof_n(~ll_eof), -      .ll_src_rdy_n(~ll_src_rdy), .ll_dst_rdy_n(ll_dst_rdy_n), -      .f36_data(data_o), .f36_src_rdy_o(src_rdy_o), .f36_dst_rdy_i(dst_rdy_i)); -    -endmodule // packet_generator32 diff --git a/fpga/usrp2/fifo/packet_padder36.v b/fpga/usrp2/fifo/packet_padder36.v deleted file mode 100644 index 6ded38781..000000000 --- a/fpga/usrp2/fifo/packet_padder36.v +++ /dev/null @@ -1,155 +0,0 @@ -// -// Copyright 2011-2012 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/>. -// - -// The packet padder 36 for use with RX VITA stream output. -// Packet padder understands the concept of USB LUTs, -// and will forward packets through the interface, -// adding zero padding as needed to properly flush. -// The padder will never write a packet across a LUT boundary. -// When flushing, padder writes out zeros until the LUT boundary. -// Requires that the input line0 be a VITA header, and SOF set. -// Flush when the LUT is partially filled and timeout is reached, -// or when the LUT is partially filled and the DSP is inactive. - -module packet_padder36 -#( -    parameter BASE = 0, - -    //default is 16K LUT -    parameter DEFAULT_LINES32 = 4096, - -    //default about 1ms at 64MHz clock -    parameter DEFAULT_IDLE_CYC = 65536 -) -( -    input clk, input reset, - -    //setting bus -    input set_stb, input [7:0] set_addr, input [31:0] set_data, - -    //input interface -    input [35:0] data_i, -    input src_rdy_i, -    output dst_rdy_o, - -    //output interface -    output [35:0] data_o, -    output src_rdy_o, -    input dst_rdy_i, - -    input always_flush -); - -    wire lut_lines_changed; -    wire [15:0] max_lut_lines32; -    setting_reg #(.my_addr(BASE+0),.width(16),.at_reset(DEFAULT_LINES32)) sr_num_lines( -        .clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr),.in(set_data), -        .out(max_lut_lines32),.changed(lut_lines_changed)); - -    wire idle_cyc_changed; -    wire [17:0] idle_flush_cycles; -    setting_reg #(.my_addr(BASE+1),.width(18),.at_reset(DEFAULT_IDLE_CYC)) sr_flush_cyc( -        .clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr),.in(set_data), -        .out(idle_flush_cycles),.changed(idle_cyc_changed)); - -    //state machine definitions -    localparam STATE_READ_HDR = 0; -    localparam STATE_WRITE_HDR = 1; -    localparam STATE_FORWARD = 2; -    localparam STATE_WRITE_PAD = 3; -    reg [1:0] state; - -    //keep track of the outgoing lines -    reg [15:0] line_count; -    wire line_count_done = line_count == 1; -    wire lut_is_empty = line_count == max_lut_lines32; -    always @(posedge clk) begin -        if (reset || lut_lines_changed) begin -            line_count <= max_lut_lines32; -        end -        else if (src_rdy_o && dst_rdy_i) begin -            line_count <= (line_count_done)? max_lut_lines32 : line_count - 1; -        end -    end - -    //count the number of cycles since RX data so we can force a flush -    reg [17:0] non_rx_cycles; -    wire idle_timeout = (non_rx_cycles == idle_flush_cycles); -    always @(posedge clk) begin -        if(reset || state != STATE_READ_HDR || idle_cyc_changed) begin -            non_rx_cycles <= 0; -        end -        else if (~idle_timeout) begin -            non_rx_cycles <= non_rx_cycles + 1; -        end -    end - -    //flush when we have written data to a LUT and either idle or non active DSP -    wire force_flush = ~lut_is_empty && (idle_timeout || always_flush); - -    //the padding state machine -    reg [31:0] vita_hdr; -    reg has_vita_hdr; -    always @(posedge clk) begin -        if (reset) begin -            state <= STATE_READ_HDR; -        end -        else case(state) - -        STATE_READ_HDR: begin -            if (src_rdy_i && dst_rdy_o && data_i[32]) begin -                vita_hdr <= data_i[31:0]; -                has_vita_hdr <= 1; -                state <= (data_i[15:0] > line_count)? STATE_WRITE_PAD : STATE_WRITE_HDR; -            end -            else if (force_flush) begin -                has_vita_hdr <= 0; -                state <= STATE_WRITE_PAD; -            end -        end - -        STATE_WRITE_HDR: begin -            if (src_rdy_o && dst_rdy_i) begin -                state <= STATE_FORWARD; -            end -        end - -        STATE_FORWARD: begin -            if (src_rdy_i && dst_rdy_o && data_i[33]) begin -                state <= STATE_READ_HDR; -            end -        end - -        STATE_WRITE_PAD: begin -            if (src_rdy_o && dst_rdy_i && line_count_done) begin -                state <= (has_vita_hdr)? STATE_WRITE_HDR : STATE_READ_HDR; -            end -        end - -        endcase //state -    end - -    //assign outgoing signals -    assign dst_rdy_o = (state == STATE_READ_HDR)? 1 : ((state == STATE_FORWARD)? dst_rdy_i : 0); -    assign src_rdy_o = (state == STATE_WRITE_HDR || state == STATE_WRITE_PAD)? 1 : ((state == STATE_FORWARD )? src_rdy_i : 0); -    assign data_o = (state == STATE_WRITE_HDR)? {4'b0001, vita_hdr} : ((state == STATE_FORWARD)? data_i : 0); - -endmodule // packet_padder36 - - - - diff --git a/fpga/usrp2/fifo/packet_router.v b/fpga/usrp2/fifo/packet_router.v deleted file mode 100644 index 4c0fe14b1..000000000 --- a/fpga/usrp2/fifo/packet_router.v +++ /dev/null @@ -1,326 +0,0 @@ -// -// Copyright 2011-2012 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/>. -// - -module packet_router -    #( -        parameter BUF_SIZE = 9, -        parameter UDP_BASE = 0, -        parameter CTRL_BASE = 0 -    ) -    ( -        //wishbone interface for memory mapped CPU frames -        input wb_clk_i, -        input wb_rst_i, -        input wb_we_i, -        input wb_stb_i, -        input [15:0] wb_adr_i, -        input [31:0] wb_dat_i, -        output [31:0] wb_dat_o, -        output wb_ack_o, -        output wb_err_o, -        output wb_rty_o, - -        //setting register interface -        input set_stb, input [7:0] set_addr, input [31:0] set_data, - -        input stream_clk, -        input stream_rst, -        input stream_clr, - -        //output status register -        output [31:0] status, - -        output sys_int_o, //want an interrupt? - -        output [31:0] debug, - -        // Input Interfaces (in to router) -        input [35:0] ser_inp_data, input ser_inp_valid, output ser_inp_ready, -        input [35:0] dsp0_inp_data, input dsp0_inp_valid, output dsp0_inp_ready, -        input [35:0] dsp1_inp_data, input dsp1_inp_valid, output dsp1_inp_ready, -        input [35:0] eth_inp_data, input eth_inp_valid, output eth_inp_ready, -        input [35:0] err_inp_data, input err_inp_valid, output err_inp_ready, -        input [35:0] ctl_inp_data, input ctl_inp_valid, output ctl_inp_ready, - -        // Output Interfaces (out of router) -        output [35:0] ser_out_data, output ser_out_valid, input ser_out_ready, -        output [35:0] dsp_out_data, output dsp_out_valid, input dsp_out_ready, -        output [35:0] ctl_out_data, output ctl_out_valid, input ctl_out_ready, -        output [35:0] eth_out_data, output eth_out_valid, input eth_out_ready -    ); - -    assign wb_err_o = 1'b0;  // Unused for now -    assign wb_rty_o = 1'b0;  // Unused for now - -    //////////////////////////////////////////////////////////////////// -    // CPU interface to this packet router -    //////////////////////////////////////////////////////////////////// -    wire [35:0] cpu_inp_data,  cpu_out_data; -    wire        cpu_inp_valid, cpu_out_valid; -    wire        cpu_inp_ready, cpu_out_ready; - -    //////////////////////////////////////////////////////////////////// -    // Communication interfaces -    //////////////////////////////////////////////////////////////////// -    wire [35:0] com_inp_data,  com_out_data,  udp_out_data; -    wire        com_inp_valid, com_out_valid, udp_out_valid; -    wire        com_inp_ready, com_out_ready, udp_out_ready; - -    //////////////////////////////////////////////////////////////////// -    // Control signals (setting registers and status signals) -    //    - handshake lines for the CPU communication -    //    - setting registers to program the inspector -    //////////////////////////////////////////////////////////////////// - -    //setting register for mode control -    wire [31:0] _sreg_mode_ctrl; -    wire        master_mode_flag; -    -    setting_reg #(.my_addr(CTRL_BASE+0), .width(1)) sreg_mode_ctrl( -        .clk(stream_clk),.rst(stream_rst), -        .strobe(set_stb),.addr(set_addr),.in(set_data), -        .out(master_mode_flag),.changed() -    ); - -    //assign status output signals -    wire [31:0] cpu_iface_status; -    assign status = { -        cpu_iface_status[31:9], master_mode_flag, cpu_iface_status[7:0] -    }; - -    //////////////////////////////////////////////////////////////////// -    // Communication input source crossbar -    // When in master mode: -    //   - serdes input -> comm output combiner -    //   - ethernet input -> comm input inspector -    // When in slave mode: -    //   - serdes input -> comm input inspector -    //   - ethernet input -> null sink -    //////////////////////////////////////////////////////////////////// - -    //streaming signals from the crossbar to the combiner -    wire [35:0] ext_inp_data; -    wire        ext_inp_valid; -    wire        ext_inp_ready; - -    //dummy signals for valve/xbar below -    wire [35:0] _eth_inp_data; -    wire        _eth_inp_valid; -    wire        _eth_inp_ready; - -    // dummy signals to connect fifo_short -    wire [35:0] _com_inp_data; -    wire        _com_inp_valid; -    wire        _com_inp_ready; - -    valve36 eth_inp_valve ( -        .clk(stream_clk), .reset(stream_rst), .clear(stream_clr), .shutoff(~master_mode_flag), -        .data_i(eth_inp_data), .src_rdy_i(eth_inp_valid), .dst_rdy_o(eth_inp_ready), -        .data_o(_eth_inp_data), .src_rdy_o(_eth_inp_valid), .dst_rdy_i(_eth_inp_ready) -    ); - -    crossbar36 com_inp_xbar ( -        .clk(stream_clk), .reset(stream_rst), .clear(stream_clr), .cross(~master_mode_flag), -        .data0_i(_eth_inp_data), .src0_rdy_i(_eth_inp_valid), .dst0_rdy_o(_eth_inp_ready), -        .data1_i(ser_inp_data), .src1_rdy_i(ser_inp_valid), .dst1_rdy_o(ser_inp_ready), -        .data0_o(_com_inp_data), .src0_rdy_o(_com_inp_valid), .dst0_rdy_i(_com_inp_ready), -        .data1_o(ext_inp_data), .src1_rdy_o(ext_inp_valid), .dst1_rdy_i(ext_inp_ready) -    ); - -    //  short fifo in the packet inspection path to help timing -    fifo_short #(.WIDTH(36)) com_inp_fifo -     (.clk(stream_clk), .reset(stream_rst), .clear(stream_clr), -      .datain(_com_inp_data),  .src_rdy_i(_com_inp_valid), .dst_rdy_o(_com_inp_ready), -      .dataout(com_inp_data), .src_rdy_o(com_inp_valid), .dst_rdy_i(com_inp_ready), -      .space(), .occupied() ); - -    //////////////////////////////////////////////////////////////////// -    // Communication output sink crossbar -    // When in master mode: -    //   - comm output -> ethernet output -    //   - insp output -> serdes output -    // When in slave mode: -    //   - com output -> serdes output -    //   - insp output -> null sink -    //////////////////////////////////////////////////////////////////// - -    //streaming signals from the inspector to the crossbar -    wire [35:0] ext_out_data; -    wire        ext_out_valid; -    wire        ext_out_ready; - -    //dummy signals for valve/xbar below -    wire [35:0] _eth_out_data; -    wire        _eth_out_valid; -    wire        _eth_out_ready; - -    crossbar36 com_out_xbar ( -        .clk(stream_clk), .reset(stream_rst), .clear(stream_clr), .cross(~master_mode_flag), -        .data0_i(com_out_data), .src0_rdy_i(com_out_valid), .dst0_rdy_o(com_out_ready), -        .data1_i(ext_out_data), .src1_rdy_i(ext_out_valid), .dst1_rdy_o(ext_out_ready), -        .data0_o(_eth_out_data), .src0_rdy_o(_eth_out_valid), .dst0_rdy_i(_eth_out_ready), -        .data1_o(ser_out_data), .src1_rdy_o(ser_out_valid), .dst1_rdy_i(ser_out_ready) -    ); - -    valve36 eth_out_valve ( -        .clk(stream_clk), .reset(stream_rst), .clear(stream_clr), .shutoff(~master_mode_flag), -        .data_i(_eth_out_data), .src_rdy_i(_eth_out_valid), .dst_rdy_o(_eth_out_ready), -        .data_o(eth_out_data), .src_rdy_o(eth_out_valid), .dst_rdy_i(eth_out_ready) -    ); - -    //////////////////////////////////////////////////////////////////// -    // Communication output source combiner (feeds UDP proto machine) -    //   - DSP input -    //   - CPU input -    //   - ERR input -    //////////////////////////////////////////////////////////////////// - -    //dummy signals to join the the muxes below -    wire [35:0] _combiner0_data, _combiner1_data, _combiner2_data; -    wire        _combiner0_valid, _combiner1_valid, _combiner2_valid; -    wire        _combiner0_ready, _combiner1_ready, _combiner2_ready; - -    fifo36_mux #(.prio(0)) // No priority, fair sharing -     _com_output_combiner0( -        .clk(stream_clk), .reset(stream_rst), .clear(stream_clr), -        .data0_i(err_inp_data), .src0_rdy_i(err_inp_valid), .dst0_rdy_o(err_inp_ready), -        .data1_i(cpu_inp_data), .src1_rdy_i(cpu_inp_valid), .dst1_rdy_o(cpu_inp_ready), -        .data_o(_combiner0_data), .src_rdy_o(_combiner0_valid), .dst_rdy_i(_combiner0_ready) -    ); - -    fifo36_mux #(.prio(0)) // No priority, fair sharing -     _com_output_combiner2( -        .clk(stream_clk), .reset(stream_rst), .clear(stream_clr), -        .data0_i(_combiner0_data), .src0_rdy_i(_combiner0_valid), .dst0_rdy_o(_combiner0_ready), -        .data1_i(ctl_inp_data), .src1_rdy_i(ctl_inp_valid), .dst1_rdy_o(ctl_inp_ready), -        .data_o(_combiner2_data), .src_rdy_o(_combiner2_valid), .dst_rdy_i(_combiner2_ready) -    ); - -    fifo36_mux #(.prio(0)) // No priority, fair sharing -     _com_output_combiner1( -        .clk(stream_clk), .reset(stream_rst), .clear(stream_clr), -        .data0_i(dsp0_inp_data), .src0_rdy_i(dsp0_inp_valid), .dst0_rdy_o(dsp0_inp_ready), -        .data1_i(dsp1_inp_data), .src1_rdy_i(dsp1_inp_valid), .dst1_rdy_o(dsp1_inp_ready), -        .data_o(_combiner1_data), .src_rdy_o(_combiner1_valid), .dst_rdy_i(_combiner1_ready) -    ); - -    fifo36_mux #(.prio(1)) // Give priority to err/cpu over dsp -     com_output_source( -        .clk(stream_clk), .reset(stream_rst), .clear(stream_clr), -        .data0_i(_combiner2_data), .src0_rdy_i(_combiner2_valid), .dst0_rdy_o(_combiner2_ready), -        .data1_i(_combiner1_data), .src1_rdy_i(_combiner1_valid), .dst1_rdy_o(_combiner1_ready), -        .data_o(udp_out_data), .src_rdy_o(udp_out_valid), .dst_rdy_i(udp_out_ready) -    ); - -    //////////////////////////////////////////////////////////////////// -    // Interface CPU to memory mapped wishbone -    //   - Uses 1 setting register -    //////////////////////////////////////////////////////////////////// -    buffer_int2 #(.BASE(CTRL_BASE+3), .BUF_SIZE(BUF_SIZE)) cpu_to_wb( -        .clk(stream_clk), .rst(stream_rst | stream_clr), -        .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), -        .status(cpu_iface_status), -        // Wishbone interface to RAM -        .wb_clk_i(wb_clk_i), .wb_rst_i(wb_rst_i), -        .wb_we_i(wb_we_i),   .wb_stb_i(wb_stb_i), -        .wb_adr_i(wb_adr_i), .wb_dat_i(wb_dat_i), -        .wb_dat_o(wb_dat_o), .wb_ack_o(wb_ack_o), -        // Write FIFO Interface (from PR and into WB) -        .wr_data_i(cpu_out_data), -        .wr_ready_i(cpu_out_valid), -        .wr_ready_o(cpu_out_ready), -        // Read FIFO Interface (from WB and into PR) -        .rd_data_o(cpu_inp_data), -        .rd_ready_o(cpu_inp_valid), -        .rd_ready_i(cpu_inp_ready) -    ); - -    //////////////////////////////////////////////////////////////////// -    // Packet Dispatcher -    //   - Uses 2 setting registers -    //   - provide buffering before cpu for random + small packet bursts -    //////////////////////////////////////////////////////////////////// -    wire [35:0] _cpu_out_data; -    wire        _cpu_out_valid; -    wire        _cpu_out_ready; - -    packet_dispatcher36_x4 #(.BASE(CTRL_BASE+1)) packet_dispatcher( -        .clk(stream_clk), .rst(stream_rst), .clr(stream_clr), -        .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), -        .com_inp_data(com_inp_data), .com_inp_valid(com_inp_valid), .com_inp_ready(com_inp_ready), -        .ext_out_data(ext_out_data), .ext_out_valid(ext_out_valid), .ext_out_ready(ext_out_ready), -        .dsp_out_data(dsp_out_data), .dsp_out_valid(dsp_out_valid), .dsp_out_ready(dsp_out_ready), -        .ctl_out_data(ctl_out_data), .ctl_out_valid(ctl_out_valid), .ctl_out_ready(ctl_out_ready), -        .cpu_out_data(_cpu_out_data), .cpu_out_valid(_cpu_out_valid), .cpu_out_ready(_cpu_out_ready) -    ); - -    fifo_cascade #(.WIDTH(36), .SIZE(9/*512 lines plenty for short pkts*/)) cpu_out_fifo ( -        .clk(stream_clk), .reset(stream_rst), .clear(stream_clr), -        .datain(_cpu_out_data), .src_rdy_i(_cpu_out_valid), .dst_rdy_o(_cpu_out_ready), -        .dataout(cpu_out_data), .src_rdy_o(cpu_out_valid),  .dst_rdy_i(cpu_out_ready) -    ); - -    //////////////////////////////////////////////////////////////////// -    // UDP TX Protocol machine -    //////////////////////////////////////////////////////////////////// - -    //dummy signals to connect the components below -    wire [35:0] _com_out_data; -    wire _com_out_valid, _com_out_ready; - -    prot_eng_tx #(.BASE(UDP_BASE)) udp_prot_eng_tx -     (.clk(stream_clk), .reset(stream_rst), .clear(stream_clr), -      .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), -      .datain(udp_out_data),  .src_rdy_i(udp_out_valid), .dst_rdy_o(udp_out_ready), -      .dataout(_com_out_data), .src_rdy_o(_com_out_valid), .dst_rdy_i(_com_out_ready) ); - -    fifo36_mux com_out_mux( -        .clk(stream_clk), .reset(stream_rst), .clear(stream_clr), -        .data0_i(ext_inp_data),  .src0_rdy_i(ext_inp_valid),  .dst0_rdy_o(ext_inp_ready), -        .data1_i(_com_out_data), .src1_rdy_i(_com_out_valid), .dst1_rdy_o(_com_out_ready), -        .data_o(com_out_data),   .src_rdy_o(com_out_valid),   .dst_rdy_i(com_out_ready) -    ); - -    //////////////////////////////////////////////////////////////////// -    // Assign debugs -    //////////////////////////////////////////////////////////////////// - -    assign debug = { -        //inputs to the router (12) -        dsp0_inp_ready, dsp0_inp_valid, -        dsp1_inp_ready, dsp1_inp_valid, -        err_inp_ready, err_inp_valid, -        ser_inp_ready, ser_inp_valid, -        eth_inp_ready, eth_inp_valid, -        cpu_inp_ready, cpu_inp_valid, - -        //outputs from the router (8) -        dsp_out_ready, dsp_out_valid, -        ser_out_ready, ser_out_valid, -        eth_out_ready, eth_out_valid, -        cpu_out_ready, cpu_out_valid, - -        //other interfaces (8) -        ext_inp_ready, ext_inp_valid, -        com_out_ready, com_out_valid, -        ext_out_ready, ext_out_valid, -        com_inp_ready, com_inp_valid, - -        4'b0 -    }; - -endmodule // packet_router diff --git a/fpga/usrp2/fifo/packet_tb.v b/fpga/usrp2/fifo/packet_tb.v deleted file mode 100644 index ec0665e0a..000000000 --- a/fpga/usrp2/fifo/packet_tb.v +++ /dev/null @@ -1,46 +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/>. -// - - - -module packet_tb(); - -   wire [7:0] data; -   wire       sof, eof, src_rdy, dst_rdy; - -   wire       clear = 0; -   reg 	      clk = 0; -   reg 	      reset = 1; - -   always #10 clk <= ~clk; -   initial #1000 reset <= 0; - -   initial $dumpfile("packet_tb.vcd"); -   initial $dumpvars(0,packet_tb); - -   wire [31:0] total, crc_err, seq_err, len_err; -    -   packet_generator pkt_gen (.clk(clk), .reset(reset), .clear(clear), -			     .data_o(data), .sof_o(sof), .eof_o(eof), -			     .src_rdy_o(src_rdy), .dst_rdy_i(dst_rdy)); - -   packet_verifier pkt_ver (.clk(clk), .reset(reset), .clear(clear), -			    .data_i(data), .sof_i(sof), .eof_i(eof), -			    .src_rdy_i(src_rdy), .dst_rdy_o(dst_rdy), -			    .total(total), .crc_err(crc_err), .seq_err(seq_err), .len_err(len_err)); - -endmodule // packet_tb diff --git a/fpga/usrp2/fifo/packet_verifier.v b/fpga/usrp2/fifo/packet_verifier.v deleted file mode 100644 index 3cc7b0a04..000000000 --- a/fpga/usrp2/fifo/packet_verifier.v +++ /dev/null @@ -1,78 +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/>. -// - - - -// Packet format -- -//    Line 1 -- Length, 32 bits -//    Line 2 -- Sequence number, 32 bits -//    Last line -- CRC, 32 bits - -module packet_verifier -  (input clk, input reset, input clear, -   input [7:0] data_i, input sof_i, input eof_i, input src_rdy_i, output dst_rdy_o, - -   output reg [31:0] total,  -   output reg [31:0] crc_err,  -   output reg [31:0] seq_err,  -   output reg [31:0] len_err); - -   reg [31:0] 	     seq_num; -   reg [31:0] 	     length; -   wire 	     first_byte, last_byte; -   reg 		     second_byte, last_byte_d1; -   wire 	     match_crc; -   wire 	     calc_crc = src_rdy_i & dst_rdy_o; -    -   crc crc(.clk(clk), .reset(reset), .clear(last_byte_d1), .data(data_i),  -	   .calc(calc_crc), .crc_out(), .match(match_crc)); - -   assign first_byte = src_rdy_i & dst_rdy_o & sof_i; -   assign last_byte = src_rdy_i & dst_rdy_o & eof_i; -   assign dst_rdy_o = ~last_byte_d1; - -   // stubs for now -   wire 	     match_seq = 1; -   wire 	     match_len = 1; -    -   always @(posedge clk) -     if(reset | clear) -       last_byte_d1 <= 0; -     else  -       last_byte_d1 <= last_byte; - -   always @(posedge clk) -     if(reset | clear) -       begin -	  total <= 0; -	  crc_err <= 0; -	  seq_err <= 0; -	  len_err <= 0; -       end -     else -       if(last_byte_d1) -	 begin -	    total <= total + 1; -	    if(~match_crc) -	      crc_err <= crc_err + 1; -	    else if(~match_seq) -	      seq_err <= seq_err + 1; -	    else if(~match_len) -	      seq_err <= len_err + 1; -	 end -    -endmodule // packet_verifier diff --git a/fpga/usrp2/fifo/packet_verifier32.v b/fpga/usrp2/fifo/packet_verifier32.v deleted file mode 100644 index 3579a9bcf..000000000 --- a/fpga/usrp2/fifo/packet_verifier32.v +++ /dev/null @@ -1,40 +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/>. -// - - - -module packet_verifier32 -  (input clk, input reset, input clear, -   input [35:0] data_i, input src_rdy_i, output dst_rdy_o, -   output [31:0] total, output [31:0] crc_err, output [31:0] seq_err, output [31:0] len_err); - -   wire [7:0] 	 ll_data; -   wire 	 ll_sof, ll_eof, ll_src_rdy, ll_dst_rdy; - 	  -   fifo36_to_ll8 f36_to_ll8 -     (.clk(clk), .reset(reset), .clear(clear), -      .f36_data(data_i), .f36_src_rdy_i(src_rdy_i), .f36_dst_rdy_o(dst_rdy_o), -      .ll_data(ll_data), .ll_sof(ll_sof), .ll_eof(ll_eof), -      .ll_src_rdy(ll_src_rdy), .ll_dst_rdy(ll_dst_rdy)); -    -   packet_verifier pkt_ver -     (.clk(clk), .reset(reset), .clear(clear), -      .data_i(ll_data), .sof_i(ll_sof), .eof_i(ll_eof), -      .src_rdy_i(ll_src_rdy), .dst_rdy_o(ll_dst_rdy), -      .total(total), .crc_err(crc_err), .seq_err(seq_err), .len_err(len_err)); - -endmodule // packet_verifier32 diff --git a/fpga/usrp2/fifo/resp_packet_padder36.v b/fpga/usrp2/fifo/resp_packet_padder36.v deleted file mode 100644 index 18fc18291..000000000 --- a/fpga/usrp2/fifo/resp_packet_padder36.v +++ /dev/null @@ -1,88 +0,0 @@ -// -// Copyright 2011-2012 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/>. -// - -// PAD to NUM LINES - -module resp_packet_padder36 -#( -    parameter NUM_LINES32 = 128 -) -( -    input clk, input reset, - -    //input interface -    input [35:0] data_i, -    input src_rdy_i, -    output dst_rdy_o, - -    //output interface -    output [35:0] data_o, -    output src_rdy_o, -    input dst_rdy_i -); - -    localparam STATE_FWD = 0; -    localparam STATE_PAD = 1; -    reg state; - -    reg [15:0] counter; - -    always @(posedge clk) begin -        if (reset) begin -            counter <= 0; -        end -        else if (src_rdy_o && dst_rdy_i) begin -            if (data_o[33]) counter <= 0; -            else counter <= counter + 1; -        end -    end - -    always @(posedge clk) begin -        if (reset) begin -            state <= STATE_FWD; -        end -        else case(state) - -        STATE_FWD: begin -            if (src_rdy_i && dst_rdy_o && data_i[33] && ~data_o[33]) begin -                state <= STATE_PAD; -            end -        end - -        STATE_PAD: begin -            if (src_rdy_o && dst_rdy_i && data_o[33]) begin -                state <= STATE_FWD; -            end -        end - -        endcase //state -    end - -    //assign data out -    assign data_o[31:0] = (state == STATE_FWD)? data_i[31:0] : {32'b0}; -    wire eof = (counter == (NUM_LINES32-1)); -    assign data_o[35:32] = {data_i[35:34], eof, data_i[32]}; - -    //assign ready -    assign src_rdy_o = (state == STATE_FWD)? src_rdy_i : 1'b1; -    assign dst_rdy_o = (state == STATE_FWD)? dst_rdy_i : 1'b0; - -endmodule // resp_packet_padder36 - - - - diff --git a/fpga/usrp2/fifo/splitter36.v b/fpga/usrp2/fifo/splitter36.v deleted file mode 100644 index d002d7afd..000000000 --- a/fpga/usrp2/fifo/splitter36.v +++ /dev/null @@ -1,85 +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/>. -// - - -// Split packets from a fifo based interface so it goes out identically on two interfaces - -module splitter36 -    ( -        input clk, input rst, input clr, -        input [35:0] inp_data, input inp_valid, output inp_ready, -        output [35:0] out0_data, output out0_valid, input out0_ready, -        output [35:0] out1_data, output out1_valid, input out1_ready -    ); - -    localparam STATE_COPY_BOTH = 0; -    localparam STATE_COPY_ZERO = 1; -    localparam STATE_COPY_ONE = 2; - -    reg [1:0] state; -    reg [35:0] data_reg; - -    assign out0_data = (state == STATE_COPY_BOTH)? inp_data : data_reg; -    assign out1_data = (state == STATE_COPY_BOTH)? inp_data : data_reg; - -    assign out0_valid = -        (state == STATE_COPY_BOTH)? inp_valid : ( -        (state == STATE_COPY_ZERO)? 1'b1      : ( -    1'b0)); - -    assign out1_valid = -        (state == STATE_COPY_BOTH)? inp_valid : ( -        (state == STATE_COPY_ONE)?  1'b1      : ( -    1'b0)); - -    assign inp_ready = (state == STATE_COPY_BOTH)? (out0_ready | out1_ready) : 1'b0; - -    always @(posedge clk) -    if (rst | clr) begin -        state <= STATE_COPY_BOTH; -    end -    else begin -        case (state) - -        STATE_COPY_BOTH: begin -            if ((out0_valid & out0_ready) & ~(out1_valid & out1_ready)) begin -                state <= STATE_COPY_ONE; -            end -            else if (~(out0_valid & out0_ready) & (out1_valid & out1_ready)) begin -                state <= STATE_COPY_ZERO; -            end -            data_reg <= inp_data; -        end - -        STATE_COPY_ZERO: begin -            if (out0_valid & out0_ready) begin -                state <= STATE_COPY_BOTH; -            end -        end - -        STATE_COPY_ONE: begin -            if (out1_valid & out1_ready) begin -                state <= STATE_COPY_BOTH; -            end -        end - -        endcase //state -    end - - - -endmodule //splitter36 diff --git a/fpga/usrp2/fifo/valve36.v b/fpga/usrp2/fifo/valve36.v deleted file mode 100644 index 795fe511e..000000000 --- a/fpga/usrp2/fifo/valve36.v +++ /dev/null @@ -1,46 +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/>. -// - - - -module valve36 -  (input clk, input reset, input clear, -   input shutoff, -   input [35:0] data_i, input src_rdy_i, output dst_rdy_o, -   output [35:0] data_o, output src_rdy_o, input dst_rdy_i); -    -   reg 		 shutoff_int, active; -   wire active_next = (src_rdy_i & dst_rdy_o)? ~data_i[33] : active; - -   assign data_o = data_i; - -   assign dst_rdy_o = shutoff_int ? 1'b1 : dst_rdy_i; -   assign src_rdy_o = shutoff_int ? 1'b0 : src_rdy_i; -    -   always @(posedge clk) -     if(reset | clear) -       active <= 0; -     else -       active <= active_next; -    -   always @(posedge clk) -     if(reset | clear) -       shutoff_int <= 0; -     else if(~active_next) -       shutoff_int <= shutoff; -    -endmodule // valve36  | 
