WebHU - Programozási kérdések és válaszok

Problémák a VHDL tömbök indexelésével

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?

03.06.2013

Válaszok:


1

Mivel az utasítás_t tömbként határozza meg (255-től 0-ig), előfordulhat, hogy a tömb inicializálása a szándékolttal ellenkező sorrendben történik.

A (LOAD & x"07") a ROM(255)-hez lesz hozzárendelve, a (ADD & x"05") a ROM(254) lesz hozzárendelve stb.

A probléma elkerülése érdekében a instruction_t típust array (0 to 255)-ként határozza meg.

03.06.2013

2

A probléma megoldásának másik módja az lett volna, ha az utasításokat a kívánt címekhez köti, ahelyett, hogy csak azt várná, hogy megtörténjen: ehhez használja a named asszociációt, és írja be

constant ROM :
instruction_t :=
(
   0 => (LOAD & x"07"),
   1 => (ADD & x"05"),
   -- some more code goes here
   others => x"0000"
);
03.06.2013
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..