From 81970c8b425b55eaed0c10959914e8256cec8873 Mon Sep 17 00:00:00 2001 From: "babintsev.lv" Date: Tue, 21 Jul 2026 16:54:06 +0300 Subject: [PATCH] upd: new TB, sampler refactor --- rtl/sampler/src/sampler.sv | 34 ++--- rtl/sampler/tests/sampler_tb.sv | 246 ++++++++++++++++++-------------- 2 files changed, 153 insertions(+), 127 deletions(-) diff --git a/rtl/sampler/src/sampler.sv b/rtl/sampler/src/sampler.sv index 98f6841..5da3d81 100644 --- a/rtl/sampler/src/sampler.sv +++ b/rtl/sampler/src/sampler.sv @@ -13,18 +13,18 @@ module sampler input [31:0] smp_num, input request, - output logic [DATA_WIDTH*PACK_FACTOR-1:0] m_axis_tdata, - output logic m_axis_tvalid, + output logic [DATA_WIDTH*PACK_FACTOR-1:0] m_axis_tdata, + output logic m_axis_tvalid, output logic done ); - + // WARNING: number of samples smp_num must be multiple of PACK_FACTOR + // Last (smp_num % PACK_FACTOR) will be lost and not transmitted logic [DATA_WIDTH-1:0] data_converted; logic [31:0] smp_num_reg, cnt_smp_num; - logic synced; + logic synced; logic [$clog2(PACK_FACTOR):0] pack_cnt; always_comb begin - data_converted = '0; if (PROCESS_MODE) begin if (out_of_range) begin data_converted = {~data_in[DATA_WIDTH-1], {(DATA_WIDTH-1){data_in[DATA_WIDTH-1]}}}; @@ -39,7 +39,12 @@ module sampler end end end - + + initial begin + synced = 0; + m_axis_tdata = '0; + m_axis_tvalid = 0; + end always_ff @(posedge clk_in) begin if (rst) begin @@ -51,10 +56,9 @@ module sampler synced <= 0; done <= 0; end else begin - m_axis_tvalid <= 0; if (!synced) begin if (done && request) begin - synced <= 1; + synced <= 1; done <= 0; cnt_smp_num <= 0; smp_num_reg <= smp_num; @@ -63,23 +67,21 @@ module sampler end end else begin if (cnt_smp_num != smp_num_reg) begin - cnt_smp_num <= cnt_smp_num +1; + cnt_smp_num++; m_axis_tdata[pack_cnt*DATA_WIDTH +: DATA_WIDTH] <= data_converted; if (pack_cnt == PACK_FACTOR-1) begin pack_cnt <= 0; m_axis_tvalid <= 1; end else begin - pack_cnt <= pack_cnt + 1; + pack_cnt++; + m_axis_tvalid <= 0; end end else begin - cnt_smp_num <= '0; - pack_cnt <= '0; + pack_cnt <= '0; synced <= 0; - done <= 1; - m_axis_tdata <= '0; + m_axis_tvalid <= 0; end end end - end - + end endmodule diff --git a/rtl/sampler/tests/sampler_tb.sv b/rtl/sampler/tests/sampler_tb.sv index 07d6176..e6c9988 100644 --- a/rtl/sampler/tests/sampler_tb.sv +++ b/rtl/sampler/tests/sampler_tb.sv @@ -3,15 +3,17 @@ module sampler_tb; localparam DATA_WIDTH = 12; - localparam PACK_FACTOR = 1; + localparam PACK_FACTOR = 7; localparam PROCESS_MODE = 0; localparam CLK_PERIOD = 15.3846; + localparam OTR_OFFSET = 0; logic clk; - logic rst; + logic rst_dut; + logic rst_gen; - logic [DATA_WIDTH-1:0] data_in; - logic out_of_range; + wire [DATA_WIDTH-1:0] data_in; + wire out_of_range; logic [31:0] smp_num; @@ -21,15 +23,13 @@ module sampler_tb; logic [DATA_WIDTH*PACK_FACTOR-1:0] m_axis_tdata; logic m_axis_tvalid; - int received_count; - sampler #( .DATA_WIDTH (DATA_WIDTH), .PACK_FACTOR (PACK_FACTOR), .PROCESS_MODE(PROCESS_MODE) ) dut ( .clk_in (clk), - .rst (rst), + .rst (rst_dut), .data_in (data_in), .out_of_range (out_of_range), @@ -54,122 +54,97 @@ module sampler_tb; // ===================================================== // RESET // ===================================================== - initial begin - rst = 1; - data_in = 0; - out_of_range = 0; - done = 0; - smp_num = 0; - - repeat(5) @(posedge clk); - rst = 0; - end - - // ===================================================== - // OUTPUT COUNTER - // ===================================================== - always @(posedge clk) begin - if (m_axis_tvalid) - received_count++; - end + task automatic reset_dut(); + @(posedge clk); + rst_dut = 1; + @(posedge clk); + rst_dut = 0; + endtask // ===================================================== // FEED DATA // ===================================================== - task automatic feed_data_stream( - input int num_words, - input bit random_data, - input bit random_out_of_range + triangle_wave_gen #( + .DATA_WIDTH(DATA_WIDTH), + .OFFSET(OTR_OFFSET), // offset of bits from '0 and '1 for OTR + .STEP(1) // LSB bit per clock + ) signal_gen ( + .clk(clk), + .rst(rst_gen), + .signal(data_in), + .otr(out_of_range) ); - logic [DATA_WIDTH-1:0] value; - bit oor; - begin - value = 1; - - for (int i = 0; i < num_words; i++) begin - - if (random_data) - value = $urandom_range(1, (1<