Squashed B200 FPGA Source. Code from Josh Blum, Ian Buckley, and Matt Ettus.
Original-commit: 0df4b801a34697f2058b4a7b95e08d2a0576c9db
This commit is contained in:
@@ -0,0 +1,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
|
||||
Reference in New Issue
Block a user