设计用于初始化的VHDL状态机

时间:2012-08-13 15:15:41

标签: vhdl

如何最智能地设计VHDL状态机来初始化芯片。

我目前的设计是(伪代码):

  

....
  ....
  案件状态:
  当s0 =>
时     VHDL_CODE_FOR_WRITING_VALUE_TO_REGISTER
    state:= s1;
  当s1 =>
时     VHDL_CODE_FOR_WRITING_ANOTHER_VALUE_TO_REGISTER
    state:= s1;
  当s2 =>
时     DO_SOMETHING_ELSE_TO_FINISH_INIT
  ....
  ....
  结束案例;

s0和s1中的代码仅与写入寄存器的值不同。

这让我觉得必须有更聪明的方法(仍然是Synthesize)?

是什么让我觉得可以更聪明地做点什么,是“不要重复自己”,但我不确定这是否适用于VHDL。

2 个答案:

答案 0 :(得分:3)

如果在状态s0和s1中有共同的赋值,请将其从case语句中拉出来。

case state:
when s0 =>    
    a <= '0';
    b <= '1';
    c <= '0';
    nextState <= s1;
when s1 =>    
    a <= '0';
    b <= '1';
    c <= '1';
    nextState <= s2;
when s2 =>    
    a <= '1';
    b <= '0';
    c <= '1';
endcase;

......会变成......

a <= '0';
b <= '1';
c <= '1';

case state:
when s0 =>    
    c <= '0';
    nextState <= s1;
when s1 =>    
    nextState <= s2;
when s2 =>    
    a <= '1';
    b <= '0';
endcase;

...或者如果这不合适,请将代码拉入函数并在每种情况下调用它。

虽然没有关于此的VHDL具体内容。

答案 1 :(得分:2)

虽然VHDL回答者(包括我)的持续克制是“思考硬件,而不是软件”,但这次软件思维过程是为你服务的过程:)

通常的don't repeat yourself(DRY)解决方案是在函数或过程中封装所需的行为。你可以在VHDL中做到这一点,任何有能力的工具都可以使用它。