rtl: sampler ready

This commit is contained in:
otroubi
2026-04-01 11:46:59 +03:00
parent aa1d45fe15
commit 221cb055f1
4 changed files with 259 additions and 0 deletions

View File

@ -0,0 +1,72 @@
`timescale 1ns / 1ps
module sampler
#(
parameter DATA_WIDTH = 12,
parameter PACK_FACTOR = 3,
parameter PROCESS_MODE = 1
)
(
input clk_in,
input rst,
input [DATA_WIDTH-1:0] data_in,
input out_of_range,
output logic [DATA_WIDTH*PACK_FACTOR-1:0] m_axis_tdata,
output logic m_axis_tvalid
);
logic [DATA_WIDTH-1:0] data_converted;
logic out_of_range_reg;
always @( posedge clk_in) begin
if (rst) begin
data_converted <= '0;
end else begin
out_of_range_reg <= out_of_range;
if (PROCESS_MODE) begin
if (data_in == 12'b100000000000) begin
data_converted <= data_in;
end else begin
data_converted <= data_in[DATA_WIDTH-1] ? {1'b1, (~data_in[DATA_WIDTH-2:0] + 1'b1)} : data_in;
end
end else begin
data_converted <= data_in;
end
end
end
logic [DATA_WIDTH*PACK_FACTOR-1:0] buffer;
logic buffer_ready;
logic [$clog2(PACK_FACTOR):0] cnt;
always @(posedge clk_in) begin
if (rst) begin
buffer <= '0;
cnt <= -1; //
buffer_ready <= 0;
end
else begin
buffer_ready <= 0;
if (!out_of_range_reg) begin
buffer <= {buffer[DATA_WIDTH*(PACK_FACTOR-1)-1:0], data_converted};
if (cnt == PACK_FACTOR-1) begin
cnt <= 0;
buffer_ready <= 1;
buffer <= {buffer[DATA_WIDTH*(PACK_FACTOR-1)-1:0], data_converted};
end
else begin
cnt <= cnt + 1;
end
end
end
end
assign m_axis_tdata = buffer;
assign m_axis_tvalid = buffer_ready;
endmodule