📄 ecp2_misc.vhd
字号:
IF (bwa1_reg(0) = '1') THEN FOR i IN 0 TO 8 LOOP MEM((WADDR_A * DATA_WIDTH_A) + i + 18) <= diab_reg(i + 18); END LOOP; END IF; IF (bwa1_reg(1) = '1') THEN FOR i IN 0 TO 8 LOOP MEM((WADDR_A * DATA_WIDTH_A) + i + 27) <= diab_reg(i + 27); END LOOP; END IF; END IF; ELSE IF (DATA_WIDTH_A = 18) THEN IF (wrena_reg = '1' and clka_valid = '1') THEN FOR i IN 0 TO (DATA_WIDTH_A - 1) LOOP doa_node_rbr(i) <= MEM((WADDR_A * DATA_WIDTH_A) + (WADDR_A / div_a) + i); END LOOP; IF (bwa0_reg(0) = '1') THEN FOR i IN 0 TO 8 LOOP MEM((WADDR_A * DATA_WIDTH_A) + i) <= dia_reg(i); if ( (wr_a_wr_b_coll = '1') and (((WADDR_A * DATA_WIDTH_A) + i) >= dn_coll_addr) and (((WADDR_A * DATA_WIDTH_A) + i) <= up_coll_addr) and ( (DATA_WIDTH_B < 18) or ((DATA_WIDTH_B = 18) and (bwb_reg(0) = '1')) ) ) then MEM((WADDR_A * DATA_WIDTH_A) + i) <= 'X'; end if; END LOOP; END IF; IF (bwa0_reg(1) = '1') THEN FOR i IN 0 TO 8 LOOP MEM((WADDR_A * DATA_WIDTH_A) + i + 9) <= dia_reg(i + 9); if ( (wr_a_wr_b_coll = '1') and (((WADDR_A * DATA_WIDTH_A) + i + 9) >= dn_coll_addr) and (((WADDR_A * DATA_WIDTH_A) + i + 9) <= up_coll_addr) and ( (DATA_WIDTH_B < 18) or ((DATA_WIDTH_B = 18) and (bwb_reg(1) = '1')) ) ) then MEM((WADDR_A * DATA_WIDTH_A) + i + 9) <= 'X'; end if; END LOOP; END IF; END IF; ELSIF (DATA_WIDTH_A = 9) THEN IF (wrena_reg = '1' and clka_valid = '1') THEN FOR i IN 0 TO (DATA_WIDTH_A - 1) LOOP doa_node_rbr(i) <= MEM((WADDR_A * DATA_WIDTH_A) + (WADDR_A / div_a) + i); END LOOP; FOR i IN 0 TO (DATA_WIDTH_A - 1) LOOP MEM((WADDR_A * DATA_WIDTH_A) + i) <= dia_reg(i); if ( (wr_a_wr_b_coll = '1') and (((WADDR_A * DATA_WIDTH_A) + i) >= dn_coll_addr) and (((WADDR_A * DATA_WIDTH_A) + i) <= up_coll_addr) and ( (DATA_WIDTH_B < 18) or ( (DATA_WIDTH_B = 18) and ( ((bwb_reg(0) = '1') and (((WADDR_A * DATA_WIDTH_A) rem 18) = 0)) or ((bwb_reg(1) = '1') and (((WADDR_A * DATA_WIDTH_A) rem 18) = 9)) ) ) ) ) then MEM((WADDR_A * DATA_WIDTH_A) + i) <= 'X'; end if; END LOOP; END IF; ELSE IF (wrena_reg = '1' and clka_valid = '1') THEN FOR i IN 0 TO (DATA_WIDTH_A - 1) LOOP doa_node_rbr(i) <= MEM((WADDR_A * DATA_WIDTH_A) + (WADDR_A / div_a) + i); END LOOP; FOR i IN 0 TO (DATA_WIDTH_A - 1) LOOP MEM((WADDR_A * DATA_WIDTH_A) + (WADDR_A / div_a) + i) <= dia_reg(i); if ( (wr_a_wr_b_coll = '1') and (((WADDR_A * DATA_WIDTH_A) + (WADDR_A / div_a) + i) >= dn_coll_addr) and (((WADDR_A * DATA_WIDTH_A) + (WADDR_A / div_a) + i) <= up_coll_addr) and ( (DATA_WIDTH_B < 18) or ( (DATA_WIDTH_B = 18) and ( ((bwb_reg(0) = '1') and ((((WADDR_A * DATA_WIDTH_A) + (WADDR_A / div_a)) rem 18) < 9)) or ((bwb_reg(1) = '1') and ((((WADDR_A * DATA_WIDTH_A) + (WADDR_A / div_a)) rem 18) >= 9)) ) ) ) ) then MEM((WADDR_A * DATA_WIDTH_A) + (WADDR_A / div_a) + i) <= 'X'; end if; END LOOP; END IF; END IF; IF (DATA_WIDTH_B = 18) THEN IF (wrenb_reg = '1' and clkb_valid = '1') THEN FOR i IN 0 TO (DATA_WIDTH_B - 1) LOOP dob_node_rbr(i) <= MEM((WADDR_B * DATA_WIDTH_B) + (WADDR_B / div_b) + i); END LOOP; IF (bwb_reg(0) = '1') THEN FOR i IN 0 TO 8 LOOP MEM((WADDR_B * DATA_WIDTH_B) + i) <= dib_reg(i); if ( (wr_a_wr_b_coll = '1') and (((WADDR_B * DATA_WIDTH_B) + i) >= dn_coll_addr) and (((WADDR_B * DATA_WIDTH_B) + i) <= up_coll_addr) and ( (DATA_WIDTH_A < 18) or ((DATA_WIDTH_A = 18) and (bwa0_reg(0) = '1')) ) ) then MEM((WADDR_B * DATA_WIDTH_B) + i) <= 'X'; end if; END LOOP; END IF; IF (bwb_reg(1) = '1') THEN FOR i IN 0 TO 8 LOOP MEM((WADDR_B * DATA_WIDTH_B) + i + 9) <= dib_reg(i + 9); if ( (wr_a_wr_b_coll = '1') and (((WADDR_B * DATA_WIDTH_B) + i + 9) >= dn_coll_addr) and (((WADDR_B * DATA_WIDTH_B) + i + 9) <= up_coll_addr) and ( (DATA_WIDTH_A < 18) or ((DATA_WIDTH_A = 18) and (bwa0_reg(1) = '1')) ) ) then MEM((WADDR_B * DATA_WIDTH_B) + i + 9) <= 'X'; end if; END LOOP; END IF; END IF; ELSIF (DATA_WIDTH_B = 9) THEN IF (wrenb_reg = '1' and clkb_valid = '1') THEN FOR i IN 0 TO (DATA_WIDTH_B - 1) LOOP dob_node_rbr(i) <= MEM((WADDR_B * DATA_WIDTH_B) + (WADDR_B / div_b) + i); END LOOP; FOR i IN 0 TO (DATA_WIDTH_B - 1) LOOP MEM((WADDR_B * DATA_WIDTH_B) + i) <= dib_reg(i); if ( (wr_a_wr_b_coll = '1') and (((WADDR_B * DATA_WIDTH_B) + i) >= dn_coll_addr) and (((WADDR_B * DATA_WIDTH_B) + i) <= up_coll_addr) and ( (DATA_WIDTH_A < 18) or ( (DATA_WIDTH_A = 18) and ( ((bwa0_reg(0) = '1') and (((WADDR_B * DATA_WIDTH_B) rem 18) = 0)) or ((bwa0_reg(1) = '1') and (((WADDR_B * DATA_WIDTH_B) rem 18) = 9)) ) ) ) ) then MEM((WADDR_B * DATA_WIDTH_B) + i) <= 'X'; end if; END LOOP; END IF; ELSE IF (wrenb_reg = '1' and clkb_valid = '1') THEN FOR i IN 0 TO (DATA_WIDTH_B - 1) LOOP dob_node_rbr(i) <= MEM((WADDR_B * DATA_WIDTH_B) + (WADDR_B / div_b) + i); END LOOP; FOR i IN 0 TO (DATA_WIDTH_B - 1) LOOP MEM((WADDR_B * DATA_WIDTH_B) + (WADDR_B / div_b) + i) <= dib_reg(i); if ( (wr_a_wr_b_coll = '1') and (((WADDR_B * DATA_WIDTH_B) + (WADDR_B / div_b) + i) >= dn_coll_addr) and (((WADDR_B * DATA_WIDTH_B) + (WADDR_B / div_b) + i) <= up_coll_addr) and ( (DATA_WIDTH_A < 18) or ( (DATA_WIDTH_A = 18) and ( ((bwa0_reg(0) = '1') and ((((WADDR_B * DATA_WIDTH_B) + (WADDR_B / div_b)) rem 18) < 9)) or ((bwa0_reg(1) = '1') and ((((WADDR_B * DATA_WIDTH_B) + (WADDR_B / div_b)) rem 18) >= 9)) ) ) ) ) then MEM((WADDR_B * DATA_WIDTH_B) + (WADDR_B / div_b) + i) <= 'X'; end if; END LOOP; END IF; END IF; END IF; END PROCESS; P9 : PROCESS(ada_reg, rena_reg, adb_reg, renb_reg, MEM, clka_valid1, clkb_valid1, rsta_sig, rstb_sig, doa_node_rbr, dob_node_rbr, wr_a_rd_b_coll, rd_a_wr_b_coll) VARIABLE RADDR_A_VALID : boolean := TRUE; VARIABLE RADDR_B_VALID : boolean := TRUE; VARIABLE RADDR_A : integer := 0; VARIABLE RADDR_B : integer := 0; VARIABLE dout_node_tr : std_logic_vector(35 downto 0); VARIABLE dout_node_wt : std_logic_vector(35 downto 0); BEGIN RADDR_A_VALID := Valid_Address (ada_reg); RADDR_B_VALID := Valid_Address (adb_reg); IF (RADDR_A_VALID = TRUE) THEN RADDR_A := conv_integer(ada_reg); END IF; IF (RADDR_B_VALID = TRUE) THEN RADDR_B := conv_integer(adb_reg); END IF; IF (DATA_WIDTH_B = 36) THEN IF (rstb_sig = '1') THEN IF (RESETMODE = "SYNC") THEN IF (clkb_ipd = '1') THEN doa_node <= (others => '0'); dob_node <= (others => '0'); END IF; ELSIF (RESETMODE = "ASYNC") THEN doa_node <= (others => '0'); dob_node <= (others => '0'); END IF; ELSIF (clkb_valid1'event and clkb_valid1 = '1') THEN IF (renb_reg = '1') THEN FOR i IN 0 TO (DATA_WIDTH_B - 1) LOOP dout_node_tr(i) := MEM((RADDR_B * DATA_WIDTH_B) + i); if ( (wr_a_rd_b_coll = '1') and (((RADDR_B * DATA_WIDTH_B) + i) >= dn_coll_addr) and (((RADDR_B * DATA_WIDTH_B) + i) <= up_coll_addr) and ( (DATA_WIDTH_A < 18) or ( (DATA_WIDTH_A = 18) and ( ((bwa0_reg(0) = '1') and ((((RADDR_B * DATA_WIDTH_B) + i) rem 18) < 9)) or ((bwa0_reg(1) = '1') and ((((RADDR_B * DATA_WIDTH_B) + i) rem 18) >= 9)) ) ) or ( (DATA_WIDTH_A = 36) and ( ((bwa0_reg(0) = '1') and ((((RADDR_B * DATA_WIDTH_B) + i) rem 36) < 9)) or ((bwa0_reg(1) = '1') and ((((RADDR_B * DATA_WIDTH_B) + i) rem 36) >= 9) and ((((RADDR_B * DATA_WIDTH_B) + i) rem 36) < 18)) or ((bwa1_reg(0) = '1') and ((((RADDR_B * DATA_WIDTH_B) + i) rem 36) >= 18) and ((((RADDR_B * DATA_WIDTH_B) + i) rem 36) < 27)) or ((bwa1_reg(1) = '1') and ((((RADDR_B * DATA_WIDTH_B) + i) rem 36) >= 27)) ) ) ) ) then dout_node_tr(i) := 'X'; end if; END LOOP; doa_node <= dout_node_tr(17 downto 0); dob_node <= dout_node_tr(35 downto 18); ELSIF (renb_reg = '0') THEN IF (WRITEMODE_B = "WRITETHROUGH") THEN FOR i IN 0 TO (DATA_WIDTH_B - 1) LOOP dout_node_wt(i) := MEM((RADDR_B * DATA_WIDTH_B) + i); END LOOP; doa_node <= dout_node_wt(17 downto 0); dob_node <= dout_node_wt(35 downto 18); ELSIF (WRITEMODE_B = "READBEFOREWRITE") THEN doa_node <= doa_node_rbr; dob_node <= dob_node_rbr; END IF; END IF; END IF; ELSE IF (rsta_sig = '1') THEN IF (RESETMODE = "SYNC") THEN IF (clka_ipd = '1') THEN doa_node <= (others => '0'); END IF; ELSIF (RESETMODE = "ASYNC") THEN doa_node <= (others => '0'); END IF; ELSIF (clka_valid1 = '1') THEN IF (rena_reg = '1') THEN IF ( last_clka_valid1 = '0') THEN FOR i IN 0 TO (new_data_width_a - 1) LOOP doa_node(i) <= MEM((RADDR_A * DATA_WIDTH_A) + (RADDR_A / div_a) + i); if ( (rd_a_wr_b_coll = '1') and (((RADDR_A * DATA_WIDTH_A) + (RADDR_A / div_a) + i) >= dn_coll_addr) and (((RADDR_A * DATA_WIDTH_A) + (RADDR_A / div_a) + i) <= up_coll_addr) and ( (DATA_WIDTH_B < 18) or ( (DATA_WIDTH_B = 18) and ( ((bwb_reg(0) = '1') and ((((RADDR_A * DATA_WIDTH_A) + (RADDR_A / div_a) + i) rem 18) < 9)) or ((bwb_reg(1) = '1') and ((((RADDR_A * DATA_WIDTH_A) + (RADDR_A / div_a) + i) rem 18) >= 9)) ) ) ) ) then doa_node(i) <= 'X'; end if; END LOOP; END IF; ELSIF (rena_reg = '0') THEN IF (WRITEMODE_A = "WRITETHROUGH") THEN FOR i IN 0 TO (new_data_width_a - 1) LOOP doa_node(i) <= MEM((RADDR_A * DATA_WIDTH_A) + (RADDR_A / div_a) + i); END LOOP; ELSIF (WRITEMODE_A = "READBEFOREWRITE") THEN IF ( last_clka_valid1 = '0') THEN doa_node <= doa_node_rbr; END IF; END IF; END IF; END IF; IF (rstb_sig = '1') THEN IF (RESETMODE = "SYNC") THEN IF (clkb_ipd = '1') THEN dob_node <= (others => '0'); END IF; ELSIF (RESETMODE = "ASYNC") THEN dob_node <= (others => '0'); END IF; ELSIF (clkb_valid1 = '1') THEN IF (renb_reg = '1') THEN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -