📄 memory.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 + -