📄 ecp2_misc.vhd
字号:
SIGNAL diab_node : std_logic_vector(35 downto 0) := (others => '0'); SIGNAL rsta_int : std_logic := '0'; SIGNAL rstb_int : std_logic := '0'; SIGNAL rsta_reg : std_logic := '0'; SIGNAL rstb_reg : std_logic := '0'; SIGNAL reseta : std_logic := '0'; SIGNAL resetb : std_logic := '0'; SIGNAL dia_reg : std_logic_vector((new_data_width_a - 1) downto 0) := (others => '0'); SIGNAL dib_reg : std_logic_vector((new_data_width_b - 1) downto 0) := (others => '0'); SIGNAL ada_reg : std_logic_vector((ADDR_WIDTH_A - 1) downto 0); SIGNAL adb_reg : std_logic_vector((ADDR_WIDTH_B - 1) downto 0); SIGNAL diab_reg : std_logic_vector(35 downto 0) := (others => '0'); SIGNAL bwa0_reg : std_logic_vector(1 downto 0) := (others => '0'); SIGNAL bwa1_reg : std_logic_vector(1 downto 0) := (others => '0'); SIGNAL bwb_reg : std_logic_vector(1 downto 0) := (others => '0'); SIGNAL wrena_reg : std_logic := '0'; SIGNAL clka_valid : std_logic := '0'; SIGNAL clkb_valid : std_logic := '0'; SIGNAL clka_valid1 : std_logic := '0'; SIGNAL clkb_valid1 : std_logic := '0'; SIGNAL last_clka_valid1 : std_logic := '0'; SIGNAL last_clkb_valid1 : std_logic := '0'; SIGNAL wrenb_reg : std_logic := '0'; SIGNAL rena_reg : std_logic := '0'; SIGNAL renb_reg : std_logic := '0'; SIGNAL rsta_sig : std_logic := '0'; SIGNAL rstb_sig : std_logic := '0'; SIGNAL doa_node : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL doa_node_tr : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL doa_node_wt : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL doa_node_rbr : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL dob_node : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL dob_node_tr : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL dob_node_wt : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL dob_node_rbr : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL doa_reg : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL dob_reg : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL doab_reg : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL doa_int : std_logic_vector(17 downto 0) := (others => '0'); SIGNAL dob_int : std_logic_vector(17 downto 0) := (others => '0'); --write & read/write collision flags signal wr_a_wr_b_coll : std_logic := '0'; signal wr_a_rd_b_coll : std_logic := '0'; signal rd_a_wr_b_coll : std_logic := '0'; --lower & upper collision addresses signal dn_coll_addr, up_coll_addr : integer; CONSTANT initval : string(5120 downto 1) := ( initval_3f(3 to 82)&initval_3e(3 to 82)&initval_3d(3 to 82)&initval_3c(3 to 82)& initval_3b(3 to 82)&initval_3a(3 to 82)&initval_39(3 to 82)&initval_38(3 to 82)& initval_37(3 to 82)&initval_36(3 to 82)&initval_35(3 to 82)&initval_34(3 to 82)& initval_33(3 to 82)&initval_32(3 to 82)&initval_31(3 to 82)&initval_30(3 to 82)& initval_2f(3 to 82)&initval_2e(3 to 82)&initval_2d(3 to 82)&initval_2c(3 to 82)& initval_2b(3 to 82)&initval_2a(3 to 82)&initval_29(3 to 82)&initval_28(3 to 82)& initval_27(3 to 82)&initval_26(3 to 82)&initval_25(3 to 82)&initval_24(3 to 82)& initval_23(3 to 82)&initval_22(3 to 82)&initval_21(3 to 82)&initval_20(3 to 82)& initval_1f(3 to 82)&initval_1e(3 to 82)&initval_1d(3 to 82)&initval_1c(3 to 82)& initval_1b(3 to 82)&initval_1a(3 to 82)&initval_19(3 to 82)&initval_18(3 to 82)& initval_17(3 to 82)&initval_16(3 to 82)&initval_15(3 to 82)&initval_14(3 to 82)& initval_13(3 to 82)&initval_12(3 to 82)&initval_11(3 to 82)&initval_10(3 to 82)& initval_0f(3 to 82)&initval_0e(3 to 82)&initval_0d(3 to 82)&initval_0c(3 to 82)& initval_0b(3 to 82)&initval_0a(3 to 82)&initval_09(3 to 82)&initval_08(3 to 82)& initval_07(3 to 82)&initval_06(3 to 82)&initval_05(3 to 82)&initval_04(3 to 82)& initval_03(3 to 82)&initval_02(3 to 82)&initval_01(3 to 82)&initval_00(3 to 82)); SIGNAL MEM : std_logic_vector(18431 downto 0) := init_ram (initval); SIGNAL j : integer := 0;BEGIN ----------------------- -- input path delays ----------------------- WireDelay : BLOCK BEGIN VitalWireDelay(ada_ipd(0), ada0, tipd_ada0); VitalWireDelay(ada_ipd(1), ada1, tipd_ada1); VitalWireDelay(ada_ipd(2), ada2, tipd_ada2); VitalWireDelay(ada_ipd(3), ada3, tipd_ada3); VitalWireDelay(ada_ipd(4), ada4, tipd_ada4); VitalWireDelay(ada_ipd(5), ada5, tipd_ada5); VitalWireDelay(ada_ipd(6), ada6, tipd_ada6); VitalWireDelay(ada_ipd(7), ada7, tipd_ada7); VitalWireDelay(ada_ipd(8), ada8, tipd_ada8); VitalWireDelay(ada_ipd(9), ada9, tipd_ada9); VitalWireDelay(ada_ipd(10), ada10, tipd_ada10); VitalWireDelay(ada_ipd(11), ada11, tipd_ada11); VitalWireDelay(ada_ipd(12), ada12, tipd_ada12); VitalWireDelay(ada_ipd(13), ada13, tipd_ada13); VitalWireDelay(dia_ipd(0), dia0, tipd_dia0); VitalWireDelay(dia_ipd(1), dia1, tipd_dia1); VitalWireDelay(dia_ipd(2), dia2, tipd_dia2); VitalWireDelay(dia_ipd(3), dia3, tipd_dia3); VitalWireDelay(dia_ipd(4), dia4, tipd_dia4); VitalWireDelay(dia_ipd(5), dia5, tipd_dia5); VitalWireDelay(dia_ipd(6), dia6, tipd_dia6); VitalWireDelay(dia_ipd(7), dia7, tipd_dia7); VitalWireDelay(dia_ipd(8), dia8, tipd_dia8); VitalWireDelay(dia_ipd(9), dia9, tipd_dia9); VitalWireDelay(dia_ipd(10), dia10, tipd_dia10); VitalWireDelay(dia_ipd(11), dia11, tipd_dia11); VitalWireDelay(dia_ipd(12), dia12, tipd_dia12); VitalWireDelay(dia_ipd(13), dia13, tipd_dia13); VitalWireDelay(dia_ipd(14), dia14, tipd_dia14); VitalWireDelay(dia_ipd(15), dia15, tipd_dia15); VitalWireDelay(dia_ipd(16), dia16, tipd_dia16); VitalWireDelay(dia_ipd(17), dia17, tipd_dia17); VitalWireDelay(clka_ipd, clka, tipd_clka); VitalWireDelay(wrea_ipd, wea, tipd_wea); VitalWireDelay(cea_ipd, cea, tipd_cea); VitalWireDelay(csa_ipd(0), csa0, tipd_csa0); VitalWireDelay(csa_ipd(1), csa1, tipd_csa1); VitalWireDelay(csa_ipd(2), csa2, tipd_csa2); VitalWireDelay(rsta_ipd, rsta, tipd_rsta); VitalWireDelay(adb_ipd(0), adb0, tipd_adb0); VitalWireDelay(adb_ipd(1), adb1, tipd_adb1); VitalWireDelay(adb_ipd(2), adb2, tipd_adb2); VitalWireDelay(adb_ipd(3), adb3, tipd_adb3); VitalWireDelay(adb_ipd(4), adb4, tipd_adb4); VitalWireDelay(adb_ipd(5), adb5, tipd_adb5); VitalWireDelay(adb_ipd(6), adb6, tipd_adb6); VitalWireDelay(adb_ipd(7), adb7, tipd_adb7); VitalWireDelay(adb_ipd(8), adb8, tipd_adb8); VitalWireDelay(adb_ipd(9), adb9, tipd_adb9); VitalWireDelay(adb_ipd(10), adb10, tipd_adb10); VitalWireDelay(adb_ipd(11), adb11, tipd_adb11); VitalWireDelay(adb_ipd(12), adb12, tipd_adb12); VitalWireDelay(adb_ipd(13), adb13, tipd_adb13); VitalWireDelay(dib_ipd(0), dib0, tipd_dib0); VitalWireDelay(dib_ipd(1), dib1, tipd_dib1); VitalWireDelay(dib_ipd(2), dib2, tipd_dib2); VitalWireDelay(dib_ipd(3), dib3, tipd_dib3); VitalWireDelay(dib_ipd(4), dib4, tipd_dib4); VitalWireDelay(dib_ipd(5), dib5, tipd_dib5); VitalWireDelay(dib_ipd(6), dib6, tipd_dib6); VitalWireDelay(dib_ipd(7), dib7, tipd_dib7); VitalWireDelay(dib_ipd(8), dib8, tipd_dib8); VitalWireDelay(dib_ipd(9), dib9, tipd_dib9); VitalWireDelay(dib_ipd(10), dib10, tipd_dib10); VitalWireDelay(dib_ipd(11), dib11, tipd_dib11); VitalWireDelay(dib_ipd(12), dib12, tipd_dib12); VitalWireDelay(dib_ipd(13), dib13, tipd_dib13); VitalWireDelay(dib_ipd(14), dib14, tipd_dib14); VitalWireDelay(dib_ipd(15), dib15, tipd_dib15); VitalWireDelay(dib_ipd(16), dib16, tipd_dib16); VitalWireDelay(dib_ipd(17), dib17, tipd_dib17); VitalWireDelay(clkb_ipd, clkb, tipd_clkb); VitalWireDelay(wreb_ipd, web, tipd_web); VitalWireDelay(ceb_ipd, ceb, tipd_ceb); VitalWireDelay(csb_ipd(0), csb0, tipd_csb0); VitalWireDelay(csb_ipd(1), csb1, tipd_csb1); VitalWireDelay(csb_ipd(2), csb2, tipd_csb2); VitalWireDelay(rstb_ipd, rstb, tipd_rstb); END BLOCK; GLOBALRESET : PROCESS (purnet, gsrnet) BEGIN IF (GSR = "DISABLED") THEN g_reset <= purnet; ELSE g_reset <= purnet AND gsrnet; END IF; END PROCESS; rsta_sig <= rsta_ipd or (not g_reset); rstb_sig <= rstb_ipd or (not g_reset);-- set_reset <= g_reset and (not reset_ipd); ada_node <= ada_ipd(13 downto (14 - ADDR_WIDTH_A)); adb_node <= adb_ipd(13 downto (14 - ADDR_WIDTH_B));-- chip select A decode P1 : PROCESS(csa_ipd) BEGIN IF (csa_ipd = "000" and CSDECODE_A = "000") THEN csa_en <= '1'; ELSIF (csa_ipd = "001" and CSDECODE_A = "001") THEN csa_en <= '1'; ELSIF (csa_ipd = "010" and CSDECODE_A = "010") THEN csa_en <= '1'; ELSIF (csa_ipd = "011" and CSDECODE_A = "011") THEN csa_en <= '1'; ELSIF (csa_ipd = "100" and CSDECODE_A = "100") THEN csa_en <= '1'; ELSIF (csa_ipd = "101" and CSDECODE_A = "101") THEN csa_en <= '1'; ELSIF (csa_ipd = "110" and CSDECODE_A = "110") THEN csa_en <= '1'; ELSIF (csa_ipd = "111" and CSDECODE_A = "111") THEN csa_en <= '1'; ELSE csa_en <= '0'; END IF; END PROCESS; P2 : PROCESS(csb_ipd) BEGIN IF (csb_ipd = "000" and CSDECODE_B = "000") THEN csb_en <= '1'; ELSIF (csb_ipd = "001" and CSDECODE_B = "001") THEN csb_en <= '1'; ELSIF (csb_ipd = "010" and CSDECODE_B = "010") THEN csb_en <= '1'; ELSIF (csb_ipd = "011" and CSDECODE_B = "011") THEN csb_en <= '1'; ELSIF (csb_ipd = "100" and CSDECODE_B = "100") THEN csb_en <= '1'; ELSIF (csb_ipd = "101" and CSDECODE_B = "101") THEN csb_en <= '1'; ELSIF (csb_ipd = "110" and CSDECODE_B = "110") THEN csb_en <= '1'; ELSIF (csb_ipd = "111" and CSDECODE_B = "111") THEN csb_en <= '1'; ELSE csb_en <= '0'; END IF; END PROCESS; P3 : PROCESS(dia_ipd) BEGIN CASE DATA_WIDTH_A IS WHEN 1 => dia_node <= dia_ipd(11 downto 11); WHEN 2 => dia_node <= (dia_ipd(1), dia_ipd(11)); WHEN 4 => dia_node <= dia_ipd(3 downto 0); WHEN 9 => dia_node <= dia_ipd(8 downto 0); WHEN 18 => dia_node <= dia_ipd; WHEN 36 => dia_node <= dia_ipd; WHEN others => NULL; END CASE; END PROCESS; P4 : PROCESS(dib_ipd) BEGIN CASE DATA_WIDTH_B IS WHEN 1 => dib_node <= dib_ipd(11 downto 11); WHEN 2 => dib_node <= (dib_ipd(1), dib_ipd(11)); WHEN 4 => dib_node <= dib_ipd(3 downto 0); WHEN 9 => dib_node <= dib_ipd(8 downto 0); WHEN 18 => dib_node <= dib_ipd; WHEN 36 => dib_node <= dib_ipd; WHEN others => NULL; END CASE; END PROCESS; diab_node <= (dib_ipd & dia_ipd); P107 : PROCESS(clka_ipd) BEGIN IF (clka_ipd'event and clka_ipd = '1') THEN IF ((g_reset = '0') or (rsta_ipd = '1')) THEN clka_valid <= '0'; ELSE IF (cea_ipd = '1') THEN IF (csa_en = '1') THEN clka_valid <= '1', '0' after 0.2 ns; ELSE clka_valid <= '0'; END IF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -