Forum Discussion
Altera_Forum
Honored Contributor
17 years agoHi Guys
This is what eventually seems to have worked - it ain't pretty but it does the job: IBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; --------------------------------------------------------- ENTITY basic_ram IS PORT ( clock : IN STD_LOGIC; addr : IN STD_LOGIC_VECTOR(4 DOWNTO 0); -- Data port address data : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- Data port awr_n : IN STD_LOGIC; -- Date port write ard_n : IN STD_LOGIC; -- Data port read acs_n : IN STD_LOGIC); -- Data port chip select END basic_ram; --------------------------------------------------------- ARCHITECTURE behavior OF basic_ram IS TYPE vector_array IS ARRAY (0 TO 31) OF STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL memory : vector_array; BEGIN PROCESS(awr_n) BEGIN IF RISING_EDGE(awr_n) THEN IF acs_n='0' AND ard_n='1' THEN memory(CONV_INTEGER(UNSIGNED(addr))) <= data; END IF; END IF; END PROCESS; data <= memory(0) WHEN addr = "00000" ELSE memory(1) WHEN addr = "00001" ELSE memory(2) WHEN addr = "00010" ELSE memory(3) WHEN addr = "00011" ELSE memory(4) WHEN addr = "00100" ELSE memory(5) WHEN addr = "00101" ELSE memory(6) WHEN addr = "00110" ELSE memory(7) WHEN addr = "00111" ELSE memory(8) WHEN addr = "01000" ELSE memory(9) WHEN addr = "01001" ELSE memory(10) WHEN addr = "01010" ELSE memory(11) WHEN addr = "01011" ELSE memory(12) WHEN addr = "01100" ELSE memory(13) WHEN addr = "01101" ELSE memory(14) WHEN addr = "01110" ELSE memory(15) WHEN addr = "01111" ELSE memory(16) WHEN addr = "10001" ELSE memory(17) WHEN addr = "10010" ELSE memory(18) WHEN addr = "10011" ELSE memory(19) WHEN addr = "10100" ELSE memory(20) WHEN addr = "10101" ELSE memory(21) WHEN addr = "10110" ELSE memory(22) WHEN addr = "10111" ELSE memory(23) WHEN addr = "11000" ELSE memory(24) WHEN addr = "11001" ELSE memory(25) WHEN addr = "11010" ELSE memory(26) WHEN addr = "11011" ELSE memory(27) WHEN addr = "11100" ELSE memory(28) WHEN addr = "11101" ELSE memory(29) WHEN addr = "11110" ELSE memory(30) WHEN addr = "11111" ELSE (others => 'Z'); END behavior; I'm assuming that the WHEN/ELSE stuff could be collapsed into the following line: data <= memory(CONV_INTEGER(UNSIGNED(addr))); Thanks for the tips! Kurt