blob: c6873bd14d5ca6eb6e41f1ce5f4e1fb89e24db08 [file] [log] [blame] [edit]
module srl_init_tester #
(
parameter [255:0] PATTERN = 256'hFE1AB3FE7610D3D205D9A526C103C40F6477E986F53C53FA663A9CE45E851D30,
parameter SRL_LENGTH = 32
)
(
input wire clk,
input wire rst,
input wire ce,
output reg srl_sh,
output wire [SRL_BITS-1:0] srl_a,
output wire srl_d,
input wire srl_q,
output reg error
);
// ============================================================================
// ROM
wire [7:0] rom_adr;
wire rom_dat;
ROM #(.CONTENT(PATTERN)) rom
(
.clk (clk),
.adr (rom_adr),
.dat (rom_dat)
);
// ============================================================================
// Control
localparam SRL_BITS = $clog2(SRL_LENGTH);
// Bit counter
reg[SRL_BITS-1:0] bit_cnt;
always @(posedge clk)
if (rst)
bit_cnt <= SRL_LENGTH - 1;
else if (ce)
bit_cnt <= bit_cnt - 1;
// Data readout
assign rom_adr = bit_cnt;
// SRL32 control
assign srl_a = SRL_LENGTH - 1;
assign srl_d = srl_q;
initial srl_sh <= 1'b0;
always @(posedge clk)
srl_sh <= ce & !rst;
// Error check
initial error <= 1'b0;
always @(posedge clk)
if (rst)
error <= 1'b0;
else if(ce)
error <= rom_dat ^ srl_q;
endmodule