summaryrefslogtreecommitdiffstats
path: root/usrp2/fifo/splitter36.v
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-11-22 14:41:14 -0800
committerJosh Blum <josh@joshknows.com>2010-11-23 19:06:59 -0800
commit9633a82509463d3bffcb9e8cae4db66dd4d79812 (patch)
treecfba91b86fee5e9b5176452a665794f9a4050cb6 /usrp2/fifo/splitter36.v
parentb155031c90fb1caaa4aa0e21e0cf2929019a19b6 (diff)
downloaduhd-9633a82509463d3bffcb9e8cae4db66dd4d79812.tar.gz
uhd-9633a82509463d3bffcb9e8cae4db66dd4d79812.tar.bz2
uhd-9633a82509463d3bffcb9e8cae4db66dd4d79812.zip
packet_router: moved dsp framer into a module, added clr to splitter and renamed
Diffstat (limited to 'usrp2/fifo/splitter36.v')
-rw-r--r--usrp2/fifo/splitter36.v68
1 files changed, 68 insertions, 0 deletions
diff --git a/usrp2/fifo/splitter36.v b/usrp2/fifo/splitter36.v
new file mode 100644
index 000000000..ed998b4f5
--- /dev/null
+++ b/usrp2/fifo/splitter36.v
@@ -0,0 +1,68 @@
+
+// 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