首页 文章

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

提问于
浏览
2

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

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

.... .... case state:当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 回答

  • 2

    如果在状态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具体内容 .

  • 3

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

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

相关问题