⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 orca_ecmem.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 5 页
字号:
                 END LOOP;                 FOR i IN 0 TO 8 LOOP                    MEM((WADDR_A * DATA_WIDTH_A) + i + 9) <= dia_reg(i + 9);                 END LOOP;           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);              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);              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;                 FOR i IN 0 TO 8 LOOP                    MEM((WADDR_B * DATA_WIDTH_B) + i) <= dib_reg(i);                 END LOOP;                 FOR i IN 0 TO 8 LOOP                    MEM((WADDR_B * DATA_WIDTH_B) + i + 9) <= dib_reg(i + 9);                 END LOOP;           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);              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);              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)   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);              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'event and clka_valid1 = '1') THEN           IF (rena_reg = '1') THEN              FOR i IN 0 TO (DATA_WIDTH_A - 1)  LOOP                 doa_node(i) <= MEM((RADDR_A * DATA_WIDTH_A) + (RADDR_A / div_a) + i);              END LOOP;           ELSIF (rena_reg = '0') THEN              IF (WRITEMODE_A = "WRITETHROUGH") THEN                 FOR i IN 0 TO (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                 doa_node <= doa_node_rbr;              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'event and clkb_valid1 = '1') THEN           IF (renb_reg = '1') THEN              FOR i IN 0 TO (DATA_WIDTH_B - 1)  LOOP                 dob_node(i) <= MEM((RADDR_B * DATA_WIDTH_B) + (RADDR_B / div_b) + i);              END LOOP;           ELSIF (renb_reg = '0') THEN              IF (WRITEMODE_B = "WRITETHROUGH") THEN                 FOR i IN 0 TO (DATA_WIDTH_B - 1) LOOP                    dob_node(i) <= MEM((RADDR_B * DATA_WIDTH_B) + (RADDR_B / div_b) + i);                 END LOOP;              ELSIF (WRITEMODE_B = "READBEFOREWRITE") THEN                 dob_node <= dob_node_rbr;              END IF;           END IF;        END IF;     END IF;  END PROCESS;  P10 : PROCESS(g_reset, rsta_ipd, rstb_ipd, clka_ipd, clkb_ipd)  BEGIN     IF (g_reset = '0') THEN        doa_reg <= (others => '0');     ELSIF (RESETMODE = "ASYNC") THEN        IF (rsta_ipd = '1') THEN           doa_reg <= (others => '0');        ELSIF (clka_ipd'event and clka_ipd = '1') THEN           IF (cea_ipd = '1') THEN              doa_reg <= doa_node;           END IF;        END IF;     ELSIF (RESETMODE = "SYNC") THEN        IF (clka_ipd'event and clka_ipd = '1') THEN           IF (cea_ipd = '1') THEN              IF (rsta_ipd = '1') THEN                 doa_reg <= (others => '0');              ELSIF (rsta_ipd = '0') THEN                 doa_reg <= doa_node;              END IF;           END IF;        END IF;     END IF;     IF (g_reset = '0') THEN        dob_reg <= (others => '0');        doab_reg <= (others => '0');     ELSIF (RESETMODE = "ASYNC") THEN        IF (rstb_ipd = '1') THEN           dob_reg <= (others => '0');           doab_reg <= (others => '0');        ELSIF (clkb_ipd'event and clkb_ipd = '1') THEN           IF (ceb_ipd = '1') THEN              dob_reg <= dob_node;              doab_reg <= doa_node;           END IF;        END IF;     ELSIF (RESETMODE = "SYNC") THEN        IF (clkb_ipd'event and clkb_ipd = '1') THEN           IF (ceb_ipd = '1') THEN              IF (rstb_ipd = '1') THEN                 dob_reg <= (others => '0');                 doab_reg <= (others => '0');              ELSIF (rstb_ipd = '0') THEN                 dob_reg <= dob_node;                 doab_reg <= doa_node;              END IF;           END IF;        END IF;     END IF;  END PROCESS;  P11 : PROCESS(doa_node, dob_node, doa_reg, dob_reg, doab_reg)  BEGIN     IF (REGMODE_A = "OUTREG") THEN         IF (DATA_WIDTH_B = 36) THEN           doa_int <= doab_reg;        ELSE           doa_int <= doa_reg;        END IF;     ELSE        doa_int <= doa_node;     END IF;     IF (REGMODE_B = "OUTREG") THEN         dob_int <= dob_reg;     ELSE        dob_int <= dob_node;     END IF;  END PROCESS;  (doa17, doa16, doa15, doa14, doa13, doa12, doa11, doa10, doa9, doa8, doa7, doa6,   doa5, doa4, doa3, doa2, doa1, doa0) <= doa_int;  (dob17, dob16, dob15, dob14, dob13, dob12, dob11, dob10, dob9, dob8, dob7, dob6,   dob5, dob4, dob3, dob2, dob1, dob0) <= dob_int;END V;-------cell sp8ka------library ieee;use ieee.std_logic_1164.all;use ieee.vital_timing.all;use ieee.vital_primitives.all;library ec; use ec.global.gsrnet;use ec.global.purnet;use ec.mem3.all;-- entity declaration --ENTITY sp8ka IS   GENERIC (        DATA_WIDTH               : Integer  := 18;        REGMODE                  : String  := "NOREG";        RESETMODE                : String  := "ASYNC";        CSDECODE                 : String  := "000";        WRITEMODE                : String  := "NORMAL";        GSR                      : String  := "ENABLED";        initval_00 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_01 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_02 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_03 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_04 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_05 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_06 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_07 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_08 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_09 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_0a : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_0b : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_0c : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_0d : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_0e : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_0f : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_10 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_11 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_12 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_13 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_14 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_15 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_16 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_17 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_18 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_19 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_1a : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_1b : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_1c : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_1d : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_1e : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_1f : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000");   PORT(        di0, di1, di2, di3, di4, di5, di6, di7, di8            : in std_logic := 'X';        di9, di10, di11, di12, di13, di14, di15, di16, di17    : in std_logic := 'X';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -