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

📄 ex_2_3_3_stack.vhd

📁 This is the course for VHDL programming
💻 VHD
字号:
--Linked listlibrary IEEE;use IEEE.std_logic_1164.all;entity STACK is	port(DIN :in  std_logic_vector(7 downto 0);			DOUT:out std_logic_vector(7 downto 0);			PUSH,POP:in std_logic;			UFLOW,OFLOW:out std_logic);end STACK;architecture a of STACK is	type ELEMENT_REC;-- Incomplete type - forward declaration	type ELEMENT_PTR_T is access ELEMENT_REC;	type ELEMENT_REC is record		DATA : std_logic_vector(7 downto 0);		NEXT_PTR: ELEMENT_PTR_T;	end record;begin	process(PUSH,POP,DIN)		variable HEAD_PTR: ELEMENT_PTR_T := NULL;		variable TEMP_PTR: ELEMENT_PTR_T := NULL;		variable COUNT : integer :=0;	begin		if PUSH'event and PUSH = '1' then			if COUNT < 4 then				COUNT := COUNT + 1;				TEMP_PTR := new ELEMENT_REC;				TEMP_PTR.DATA := DIN; TEMP_PTR.NEXT_PTR := HEAD_PTR;				HEAD_PTR := TEMP_PTR;				OFLOW <= '0';			else 				OFLOW <= '1';				assert false report("Stack Full");			end if;		elsif POP'event and POP = '1' then			if HEAD_PTR /= NULL then				DOUT <= HEAD_PTR.DATA;				TEMP_PTR := HEAD_PTR;				HEAD_PTR := TEMP_PTR.NEXT_PTR;				deallocate(TEMP_PTR);				UFLOW <= '0';			else 				assert false report("Stack Empty");				UFLOW <= '1';			end if;		end if;	end process;end a;library IEEE;use IEEE.std_logic_1164.all;entity TB_STACK isend TB_STACK;architecture a of TB_STACK is	signal 		DIN,DOUT :std_logic_vector(7 downto 0);	signal		PUSH,POP,UFLOW,OFLOW: std_logic:='0';	component STACK		port(DIN :in  std_logic_vector(7 downto 0);			DOUT:out std_logic_vector(7 downto 0);			PUSH,POP:in std_logic;			UFLOW,OFLOW:out std_logic);	end component;	begin		STK:STACK port map(DIN,DOUT,PUSH,POP,UFLOW,OFLOW);	process	begin	    DIN <= "00000001";PUSH <= '1';wait for 10 ns;PUSH <= '0';wait for 10 ns;	    DIN <= "00000011";PUSH <= '1';wait for 10 ns;PUSH <= '0';wait for 10 ns;	    DIN <= "00000111";PUSH <= '1';wait for 10 ns;PUSH <= '0';wait for 10 ns;	    DIN <= "00001111";PUSH <= '1';wait for 10 ns;PUSH <= '0';wait for 10 ns;	    DIN <= "00011111";PUSH <= '1';wait for 10 ns;PUSH <= '0';wait for 10 ns;	    POP <= '1';wait for 10 ns;POP <= '0';wait for 10 ns;	    POP <= '1';wait for 10 ns;POP <= '0';wait for 10 ns;	    POP <= '1';wait for 10 ns;POP <= '0';wait for 10 ns;			    POP <= '1';wait for 10 ns;POP <= '0';wait for 10 ns;	    POP <= '1';wait for 10 ns;POP <= '0';wait for 10 ns;	    wait;	end process;end a;

⌨️ 快捷键说明

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