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

📄 cy7c1354b.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 2 页
字号:
                REPORT "Addr - tAH violation"                SEVERITY ERROR;        END IF;        IF Clk'DELAYED(tCENH) = '1' THEN            ASSERT (CEN_n'LAST_EVENT > tCENH)                REPORT "CKE# - tCENH violation"                SEVERITY ERROR;        END IF;        --IF Clk'DELAYED(tDH) = '1' THEN        --    ASSERT (Dq'LAST_EVENT > tDH)        --        REPORT "Dq - tDH violation"        --        SEVERITY ERROR;        --END IF;        IF Clk'DELAYED(tWEH) = '1' THEN            ASSERT (Ce1_n'LAST_EVENT > tWEH)                REPORT "CE1# - tWEH violation"                SEVERITY ERROR;            ASSERT (Ce2'LAST_EVENT > tWEH)                REPORT "CE2 - tWEH violation"                SEVERITY ERROR;            ASSERT (Ce3_n'LAST_EVENT > tWEH)                REPORT "CE3 - tWEH violation"                SEVERITY ERROR;            ASSERT (AdvLd_n'LAST_EVENT > tWEH)                REPORT "ADV/LD# - tWEH violation"                SEVERITY ERROR;            ASSERT (Rw_n'LAST_EVENT > tWEH)                        REPORT "RW# - tWEH violation"                SEVERITY ERROR;            ASSERT (Bwa_n'LAST_EVENT > tWEH)                REPORT "BWa# - tWEH violation"                SEVERITY ERROR;            ASSERT (Bwb_n'LAST_EVENT > tWEH)                REPORT "BWb# - tWEH violation"                SEVERITY ERROR;            ASSERT (Bwc_n'LAST_EVENT > tWEH)                REPORT "BWc# - tWEH violation"                SEVERITY ERROR;            ASSERT (Bwd_n'LAST_EVENT > tWEH)                REPORT "BWd# - tWEH violation"                SEVERITY ERROR;        END IF;            END PROCESS;   -- Main Program    main : PROCESS --    TYPE memory_array IS ARRAY ((2**addr_bits) - 1 DOWNTO 0) OF STD_LOGIC_VECTOR ((data_bits / 4) - 1 DOWNTO 0);    	TYPE memory_array IS ARRAY (0 TO (2**addr_bits) - 1) OF STD_LOGIC_VECTOR ((data_bits / 4) - 1 DOWNTO 0);               	VARIABLE Addr_in 	: STD_LOGIC_VECTOR ((addr_bits - 1) DOWNTO 0) := (OTHERS => '0');        VARIABLE first_Addr 	: STD_LOGIC_VECTOR (1 DOWNTO 0) := (OTHERS => '0');        VARIABLE Addr_read 	: STD_LOGIC_VECTOR ((addr_bits - 1) DOWNTO 0) := (OTHERS => '0');        VARIABLE Addr_write 	: STD_LOGIC_VECTOR ((addr_bits - 1) DOWNTO 0) := (OTHERS => '0');        VARIABLE bAddr0, bAddr1 : STD_LOGIC := '0';        VARIABLE bank0 		: memory_array;        VARIABLE bank1 		: memory_array;        VARIABLE bank2 		: memory_array;        VARIABLE bank3 		: memory_array;        VARIABLE ce_in 		: STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";        VARIABLE rw_in 		: STD_LOGIC_VECTOR (2 DOWNTO 0) := "111";        VARIABLE bwa_in 	: STD_LOGIC_VECTOR (2 DOWNTO 0) := "000";        VARIABLE bwb_in 	: STD_LOGIC_VECTOR (2 DOWNTO 0) := "000";        VARIABLE bwc_in 	: STD_LOGIC_VECTOR (2 DOWNTO 0) := "000";        VARIABLE bwd_in 	: STD_LOGIC_VECTOR (2 DOWNTO 0) := "000";        VARIABLE bcnt 		: STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";		variable FIRST		: boolean := true;	file TCF : text open read_mode is fname;	variable rectype : std_logic_vector(3 downto 0);  	variable recaddr : std_logic_vector(31 downto 0);  	variable reclen  : std_logic_vector(7 downto 0);  	variable recdata : std_logic_vector(0 to 16*8-1);	variable CH : character;	variable ai : integer := 0;	variable L1 : line;    BEGIN      if FIRST then      L1:= new string'("");      while not endfile(TCF) loop        readline(TCF,L1);        if (L1'length /= 0) then          while (not (L1'length=0)) and (L1(L1'left) = ' ') loop            std.textio.read(L1,CH);          end loop;          if L1'length > 0 then            std.textio.read(L1, ch);            if (ch = 'S') or (ch = 's') then              hexread(L1, rectype);              hexread(L1, reclen);	      recaddr := (others => '0');	      case rectype is 		when "0001" =>                  hexread(L1, recaddr(15 downto 0));		when "0010" =>                  hexread(L1, recaddr(23 downto 0));		when "0011" =>                  hexread(L1, recaddr);		  recaddr(31 downto 24) := (others => '0');		when others => next;	      end case;              hexread(L1, recdata);              ai := conv_integer(recaddr)/4; 	      for i in 0 to 3 loop                bank3 (ai+i) := '0' & recdata((i*32) to (i*32+7));		bank2 (ai+i) := '0' & recdata((i*32+8) to (i*32+8+7));		bank1 (ai+i) := '0' & recdata((i*32+16) to (i*32+16+7));		bank0 (ai+i) := '0' & recdata((i*32+24) to (i*32+24+7));	      end loop;            end if;          end if;        end if;      end loop;      FIRST := false;    end if;			WAIT ON Clk;        IF Clk'EVENT AND Clk = '1' THEN            IF CEN_n = '0' AND Zz = '0' THEN                -- Write Address Register                Addr_write := Addr_read;                -- Read Address Register                Addr_read := Addr_in ((addr_bits - 1) DOWNTO 2) & bAddr1 & bAddr0;                -- Address Register                IF AdvLd_n = '0' and ce = '1' THEN                  Addr_in := Addr;                  first_Addr := Addr(1 DOWNTO 0);                  bcnt := Addr(1 DOWNTO 0);              END IF;                -- Burst Logic              IF Mode = '0' AND AdvLd_n = '1' THEN                  bcnt := bcnt + 1;              ELSIF Mode = '1' AND AdvLd_n = '1' THEN			IF (CONV_INTEGER1 (first_Addr) REM 2 = 0) THEN                  		bcnt := bcnt + 1;			ELSIF (CONV_INTEGER1 (first_Addr) REM 2 = 1) THEN                  		bcnt := bcnt - 1;              		END IF;              END IF;				                  bAddr1 := bcnt (1);                  bAddr0 := bcnt (0);                -- Read Logic                ce_in (0) := ce_in (1);                IF AdvLd_n = '0' THEN                    ce_in (1) := ce;                END IF;                rw_in (0) := rw_in (1);                rw_in (1) := rw_in (2);                IF AdvLd_n = '0' THEN                    rw_in (2) := NOT(ce AND NOT(Rw_n));                END IF;                -- Write Registry and Data Coherency Control Logic                bwa_in (0) := bwa_in (1);                bwb_in (0) := bwb_in (1);                bwc_in (0) := bwc_in (1);                bwd_in (0) := bwd_in (1);                bwa_in (1) := bwa_in (2);                bwb_in (1) := bwb_in (2);                bwc_in (1) := bwc_in (2);                bwd_in (1) := bwd_in (2);                bwa_in (2) := Bwa_n;                bwb_in (2) := Bwb_n;                bwc_in (2) := Bwc_n;                bwd_in (2) := Bwd_n;                -- Write Data to Memory                IF rw_in (0) = '0' AND bwa_in (0) = '0' THEN                    bank0 (CONV_INTEGER1 (Addr_write)) := '0' & Dq ( ((data_bits-4) / 4) - 1 DOWNTO  0);                END IF;                IF rw_in (0) = '0' AND bwb_in (0) = '0' THEN                    bank1 (CONV_INTEGER1 (Addr_write)) := '0' & Dq (((data_bits-4) / 2 - 1) DOWNTO  ((data_bits-4) / 4));                END IF;                IF rw_in (0) = '0' AND bwc_in (0) = '0' THEN                    bank2 (CONV_INTEGER1 (Addr_write)) := '0' & Dq ((3 * ((data_bits-4) / 4)) - 1 DOWNTO  ((data_bits-4) / 2));                END IF;                IF rw_in (0) = '0' AND bwd_in (0) = '0' THEN                    bank3 (CONV_INTEGER1 (Addr_write)) := '0' & Dq ((data_bits-4) - 1 DOWNTO  (3 * ((data_bits-4) / 4)));                END IF;            END IF;		Addr_read_sig	<= Addr_read;            -- Read Data from Memory Array            IF ce_in (0) = '1' AND rw_in (1) = '1' THEN                dout (((data_bits-4) / 4) - 1 DOWNTO  0) <= bank0 (CONV_INTEGER1 (Addr_read))(7 downto 0);                dout (((data_bits-4) / 2 - 1) DOWNTO  ((data_bits-4) / 4)) <= bank1 (CONV_INTEGER1 (Addr_read))(7 downto 0);                dout ((3 * ((data_bits-4) / 4)) - 1 DOWNTO  ((data_bits-4) / 2)) <= bank2 (CONV_INTEGER1 (Addr_read))(7 downto 0);                dout ((data_bits-4) - 1 DOWNTO  (3 * ((data_bits-4) / 4))) <= bank3 (CONV_INTEGER1 (Addr_read))(7 downto 0);--                dout ((data_bits / 4) - 1 DOWNTO  0) <= bank0 (CONV_INTEGER1 (Addr_read));--                dout ((data_bits / 2 - 1) DOWNTO  (data_bits / 4)) <= bank1 (CONV_INTEGER1 (Addr_read));--                dout ((3 * (data_bits / 4)) - 1 DOWNTO  (data_bits / 2)) <= bank2 (CONV_INTEGER1 (Addr_read));--                dout (data_bits - 1 DOWNTO  (3 * (data_bits / 4))) <= bank3 (CONV_INTEGER1 (Addr_read));            ELSE                dout <= (OTHERS => 'Z');            END IF;       END IF;    END PROCESS;END behave;

⌨️ 快捷键说明

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