--This module implements an algorithm that takes 2 numbers --from an array of size 10 starting at mem[x100], adds them together --if the sum is between 999 and -999 then the sum is stored in an array --starting at mem[x110] --This program was created by --Eric Frohnhoefer --Ron Feliciano library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; use IEEE.std_logic_arith.all; entity ram_module is port(clk : in std_logic; enable : in std_logic; R_W : in std_logic; addr : in std_logic_vector (15 downto 0); data_in : in std_logic_vector (15 downto 0); data_out : out std_logic_vector (15 downto 0)); end ram_module; architecture BHV of ram_module is type memory is array (0 to 332) of std_logic_vector(15 downto 0); signal reg : memory := ( "0101000000100000", --AND R0, R0, x0000 "0010000000011111", --LD R0, size1 "0101001001100000", --AND R1, R1, x0000 "0010001000011110", --LD R1, array1 "0101010010100000", --AND R2, R2, x0000 "0010010000100000", --LD R2, array2 "0110011001000000", --LDR R3, R1, x0000 "0110100001000001", --LDR R4, R1, x0001 "0001011011000100", --ADD R3, R3, R4 "0100100000010001", --JSR RANGE "0000110000001101", --BRnz SKIP2 "0111011010000000", --STR R3 ,R2, x0000 "0001010010100001", --ADD R2, R2, x0001 "0001001001100010", --ADD R1, R1, x0002 "0001000000111110", --ADD R0, R0, xFFFE "0000001000000110", --BRp LOOP "1111000000100101", --HALT "0010100000100001", --LD R4, Pos999 "0001101011000100", --ADD R5, R3, R4 "0000011000010110", --BRzp SKIP "0101110110100000", --AND R6, R6, x0000 "1101000000000000", --RET "0010100000100010", --LD R4, Neg999 "0001101011000100", --ADD R5, R3, R4 "0000110000011011", --BRnz SKIP1 "0101110110100000", --AND R6, R6, x0000 "1101000000000000", --RET "0101110110100000", --AND R6, R6, x0000 "0001110110100001", --ADD R6, R6, x0001 "1101000000000000", --RET "0000000100000000", --array1 "0000000000001010", --size1 "0000000100010000", --array2 "0000001111100111", --Pos999 "1111110000011001", --Neg999 "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", --45 "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", --60 "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", --75 "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", --90 "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000001", "0000000000000001", "0000000000000001", "0000000000000001", "0000000000000001", "0000000000000001", --105 "0000000000000001", "0000000000000001", "0000000000000001", "0000000000000001", "0000000000000001", "0000000000000001", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", --120 "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000001", "0000000000000001", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000111001000011", --interger "0000000000000001", --interger "0000000000000001", --interger "0000000000000010", --interger "0000000000000010", --interger "0000101010101010", --interger "0000101010101010", --interger "0000101010101010", --interger "0000101010101010", --interger "0000101010101010", --interger "0000101010101010", --interger "0000101010101010", "0000101010101010", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000", "0000000000000000" ); begin process(clk, enable, R_W, addr) begin if (enable = '1') then if (clk = '1' and clk' event) then if (R_W = '1') then data_out <= reg(conv_integer(addr)); else reg(conv_integer(addr)) <= data_in; end if; else end if; end if; end process; end BHV;