module delay #(
parameter RST_EN = 0,
parameter DLY_CLK = 1,
parameter DATA_WIDTH = 8
)(
input sys_clk ,
input rst_n ,
input [DATA_WIDTH - 1 : 0] din ,
output [DATA_WIDTH - 1 : 0] dout
);
reg [DATA_WIDTH * DLY_CLK - 1 : 0] dout_shift = 0;
reg [DATA_WIDTH - 1 : 0] dout_temp = 0;
generate
if(DLY_CLK == 1)
begin
if(RST_EN == 1)
begin
always@(posedge sys_clk)
begin
if(!rst_n)
dout_temp <= 0;
else
dout_temp <= din;
end
end
else
begin
always@(posedge sys_clk)
begin
dout_temp <= din;
end
end
assign dout = dout_temp;
end
else
begin
if(RST_EN == 1)
begin
always@(posedge sys_clk)
begin
if(!rst_n)
dout_shift <= 0;
else
dout_shift <= {dout_shift[DATA_WIDTH * (DLY_CLK - 1) - 1 : 0] , din };
end
end
else
begin
always@(posedge sys_clk)
begin
dout_shift <= {dout_shift[DATA_WIDTH * (DLY_CLK - 1) - 1 : 0] , din };
end
end
assign dout = dout_shift[DATA_WIDTH * DLY_CLK - 1 : DATA_WIDTH * (DLY_CLK - 1)];
end
endgenerate
endmodule