如何最智能地设计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。
答案 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中做到这一点,任何有能力的工具都可以使用它。