memory.vhd

来自「for FPGA IMPLEMENTATION,OUR DATAPATH CRE」· VHDL 代码 · 共 91 行

VHD
91
字号
-- ============================================================
-- File Name: memory.vhd
-- ============================================================

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

PACKAGE memory_def IS
	
	SUBTYPE word IS STD_LOGIC_VECTOR(7 DOWNTO 0);
	TYPE mem IS ARRAY(NATURAL RANGE<>) OF word;	
	
END memory_def;

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE WORK.memory_def.ALL;

ENTITY memory IS
	--GENERIC(r_delay, w_delay : TIME);
	PORT 
	(
		clk		: IN STD_LOGIC;
		wr		: IN STD_LOGIC;
		memdr	: IN STD_LOGIC;
		addr	: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
		din		: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
		dout	: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
	);
END memory;

ARCHITECTURE behavior OF memory IS
	
	SIGNAL erom			: MEM (0 TO 255);
	SIGNAL addr_index	: INTEGER RANGE 0 TO 255;
	
--	SIGNAL t_d_change, t_d_write : TIME := 0 ps;

BEGIN

	addr_index <= CONV_INTEGER(addr);
	
	READ_MEM: PROCESS (memdr, wr, addr_index)
	BEGIN
		IF (memdr = '0') THEN
			--dout <= "ZZZZZZZZ" AFTER r_delay;
			dout <= "ZZZZZZZZ" AFTER 2 ns;
		ELSIF (memdr = '1') AND (wr = '0') THEN
			--dout <= erom(addr_index) AFTER r_delay;
			dout <= erom(addr_index) AFTER 2 ns;
		END IF;
	
	END PROCESS READ_MEM;
	
	WRITE_MEM: PROCESS (clk)
		VARIABLE init_flag	: BOOLEAN := TRUE;
	BEGIN
		IF (clk'EVENT AND clk = '1') THEN
			IF (init_flag) THEN		--initialize the memory at the first positive-edge of the clock
				FOR i IN 0 TO 255 LOOP
					erom(i) <= CONV_STD_LOGIC_VECTOR(i, 8);
				END LOOP;
				init_flag := FALSE;
		
			ELSIF (memdr = '1') AND (wr = '1') THEN
				--erom(addr_index) <= din AFTER w_delay;
				erom(addr_index) <= din AFTER 2 ns;	
			END IF;	
		END IF;

--		t_d_write <= NOW;
--		ASSERT (NOW - t_d_change >= 700 ps)
--			REPORT "DATA SETUP ERROR"
--			SEVERITY WARNING;

	END PROCESS WRITE_MEM;
	
--	DATA_CHANGE: PROCESS (din)
--	BEGIN
--		
--		t_d_change <= NOW;
--		ASSERT (NOW - t_d_write >= 300 ps)
--			REPORT "DATA HOLD ERROR"
--			SEVERITY WARNING;
--			
--	END PROCESS DATA_CHANGE;

END behavior;

⌨️ 快捷键说明

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