Revision 88cc06c1
| b/usrp2/gpif/gpif.v | ||
|---|---|---|
| 61 | 61 |
.ctrl_o(ctrl_data), .ctrl_src_rdy_o(ctrl_src_rdy), .ctrl_dst_rdy_i(ctrl_dst_rdy), |
| 62 | 62 |
.debug(debug_wr) ); |
| 63 | 63 |
|
| 64 |
// join vita packets which are longer than one frame, drop frame padding |
|
| 65 |
wire [18:0] refr_data; |
|
| 66 |
wire refr_src_rdy, refr_dst_rdy; |
|
| 67 |
|
|
| 68 |
packet_reframer tx_packet_reframer |
|
| 69 |
(.clk(fifo_clk), .reset(fifo_rst), .clear(clear_tx), |
|
| 70 |
.data_i(tx19_data), .src_rdy_i(tx19_src_rdy), .dst_rdy_o(tx19_dst_rdy), |
|
| 71 |
.data_o(refr_data), .src_rdy_o(refr_src_rdy), .dst_rdy_i(refr_dst_rdy)); |
|
| 72 |
|
|
| 64 | 73 |
fifo19_to_fifo36 #(.LE(1)) f19_to_f36 |
| 65 | 74 |
(.clk(fifo_clk), .reset(fifo_rst), .clear(0), |
| 66 |
.f19_datain(tx19_data), .f19_src_rdy_i(tx19_src_rdy), .f19_dst_rdy_o(tx19_dst_rdy),
|
|
| 75 |
.f19_datain(refr_data), .f19_src_rdy_i(refr_src_rdy), .f19_dst_rdy_o(refr_dst_rdy),
|
|
| 67 | 76 |
.f36_dataout(tx36_data), .f36_src_rdy_o(tx36_src_rdy), .f36_dst_rdy_i(tx36_dst_rdy)); |
| 68 | 77 |
|
| 69 | 78 |
fifo_cascade #(.WIDTH(36), .SIZE(TXFIFOSIZE)) tx_fifo36 |
| b/usrp2/gpif/gpif_wr_tb.v | ||
|---|---|---|
| 26 | 26 |
initial #1000 sys_rst = 0; |
| 27 | 27 |
always #64 gpif_clk <= ~gpif_clk; |
| 28 | 28 |
always #47.9 sys_clk <= ~sys_clk; |
| 29 |
|
|
| 30 |
wire [18:0] data_int; |
|
| 31 |
wire src_rdy_int, dst_rdy_int; |
|
| 29 | 32 |
|
| 30 | 33 |
gpif_wr gpif_write |
| 31 | 34 |
(.gpif_clk(gpif_clk), .gpif_rst(gpif_rst), |
| ... | ... | |
| 33 | 36 |
.gpif_full_d(DF), .gpif_full_c(CF), |
| 34 | 37 |
|
| 35 | 38 |
.sys_clk(sys_clk), .sys_rst(sys_rst), |
| 36 |
.data_o(data_o), .src_rdy_o(src_rdy), .dst_rdy_i(dst_rdy),
|
|
| 39 |
.data_o(data_int), .src_rdy_o(src_rdy_int), .dst_rdy_i(dst_rdy_int),
|
|
| 37 | 40 |
.ctrl_o(ctrl_o), .ctrl_src_rdy_o(ctrl_src_rdy), .ctrl_dst_rdy_i(ctrl_dst_rdy) ); |
| 38 | 41 |
|
| 42 |
packet_reframer tx_packet_reframer |
|
| 43 |
(.clk(sys_clk), .reset(sys_rst), .clear(0), |
|
| 44 |
.data_i(data_int), .src_rdy_i(src_rdy_int), .dst_rdy_o(dst_rdy_int), |
|
| 45 |
.data_o(data_o), .src_rdy_o(src_rdy), .dst_rdy_i(dst_rdy)); |
|
| 46 |
|
|
| 39 | 47 |
always @(posedge sys_clk) |
| 40 | 48 |
if(ctrl_src_rdy & ctrl_dst_rdy) |
| 41 | 49 |
$display("CTRL: %x",ctrl_o);
|
| ... | ... | |
| 56 | 64 |
repeat (1) |
| 57 | 65 |
begin |
| 58 | 66 |
WR <= 1; |
| 59 |
gpif_data <= 150; // Length
|
|
| 67 |
gpif_data <= 10; // Length |
|
| 60 | 68 |
@(posedge gpif_clk); |
| 61 | 69 |
gpif_data <= 16'h00; |
| 62 | 70 |
@(posedge gpif_clk); |
| ... | ... | |
| 69 | 77 |
repeat (20) |
| 70 | 78 |
@(posedge gpif_clk); |
| 71 | 79 |
WR <= 1; |
| 72 |
gpif_data <= 16'hFF;
|
|
| 80 |
gpif_data <= 16'h5;
|
|
| 73 | 81 |
@(posedge gpif_clk); |
| 74 | 82 |
repeat(254) |
| 75 | 83 |
begin |
| 76 | 84 |
gpif_data <= gpif_data - 1; |
| 77 | 85 |
@(posedge gpif_clk); |
| 78 | 86 |
end |
| 79 |
|
|
| 80 | 87 |
end |
| 81 | 88 |
end // initial begin |
| 82 | 89 |
|
| b/usrp2/gpif/packet_reframer.v | ||
|---|---|---|
| 1 |
|
|
| 2 |
// Join vita packets longer than one GPIF frame, drop padding on short frames |
|
| 3 |
|
|
| 4 |
module packet_reframer |
|
| 5 |
(input clk, input reset, input clear, |
|
| 6 |
input [18:0] data_i, |
|
| 7 |
input src_rdy_i, |
|
| 8 |
output dst_rdy_o, |
|
| 9 |
output [18:0] data_o, |
|
| 10 |
output src_rdy_o, |
|
| 11 |
input dst_rdy_i); |
|
| 12 |
|
|
| 13 |
reg [1:0] state; |
|
| 14 |
reg [15:0] length; |
|
| 15 |
|
|
| 16 |
localparam RF_IDLE = 0; |
|
| 17 |
localparam RF_PKT = 1; |
|
| 18 |
localparam RF_DUMP = 2; |
|
| 19 |
|
|
| 20 |
always @(posedge clk) |
|
| 21 |
if(reset | clear) |
|
| 22 |
state <= 0; |
|
| 23 |
else |
|
| 24 |
if(src_rdy_i & dst_rdy_i) |
|
| 25 |
case(state) |
|
| 26 |
RF_IDLE : |
|
| 27 |
begin |
|
| 28 |
length <= {data_i[14:0],1'b0};
|
|
| 29 |
state <= RF_PKT; |
|
| 30 |
end |
|
| 31 |
RF_PKT : |
|
| 32 |
begin |
|
| 33 |
if(length == 2) |
|
| 34 |
if(data_i[17]) |
|
| 35 |
state <= RF_IDLE; |
|
| 36 |
else |
|
| 37 |
state <= RF_DUMP; |
|
| 38 |
else |
|
| 39 |
length <= length - 1; |
|
| 40 |
end |
|
| 41 |
RF_DUMP : |
|
| 42 |
if(data_i[17]) |
|
| 43 |
state <= RF_IDLE; |
|
| 44 |
default : |
|
| 45 |
state<= RF_IDLE; |
|
| 46 |
endcase // case (state) |
|
| 47 |
|
|
| 48 |
assign dst_rdy_o = dst_rdy_i; // this is a little pessimistic but ok |
|
| 49 |
assign src_rdy_o = src_rdy_i & (state != RF_DUMP); |
|
| 50 |
|
|
| 51 |
wire occ_out = 0; |
|
| 52 |
wire eof_out = (state == RF_PKT) & (length == 2); |
|
| 53 |
wire sof_out = (state == RF_IDLE); |
|
| 54 |
wire [15:0] data_out = data_i[15:0]; |
|
| 55 |
assign data_o = {occ_out, eof_out, sof_out, data_out};
|
|
| 56 |
|
|
| 57 |
|
|
| 58 |
endmodule // packet_reframer |
|
| 59 |
|
|
| 60 |
|
|
| 61 |
|
|
| 62 |
|
|
Also available in: Unified diff