| 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 | |