Files
MM7020/sim/tb_enc_control.v
2024-07-19 14:09:20 +08:00

111 lines
2.7 KiB
Verilog

`timescale 1ns / 1ns
module tb_enc_control ();
reg clk = 1;
reg rst = 1;
always #1 clk <= ~clk;
reg intr = 0;
reg s_axis_fifo_tvalid = 1'b0;
wire s_axis_fifo_tready;
reg [31:0] s_axis_fifo_tdata;
reg [31:0] data_src_count;
wire enc_dout_intr;
wire enc_dout_valid;
wire [15:0] enc_dout;
reg fifo_enc_out_rd_en;
wire [31:0] fifo_enc_out_dout_map;
wire fifo_enc_out_empty;
reg [ 1:0] cnt_div = 0;
wire clk_div;
assign enc_dout_valid = ~fifo_enc_out_empty;
assign clk_div = cnt_div[1];
initial begin
#100 rst <= 1'b0;
end
reg [31:0] cnt_start;
always @(posedge clk) begin
if (rst) begin
cnt_start <= 0;
s_axis_fifo_tvalid <= 0;
end
else if (cnt_start < 70) begin
cnt_start <= cnt_start + 1;
s_axis_fifo_tvalid <= 0;
end
else if (cnt_start < 1500) begin
cnt_start <= cnt_start + 1;
s_axis_fifo_tvalid <= 1;
end
else if (cnt_start < 25000) begin
cnt_start <= cnt_start + 1;
s_axis_fifo_tvalid <= 0;
end
else if (cnt_start < 50000) begin
cnt_start <= cnt_start + 1;
s_axis_fifo_tvalid <= 1;
end
else begin
s_axis_fifo_tvalid <= 0;
end
end
always @(posedge clk) begin
if (rst) begin
data_src_count <= 0;
s_axis_fifo_tdata <= $random();
end
else begin
if (s_axis_fifo_tready) begin
s_axis_fifo_tdata <= $random();
end
data_src_count <= 1000;
end
end
enc_control u_enc_control (
.clk (clk),
.rst (rst),
.s_axis_fifo_tvalid (s_axis_fifo_tvalid),
.s_axis_fifo_tready (s_axis_fifo_tready),
.s_axis_fifo_tdata (s_axis_fifo_tdata),
.data_src_count (data_src_count),
.fifo_enc_out_rd_clk (clk_div),
.fifo_enc_out_rd_en (fifo_enc_out_rd_en),
.fifo_enc_out_dout_map(fifo_enc_out_dout_map),
.fifo_enc_out_empty (fifo_enc_out_empty)
);
reg [1:0] cnt_rd;
always @(posedge clk_div) begin
if (rst) begin
cnt_rd <= 0;
end
else begin
if (enc_dout_valid) cnt_rd <= cnt_rd + 1;
end
end
always @(posedge clk_div) begin
if (cnt_rd == 2'b11) fifo_enc_out_rd_en <= 1;
else fifo_enc_out_rd_en <= 0;
end
always @(posedge clk) begin
cnt_div <= cnt_div + 1;
end
endmodule