State VHDL状态机与时钟

State VHDL状态机与时钟,state,vhdl,State,Vhdl,我有一个关于VHDL中使用的状态机的一般性问题。我听说每个状态都是在一个时钟周期内处理的 假设我有一个状态,需要一个以上的时钟周期才能完成。例如,如果我想在一个状态中等待几秒钟。这能做到吗 或者如果我有一个状态,我想写入一个需要10个时钟周期(10个地址)来填充的块内存。这可以在通常用于表示状态机的case语句中完成吗?通常在需要在一种状态下执行N个重复操作的情况下(如您所述,等待N个ns,写入N个地址)。它通常用作计数器。希望下面的例子可以澄清一点: process(clk, rst) beg

我有一个关于VHDL中使用的状态机的一般性问题。我听说每个状态都是在一个时钟周期内处理的

假设我有一个状态,需要一个以上的时钟周期才能完成。例如,如果我想在一个状态中等待几秒钟。这能做到吗


或者如果我有一个状态,我想写入一个需要10个时钟周期(10个地址)来填充的块内存。这可以在通常用于表示状态机的case语句中完成吗?

通常在需要在一种状态下执行N个重复操作的情况下(如您所述,等待N个ns,写入N个地址)。它通常用作计数器。希望下面的例子可以澄清一点:

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;
过程(时钟、rst)
开始
如果(rst='1'),则

index Hi@electrococuk,如果您想要一个需要一个以上周期的操作,您可以在该状态下运行计数器,然后在该计数器结束时移动到下一个状态。就像在你的例子中一样,将计数器设置为0并在每个时钟边缘递增,当它达到10时,重新输入计数器并移动到下一个状态。是的,可以做到。