2012-08-13 60 views
2

您如何最智能地设计用于初始化芯片的VHDL状态机。用于初始化的设计VHDL状态机

我当前设计是(在伪代码):

....
....
情况下状态:
当S0 =>
VHDL_CODE_FOR_WRITING_VALUE_TO_REGISTER
状态:= S1 ;
当s1 =>
VHDL_CODE_FOR_WRITING_ANOTHER_VALUE_TO_REGISTER
state:= s1;
当S2 =>
DO_SOMETHING_ELSE_TO_FINISH_INIT
....
....
端壳体;

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

这让我觉得必须有一个更聪明的方法(它仍然是合成能够)?

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

回答

3

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

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。

2

虽然VHDL应答者(包括我)的连续副歌是“思考的硬件,而不是软件”,这一次的软件思维过程是服务,你还有一个:)

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