2012-08-13 3 views
2

칩을 초기화하는 VHDL 상태 머신을 가장 똑똑하게 설계하는 방법은 무엇입니까?
....
케이스 상태 ....초기화 용 VHDL 상태 머신 설계

:

나의 현재 디자인 (의사 코드)이다
때 S0 =>
VHDL_CODE_FOR_WRITING_VALUE_TO_REGISTER
상태 = S1 ;
s1 =>
VHDL_CODE_FOR_WRITING_ANOTHER_VALUE_TO_REGISTER
상태 : = 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에 대한 구체적인 내용은 없습니다. VHDL의 답변자 (나를 포함)의 연속 후렴이지만

2

, 이번에는 소프트웨어 생각 과정은 당신을 잘 봉사하는 일 :

일반적인 don't repeat yourself(DRY) 솔루션을 캡슐화하는 것입니다 "하드웨어, 소프트웨어가 아닌 생각" 함수 나 프로 시저에서 원하는 동작. 당신은 VHDL에서 이것을 할 수 있으며 어떤 유능한 도구라도 괜찮을 것입니다.