/* * sig_delay.c * * Signal delay line - runtime configurable length * * Copyright (C) 2018 sysmocom - systems for mobile communications GmbH * * vim: ts=4 sw=4 */ `ifdef SIM `default_nettype none `endif module sig_delay #( parameter integer WIDTH = 12 )( input wire data_valid, input wire [WIDTH-1:0] data_in, output wire [WIDTH-1:0] data_out, input wire [14:0] delay, input wire clk, input wire rst ); // Signals // ------- reg [14:0] wr_addr; reg [14:0] rd_addr; wire ce; // Control // ------- assign ce = data_valid; always @(posedge clk) begin if (rst) begin wr_addr <= 0; rd_addr <= 0; end else if (ce) begin wr_addr <= wr_addr + 1; rd_addr <= wr_addr - delay; end end // Storage // ------- genvar i; generate for (i=0; i