obsługujący read-during-write

Jul 08, 2014 3 Replies
Jump to replies (3)

Przeglądając tutoriale na temat sposobów pisania kodu HDL tak, żeby syntetyzator maksymalnie wykorzystał specjalizowane bloki FPGA natknąłem się na prosty przykład pamięci RAM obsługującej operacje typu read during write:



ARCHITECTURE rtl OF single_clock_ram IS TYPE MEM IS ARRAY(0 TO 31) OF STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL ram_block: MEM; BEGIN PROCESS (clock) BEGIN IF (clock'event AND clock = '1') THEN IF (we = '1') THEN ram_block(write_address) <= data; END IF; q <= ram_block(read_address); -- VHDL semantics imply that q doesn't get data -- in this clock cycle END IF; END PROCESS; END rtl;



Nie do końca rozumiem dlaczego niby to: q <= ram_block(read_address); ma się wykonać dopiero przy następnym wejściu w proces? Że niby jak jest spełniony IF we='1' to wszystko poza nim się nie wykona?


W dniu 2014-07-08 21:07, Jakub Rakus pisze:

Poczytaj o różnicach pomiędzy signal i variable.

Wprost mówiąc :

Jeżeli sygnały ( signal ) wewnątrz procesu mają przypisaną nową "wartość" to jest ona "widziana" dopiero po restarcie procesu.

Jeżeli zmienne ( variable ) wewnątrz procesu mają przypisaną nową "wartość" to jest ona "widziana" już w następnej "instrukcji" sekwencyjnej.

Tak proces "wykonuje" się sekwencyjnie ( zaraz mnie ktoś zamorduje ).

Pzdr

Adam

W dniu 2014-07-08 21:07, Jakub Rakus pisze:

Zapomniałem odpowiedzieć na twoje pytanie. Wykona się. Powiedziałbym że się zdarzy. Tyle że q będzie miała starą wartość.

Dla uproszczenia wyobraź sobie że mamy tylko jedną komórkę tej pamięci. Jedno słowo 32 bitowe. Ram_block przyjmie nową wartość kiedy we ='1' ale PO zdarzeniu , którym jest narastające zbocze zegara.

Kiedy występuje zbocze zegara ram_block ma ciągle starą wartość. I właśnie ta stara wartość zostanie zatrzaśnięta w q.

Podobno dla programisty nie ma znaczenia w czym programuje, ale tu jest wyjątkowo pod górę bo są konstrukcje które nie mają sensy z punktu widzenia programisty.

Adam

Dzięki za proste i zrozumiałe wytłumaczenie problemu, teraz już kumam!

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required