📄 aramb36_internal.v
字号:
(WRITE_WIDTH_A == 72) ? 64 : 64; localparam wb_width = (WRITE_WIDTH_B == 1) ? 1 : (WRITE_WIDTH_B == 2) ? 2 : (WRITE_WIDTH_B == 4) ? 4 : (WRITE_WIDTH_B == 9) ? 8 : (WRITE_WIDTH_B == 18) ? 16 : (WRITE_WIDTH_B == 36) ? 32 : (WRITE_WIDTH_B == 72) ? 64 : 64; localparam wa_widthp = (WRITE_WIDTH_A == 9) ? 1 : (WRITE_WIDTH_A == 18) ? 2 : (WRITE_WIDTH_A == 36) ? 4 : (WRITE_WIDTH_A == 72) ? 8 : 8; localparam wb_widthp = (WRITE_WIDTH_B == 9) ? 1 : (WRITE_WIDTH_B == 18) ? 2 : (WRITE_WIDTH_B == 36) ? 4 : (WRITE_WIDTH_B == 72) ? 8 : 8; localparam ra_width = (READ_WIDTH_A == 1) ? 1 : (READ_WIDTH_A == 2) ? 2 : (READ_WIDTH_A == 4) ? 4 : (READ_WIDTH_A == 9) ? 8 : (READ_WIDTH_A == 18) ? 16 : (READ_WIDTH_A == 36) ? 32 : (READ_WIDTH_A == 72) ? 64 : 64; localparam rb_width = (READ_WIDTH_B == 1) ? 1 : (READ_WIDTH_B == 2) ? 2 : (READ_WIDTH_B == 4) ? 4 : (READ_WIDTH_B == 9) ? 8 : (READ_WIDTH_B == 18) ? 16 : (READ_WIDTH_B == 36) ? 32 : (READ_WIDTH_B == 72) ? 64 : 64; localparam ra_widthp = (READ_WIDTH_A == 9) ? 1 : (READ_WIDTH_A == 18) ? 2 : (READ_WIDTH_A == 36) ? 4 : (READ_WIDTH_A == 72) ? 8 : 8; localparam rb_widthp = (READ_WIDTH_B == 9) ? 1 : (READ_WIDTH_B == 18) ? 2 : (READ_WIDTH_B == 36) ? 4 : (READ_WIDTH_B == 72) ? 8 : 8; localparam col_addr_lsb = (widest_width == 1) ? 0 : (widest_width == 2) ? 1 : (widest_width == 4) ? 2 : (widest_width == 9) ? 3 : (widest_width == 18) ? 4 : (widest_width == 36) ? 5 : (widest_width == 72) ? 6 : 0; localparam width = (widest_width == 1) ? 1 : (widest_width == 2) ? 2 : (widest_width == 4) ? 4 : (widest_width == 9) ? 8 : (widest_width == 18) ? 16 : (widest_width == 36) ? 32 : (widest_width == 72) ? 64 : 64; localparam widthp = (widest_width == 9) ? 1 : (widest_width == 18) ? 2 : (widest_width == 36) ? 4 : (widest_width == 72) ? 8 : 8; localparam r_addra_lbit_124 = (READ_WIDTH_A == 1) ? 0 : (READ_WIDTH_A == 2) ? 1 : (READ_WIDTH_A == 4) ? 2 : (READ_WIDTH_A == 9) ? 3 : (READ_WIDTH_A == 18) ? 4 : (READ_WIDTH_A == 36) ? 5 : (READ_WIDTH_A == 72) ? 6 : 10; localparam r_addrb_lbit_124 = (READ_WIDTH_B == 1) ? 0 : (READ_WIDTH_B == 2) ? 1 : (READ_WIDTH_B == 4) ? 2 : (READ_WIDTH_B == 9) ? 3 : (READ_WIDTH_B == 18) ? 4 : (READ_WIDTH_B == 36) ? 5 : (READ_WIDTH_B == 72) ? 6 : 10; localparam addra_lbit_124 = (WRITE_WIDTH_A == 1) ? 0 : (WRITE_WIDTH_A == 2) ? 1 : (WRITE_WIDTH_A == 4) ? 2 : (WRITE_WIDTH_A == 9) ? 3 : (WRITE_WIDTH_A == 18) ? 4 : (WRITE_WIDTH_A == 36) ? 5 : (WRITE_WIDTH_A == 72) ? 6 : 10; localparam addrb_lbit_124 = (WRITE_WIDTH_B == 1) ? 0 : (WRITE_WIDTH_B == 2) ? 1 : (WRITE_WIDTH_B == 4) ? 2 : (WRITE_WIDTH_B == 9) ? 3 : (WRITE_WIDTH_B == 18) ? 4 : (WRITE_WIDTH_B == 36) ? 5 : (WRITE_WIDTH_B == 72) ? 6 : 10; localparam addra_bit_124 = (WRITE_WIDTH_A == 1 && widest_width == 2) ? 0 : (WRITE_WIDTH_A == 1 && widest_width == 4) ? 1 : (WRITE_WIDTH_A == 1 && widest_width == 9) ? 2 : (WRITE_WIDTH_A == 1 && widest_width == 18) ? 3 : (WRITE_WIDTH_A == 1 && widest_width == 36) ? 4 : (WRITE_WIDTH_A == 1 && widest_width == 72) ? 5 : (WRITE_WIDTH_A == 2 && widest_width == 4) ? 1 : (WRITE_WIDTH_A == 2 && widest_width == 9) ? 2 : (WRITE_WIDTH_A == 2 && widest_width == 18) ? 3 : (WRITE_WIDTH_A == 2 && widest_width == 36) ? 4 : (WRITE_WIDTH_A == 2 && widest_width == 72) ? 5 : (WRITE_WIDTH_A == 4 && widest_width == 9) ? 2 : (WRITE_WIDTH_A == 4 && widest_width == 18) ? 3 : (WRITE_WIDTH_A == 4 && widest_width == 36) ? 4 : (WRITE_WIDTH_A == 4 && widest_width == 72) ? 5 : 10; localparam r_addra_bit_124 = (READ_WIDTH_A == 1 && widest_width == 2) ? 0 : (READ_WIDTH_A == 1 && widest_width == 4) ? 1 : (READ_WIDTH_A == 1 && widest_width == 9) ? 2 : (READ_WIDTH_A == 1 && widest_width == 18) ? 3 : (READ_WIDTH_A == 1 && widest_width == 36) ? 4 : (READ_WIDTH_A == 1 && widest_width == 72) ? 5 : (READ_WIDTH_A == 2 && widest_width == 4) ? 1 : (READ_WIDTH_A == 2 && widest_width == 9) ? 2 : (READ_WIDTH_A == 2 && widest_width == 18) ? 3 : (READ_WIDTH_A == 2 && widest_width == 36) ? 4 : (READ_WIDTH_A == 2 && widest_width == 72) ? 5 : (READ_WIDTH_A == 4 && widest_width == 9) ? 2 : (READ_WIDTH_A == 4 && widest_width == 18) ? 3 : (READ_WIDTH_A == 4 && widest_width == 36) ? 4 : (READ_WIDTH_A == 4 && widest_width == 72) ? 5 : 10; localparam addrb_bit_124 = (WRITE_WIDTH_B == 1 && widest_width == 2) ? 0 : (WRITE_WIDTH_B == 1 && widest_width == 4) ? 1 : (WRITE_WIDTH_B == 1 && widest_width == 9) ? 2 : (WRITE_WIDTH_B == 1 && widest_width == 18) ? 3 : (WRITE_WIDTH_B == 1 && widest_width == 36) ? 4 : (WRITE_WIDTH_B == 1 && widest_width == 72) ? 5 : (WRITE_WIDTH_B == 2 && widest_width == 4) ? 1 : (WRITE_WIDTH_B == 2 && widest_width == 9) ? 2 : (WRITE_WIDTH_B == 2 && widest_width == 18) ? 3 : (WRITE_WIDTH_B == 2 && widest_width == 36) ? 4 : (WRITE_WIDTH_B == 2 && widest_width == 72) ? 5 : (WRITE_WIDTH_B == 4 && widest_width == 9) ? 2 : (WRITE_WIDTH_B == 4 && widest_width == 18) ? 3 : (WRITE_WIDTH_B == 4 && widest_width == 36) ? 4 : (WRITE_WIDTH_B == 4 && widest_width == 72) ? 5 : 10; localparam r_addrb_bit_124 = (READ_WIDTH_B == 1 && widest_width == 2) ? 0 : (READ_WIDTH_B == 1 && widest_width == 4) ? 1 : (READ_WIDTH_B == 1 && widest_width == 9) ? 2 : (READ_WIDTH_B == 1 && widest_width == 18) ? 3 : (READ_WIDTH_B == 1 && widest_width == 36) ? 4 : (READ_WIDTH_B == 1 && widest_width == 72) ? 5 : (READ_WIDTH_B == 2 && widest_width == 4) ? 1 : (READ_WIDTH_B == 2 && widest_width == 9) ? 2 : (READ_WIDTH_B == 2 && widest_width == 18) ? 3 : (READ_WIDTH_B == 2 && widest_width == 36) ? 4 : (READ_WIDTH_B == 2 && widest_width == 72) ? 5 : (READ_WIDTH_B == 4 && widest_width == 9) ? 2 : (READ_WIDTH_B == 4 && widest_width == 18) ? 3 : (READ_WIDTH_B == 4 && widest_width == 36) ? 4 : (READ_WIDTH_B == 4 && widest_width == 72) ? 5 : 10; localparam addra_bit_8 = (WRITE_WIDTH_A == 9 && widest_width == 18) ? 3 : (WRITE_WIDTH_A == 9 && widest_width == 36) ? 4 : (WRITE_WIDTH_A == 9 && widest_width == 72) ? 5 : 10; localparam addra_bit_16 = (WRITE_WIDTH_A == 18 && widest_width == 36) ? 4 : (WRITE_WIDTH_A == 18 && widest_width == 72) ? 5 : 10; localparam addra_bit_32 = (WRITE_WIDTH_A == 36 && widest_width == 72) ? 5 : 10; localparam r_addra_bit_8 = (READ_WIDTH_A == 9 && widest_width == 18) ? 3 : (READ_WIDTH_A == 9 && widest_width == 36) ? 4 : (READ_WIDTH_A == 9 && widest_width == 72) ? 5 : 10; localparam r_addra_bit_16 = (READ_WIDTH_A == 18 && widest_width == 36) ? 4 : (READ_WIDTH_A == 18 && widest_width == 72) ? 5 : 10; localparam r_addra_bit_32 = (READ_WIDTH_A == 36 && widest_width == 72) ? 5 : 10; localparam addrb_bit_8 = (WRITE_WIDTH_B == 9 && widest_width == 18) ? 3 : (WRITE_WIDTH_B == 9 && widest_width == 36) ? 4 : (WRITE_WIDTH_B == 9 && widest_width == 72) ? 5 : 10; localparam addrb_bit_16 = (WRITE_WIDTH_B == 18 && widest_width == 36) ? 4 : (WRITE_WIDTH_B == 18 && widest_width == 72) ? 5 : 10; localparam addrb_bit_32 = (WRITE_WIDTH_B == 36 && widest_width == 72) ? 5 : 10; localparam r_addrb_bit_8 = (READ_WIDTH_B == 9 && widest_width == 18) ? 3 : (READ_WIDTH_B == 9 && widest_width == 36) ? 4 : (READ_WIDTH_B == 9 && widest_width == 72) ? 5 : 10; localparam r_addrb_bit_16 = (READ_WIDTH_B == 18 && widest_width == 36) ? 4 : (READ_WIDTH_B == 18 && widest_width == 72) ? 5 : 10; localparam r_addrb_bit_32 = (READ_WIDTH_B == 36 && widest_width == 72) ? 5 : 10; localparam mem_size1 = (BRAM_SIZE == 18) ? 16384 : (BRAM_SIZE == 36) ? 32768 : 32768; localparam mem_size2 = (BRAM_SIZE == 18) ? 8192 : (BRAM_SIZE == 36) ? 16384 : 16384; localparam mem_size4 = (BRAM_SIZE == 18) ? 4096 : (BRAM_SIZE == 36) ? 8192 : 8192; localparam mem_size9 = (BRAM_SIZE == 18) ? 2048 : (BRAM_SIZE == 36) ? 4096 : 4096; localparam mem_size18 = (BRAM_SIZE == 18) ? 1024 : (BRAM_SIZE == 36) ? 2048 : 2048; localparam mem_size36 = (BRAM_SIZE == 18) ? 512 : (BRAM_SIZE == 36) ? 1024 : 1024; localparam mem_size72 = (BRAM_SIZE == 18) ? 0 : (BRAM_SIZE == 36) ? 512 : 512; localparam mem_depth = (widest_width == 1) ? mem_size1 : (widest_width == 2) ? mem_size2 : (widest_width == 4) ? mem_size4 : (widest_width == 9) ? mem_size9 :(widest_width == 18) ? mem_size18 : (widest_width == 36) ? mem_size36 : (widest_width == 72) ? mem_size72 : 32768; localparam memp_depth = (widest_width == 9) ? mem_size9 :(widest_width == 18) ? mem_size18 : (widest_width == 36) ? mem_size36 : (widest_width == 72) ? mem_size72 : 4096; reg [widest_width-1:0] tmp_mem [mem_depth-1:0]; reg [width-1:0] mem [mem_depth-1:0]; reg [widthp-1:0] memp [memp_depth-1:0]; integer count, countp, init_mult, initp_mult, large_width; integer count1, countp1, i, i1, i_p, i_mem; reg addra_in_15_reg_bram, addrb_in_15_reg_bram; reg addra_in_15_reg, addrb_in_15_reg; reg addra_in_15_reg1, addrb_in_15_reg1; reg junk1; reg [1:0] wr_mode_a, wr_mode_b, cascade_a, cascade_b; reg [63:0] doa_out = 64'b0, doa_buf = 64'b0, doa_outreg = 64'b0, doa_out_out = 64'b0; reg [31:0] dob_out = 32'b0, dob_buf = 32'b0, dob_outreg = 32'b0, dob_out_out = 32'b0; reg [3:0] dopb_out = 4'b0, dopb_buf = 4'b0, dopb_outreg = 4'b0, dopb_out_out = 4'b0; reg [7:0] dopa_out = 8'b0, dopa_buf = 8'b0, dopa_outreg = 8'b0, dopa_out_out = 8'b0; reg [63:0] doa_out_mux = 64'b0, doa_outreg_mux = 64'b0; reg [7:0] dopa_out_mux = 8'b0, dopa_outreg_mux = 8'b0; reg [63:0] dob_out_mux = 64'b0, dob_outreg_mux = 64'b0; reg [7:0] dopb_out_mux = 8'b0, dopb_outreg_mux = 8'b0; reg [7:0] eccparity_out; reg [7:0] dopr_ecc, syndrome = 8'b0; reg [7:0] dipb_in_ecc; reg [71:0] ecc_bit_position; reg [7:0] dip_ecc, dip_ecc_col, dipa_in_ecc_corrected; reg [63:0] dia_in_ecc_corrected, di_x = 64'bx; reg dbiterr_out = 0, sbiterr_out = 0; reg dbiterr_outreg = 0, sbiterr_outreg = 0; reg dbiterr_out_out = 0, sbiterr_out_out = 0; reg [7:0] wea_reg; reg enb_reg; reg [7:0] out_a = 8'b0, out_b = 8'b0, junk, web_reg, web_tmp; reg outp_a = 1'b0, outp_b = 1'b0, junkp; reg rising_clka = 1'b0, rising_clkb = 1'b0; reg [15:0] addra_reg, addrb_reg, addra_tmp, addrb_tmp; reg [63:0] dia_reg, dib_reg; reg [3:0] dipa_reg; reg [7:0] dipb_reg; reg [1:0] viol_type = 2'b00, seq = 2'b00; reg [15:0] addr_tmp; reg [7:0] we_tmp; integer viol_time; reg col_wr_wr_msg = 1, col_wra_rdb_msg = 1, col_wrb_rda_msg = 1; reg [7:0] no_col = 8'b0; time curr_time, prev_time; wire [63:0] dib_in; wire [63:0] dia_in; wire [15:0] addra_in, addrb_in; wire clka_in, clkb_in, regclka_in, regclkb_in; wire [7:0] dipb_in; wire [3:0] dipa_in; wire ena_in, enb_in, gsr_in, regcea_in, regceb_in, ssra_in, ssrb_in; wire [7:0] wea_in; wire [7:0] web_in; wire cascadeinlata_in, cascadeinlatb_in; wire cascadeinrega_in, cascadeinregb_in; initial begin if (INIT_FILE == "NONE") begin init_mult = 256/width; for (count = 0; count < init_mult; count = count + 1) begin for (count1 = 0; count1 < width; count1 = count1 + 1) begin mem[count][count1] = INIT_00[(count * width) + count1]; mem[count + (init_mult * 1)][count1] = INIT_01[(count * width) + count1]; mem[count + (init_mult * 2)][count1] = INIT_02[(count * width) + count1]; mem[count + (init_mult * 3)][count1] = INIT_03[(count * width) + count1]; mem[count + (init_mult * 4)][count1] = INIT_04[(count * width) + count1]; mem[count + (init_mult * 5)][count1] = INIT_05[(count * width) + count1]; mem[count + (init_mult * 6)][count1] = INIT_06[(count * width) + count1]; mem[count + (init_mult * 7)][count1] = INIT_07[(count * width) + count1]; mem[count + (init_mult * 8)][count1] = INIT_08[(count * width) + count1]; mem[count + (init_mult * 9)][count1] = INIT_09[(count * width) + count1]; mem[count + (init_mult * 10)][count1] = INIT_0A[(count * width) + count1]; mem[count + (init_mult * 11)][count1] = INIT_0B[(count * width) + count1]; mem[count + (init_mult * 12)][count1] = INIT_0C[(count * width) + count1]; mem[count + (init_mult * 13)][count1] = INIT_0D[(count * width) + count1]; mem[count + (init_mult * 14)][count1] = INIT_0E[(count * width) + count1]; mem[count + (init_mult * 15)][count1] = INIT_0F[(count * width) + count1]; mem[count + (init_mult * 16)][count1] = INIT_10[(count * width) + count1]; mem[count + (init_mult * 17)][count1] = INIT_11[(count * width) + count1]; mem[count + (init_mult * 18)][count1] = INIT_12[(count * width) + count1]; mem[count + (init_mult * 19)][count1] = INIT_13[(count * width) + count1]; mem[count + (init_mult * 20)][count1] = INIT_14[(count * width) + count1]; mem[count + (init_mult * 21)][count1] = INIT_15[(count * width) + count1]; mem[count + (init_mult * 22)][count1] = INIT_16[(count * width) + count1]; mem[count + (init_mult * 23)][count1] = INIT_17[(count * width) + count1]; mem[count + (init_mult * 24)][count1] = INIT_18[(count * width) + count1]; mem[count + (init_mult * 25)][count1] = INIT_19[(count * width) + count1]; mem[count + (init_mult * 26)][count1] = INIT_1A[(count * width) + count1]; mem[count + (init_mult * 27)][count1] = INIT_1B[(count * width) + count1]; mem[count + (init_mult * 28)][count1] = INIT_1C[(count * width) + count1]; mem[count + (init_mult * 29)][count1] = INIT_1D[(count * width) + count1]; mem[count + (init_mult * 30)][count1] = INIT_1E[(count * width) + count1]; mem[count + (init_mult * 31)][count1] = INIT_1F[(count * width) + count1]; mem[count + (init_mult * 32)][count1] = INIT_20[(count * width) + count1]; mem[count + (init_mult * 33)][count1] = INIT_21[(count * width) + count1]; mem[count + (init_mult * 34)][count1] = INIT_22[(count * width) + count1]; mem[count + (init_mult * 35)][count1] = INIT_23[(count * width) + count1];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -