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.