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?