1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
`timescale 1ns/1ps
module new_rx_tb();
reg clk = 0;
reg reset = 1;
always #10 clk = ~clk;
initial $dumpfile("new_rx_tb.vcd");
initial $dumpvars(0,new_rx_tb);
initial
begin
#1000 reset = 0;
#30000;
$finish;
end
reg [7:0] set_addr;
reg [31:0] set_data;
reg set_stb = 1'b0;
reg [63:0] vita_time;
reg [31:0] sample;
reg strobe;
wire run, full;
wire [63:0] err_tdata;
wire err_tlast, err_tvalid, err_tready;
wire [63:0] o_tdata;
wire o_tlast, o_tvalid;
reg o_tready;
task send_command;
input [63:0] send_time;
input send_at;
input chain;
input reload;
input stop;
input [31:0] len;
begin
set_stb <= 1;
set_addr <= 0;
set_data <= { send_at, chain, reload, stop, len };
@(posedge clk);
set_stb <= 1;
set_addr <= 1;
set_data <= send_time[63:32];
@(posedge clk);
set_stb <= 1;
set_addr <= 2;
set_data <= send_time[31:0];
@(posedge clk);
set_stb <= 0;
@(posedge clk);
end
endtask // send_command
initial
begin
o_tready <= 0;
while(reset)
@(posedge clk);
set_stb <= 1; // Set Max Length of Packet
set_addr <= 8;
set_data <= 18;
@(posedge clk);
set_stb <= 1; // Set SID
set_addr <= 9;
set_data <= 32'hF00D_1234;
@(posedge clk);
send_command(64'h100/*time*/, 1/*send at*/, 0/*chain*/, 0/*reload*/,0/*stop*/,150/*len*/);
send_command(64'h200/*time*/, 1/*send at*/, 0/*chain*/, 0/*reload*/,0/*stop*/,4/*len*/);
//send_command(64'h100/*time*/, 1/*send at*/, 0/*chain*/, 0/*reload*/,0/*stop*/,5/*len*/);
#8000;
o_tready <= 1;
end // initial begin
always @(posedge clk)
if(reset)
vita_time <= 0;
else
vita_time <= vita_time + 1;
new_rx_control #(.BASE(0)) rx_control
(.clk(clk), .reset(reset), .clear(1'b0),
.set_stb(set_stb), .set_addr(set_addr), .set_data(set_data),
.vita_time(vita_time),
.run(run), .eob(eob), .strobe(strobe), .full(full),
.err_tdata(err_tdata), .err_tlast(err_tlast), .err_tvalid(err_tvalid), .err_tready(err_tready),
.debug());
new_rx_framer #(.BASE(8)) rx_framer
(.clk(clk), .reset(reset), .clear(1'b0),
.set_stb(set_stb), .set_addr(set_addr), .set_data(set_data),
.vita_time(vita_time),
.strobe(strobe), .sample(sample), .run(run), .eob(eob), .full(full),
.o_tdata(o_tdata), .o_tlast(o_tlast), .o_tvalid(o_tvalid), .o_tready(o_tready)
);
always @*
strobe <= run;
/*
always @(posedge clk)
if(reset)
sample <= 0;
else if(run)
sample <= sample + 1;
*/
always @* sample <= vita_time[31:0];
always @(posedge clk)
if(o_tvalid & o_tready)
if(o_tlast)
$display("%x\tLAST\n",o_tdata);
else
$display("%x",o_tdata);
assign err_tready = 1;
always @(posedge clk)
if(err_tvalid & err_tready)
if(err_tlast)
$display("\t\t\t\tERR LAST \t%x",err_tdata);
else
$display("\t\t\t\tERR\t\t%x",err_tdata);
endmodule // new_rx_tb
|