obsługujący read-during-write

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?

Reply to
Jakub Rakus
Loading thread data ...

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

Reply to
Adam Górski

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

Reply to
Adam Górski

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

Reply to
Jakub Rakus

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.