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

📄 memory.vhd

📁 for FPGA IMPLEMENTATION,OUR DATAPATH CREATED FOR TWO BIRS MULTIPLICATION
💻 VHD
字号:
-- ============================================================
-- 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -