Van egy feladatom, hogy készítsek egy egyszerű mikroprocesszort VHDL-ben. A kódom így néz ki
architecture Behavioral of uc is
type instruction_t is array (255 downto 0) of std_logic_vector (15 downto 0);
constant LOAD : std_logic_vector(7 downto 0) :=x"01";
--some more instruction codes defined
signal PC : std_logic_vector (7 downto 0); -- program counter
signal cur_inst : std_logic_vector (15 downto 0);
constant ROM :
instruction_t :=
(
(LOAD & x"07"),
(ADD & x"05"),
-- some more code goes here
others => x"0000"
);
begin
process (CLK, RESET) is
begin
if RESET = '1' then
-- do stuff
elsif rising_edge(CLK) then
cur_inst <= ROM(conv_integer(PC));
PC <= PC + 1;
-- some other stuff
end if;
end process;
end Behavioral;
A problémám ezzel a résszel van:
cur_inst <= ROM(conv_integer(PC));
mert egyszerűen nem történik semmi – cur_inst mindig nulla. próbáltam használni
cur_inst <= ROM(to_integer(unsigned(PC));
de az eredmény ugyanaz – nem kapok semmit. A PC megfelelően növekszik, de nem tudok olvasni semmit a ROM tömbből. Megpróbáltam a PC-t előjel nélküliként vagy egészként is meghatározni, de az eredmény ugyanaz. Mit csinálok rosszul?