Usually in cases when you need to execute N repetitive actions in one state (like you described, waiting N ns, writting to N addresses.) it is often used a counter in it. Hope the following example may clarify it a bit:
process(clk, rst) begin if (rst = '1') then index <= 0; -- memory address current_s <= write_memory ; currentValue <= (others => '0'); elsif rising_edge(clk) then case curresnt_s is when write_memory => if index < ADDRESS_SIZE then index <= index + 1; memory(index) <= currentValue; else curresnt_s <= done; end if; when done => null; end case; end case;
In this code memory would be an array of std_logic_vector; You could use the same idea to wait for 100ns. if you know your clock runs at 10ns period, you could count to 10 in some state before changing to other.
CLICK HERE to find out more related problems solutions.