Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library IEEE;
- use IEEE.STD_LOGIC_1164.all;
- use IEEE.STD_LOGIC_ARITH.all;
- use IEEE.STD_LOGIC_UNSIGNED.all;
- entity CodeROM is
- Generic(
- n:integer := 11; -- code word size
- m:integer := 127; -- ROM length
- k:integer := 7); -- adress bus size
- Port(
- Code_Read: in std_logic;
- Code_Adr: in std_logic_vector(k-1 downto 0);
- Code_Out: out std_logic_vector(n-1 downto 0));
- end CodeROM;
- architecture CodeROM_arch of CodeROM is
- subtype ROM_WORD is std_logic_vector(n-1 downto 0);
- type ROM_TYPE is array(0 to m-1) of ROM_WORD;
- signal Rom: ROM_TYPE := (
- "00000000000", -- push width
- "00000000001", -- push height
- "01110000000", -- mul
- "00000000000", -- push width
- "10000000000", -- sub
- "00010000001", -- pushc 1
- "10000000000", -- sub
- "00110000101", -- pop maxI
- "00000000000", -- push width
- "00010000001", -- pushc 1
- "01010000000", -- add
- "00110000100", -- pop i
- "00000000010", -- push source
- "00110000111", -- pop topL
- "00000000010", -- push source
- "00010000001", -- pushc 1
- "01100000000", -- addk
- "00110001000", -- pop top
- "00010000010", -- pushc 2
- "01100000000", -- addk
- "00110001001", -- pop topR
- "00000000000", -- push width
- "01100000000", -- addk
- "00110001010", -- pop left
- "00000000000", -- push width
- "01100000000", -- addk
- "00010000010", -- pushc 2
- "01010000000", -- add
- "00110001011", -- pop right
- "00000000000", -- push width
- "00010000010", -- pushc 2
- "01110000000", -- mul
- "01100000000", -- addk
- "00110001100", -- pop botL
- "00000000000", -- push width
- "00010000010", -- pushc 2
- "01110000000", -- mul
- "01100000000", -- addk
- "00010000001", -- pushc 1
- "01010000000", -- add
- "00110001101", -- pop bot
- "00000000000", -- push width
- "00010000010", -- pushc 2
- "01110000000", -- mul
- "01010000000", -- add
- "00010000010", -- pushc 2
- "01010000000", -- add
- "00110001110", -- pop botR
- "00000000011", -- push dest
- "00000000100", -- push i
- "01010000000", -- add
- "00110000110", -- pop destAdr
- "00100000111", -- pushr topL
- "00100001001", -- pushr topR
- "10000000000", -- sub
- "00100001010", -- pushr left
- "00010000010", -- pushc 2
- "01110000000", -- mul
- "01010000000", -- add
- "00100001011", -- pushr right
- "00010000010", -- pushc 2
- "01110000000", -- mul
- "10000000000", -- sub
- "00100001100", -- pushr botL
- "01010000000", -- add
- "00100001110", -- pushr botR
- "10000000000", -- sub
- "10010000000", -- abs
- "00100001100", -- pushr botL
- "00100001101", -- pushr bot
- "00010000010", -- pushc 2
- "01110000000", -- mul
- "01010000000", -- add
- "00100001110", -- pushr botR
- "01010000000", -- add
- "00100000111", -- pushr topL
- "10000000000", -- sub
- "00100001000", -- pushr top
- "00010000010", -- pushc 2
- "01110000000", -- mul
- "10000000000", -- sub
- "00100001001", -- pushr topR
- "10000000000", -- sub
- "10010000000", -- abs
- "01010000000", -- add
- "01000000110", -- popr destAdr
- "00000000100", -- push i
- "00010000010", -- pushc 2
- "01010000000", -- add
- "00000000000", -- push width
- "10100000000", -- mod
- "10111011110", -- jgz CONTINUE
- "00010000011", -- pushc 3 // Push Delta
- "11001011111", -- jmp END_IF
- "00010000001", -- pushc 1 // Push Delta
- "00000000111", -- push topL
- "01100000000", -- addk
- "00110000111", -- pop topL
- "00000001000", -- push top
- "01100000000", -- addk
- "00110001000", -- pop top
- "00000001001", -- push topR
- "01100000000", -- addk
- "00110001001", -- pop topR
- "00000001010", -- push left
- "01100000000", -- addk
- "00110001010", -- pop left
- "00000001011", -- push right
- "01100000000", -- addk
- "00110001011", -- pop right
- "00000001100", -- push botL
- "01100000000", -- addk
- "00110001100", -- pop botL
- "00000001101", -- push bot
- "01100000000", -- addk
- "00110001101", -- pop bot
- "00000001110", -- push botR
- "01100000000", -- addk
- "00110001110", -- pop botR
- "00000000100", -- push i
- "01010000000", -- add
- "00110000100", -- pop i
- "00000000101", -- push maxI
- "00000000100", -- push i
- "10000000000", -- sub
- "10110110000", -- jgz LOOP
- "11010000000");-- halt
- begin
- Main:process(Code_Read, Code_Adr)
- begin
- if (Code_Read = '1') then
- Code_Out <= Rom(CONV_INTEGER(Code_Adr));
- end if;
- end process;
- end CodeROM_arch;
Advertisement
Add Comment
Please, Sign In to add comment