//3rd always block, the sequential FSM output<br>
always @ (posedge clk or negedge nrst)<br>
if (!nrst)<br>
{o1,o2,err} <= 3'b000;<br>
else<br>
begin<br>
{o1,o2,err} <= 3'b000;<br>
case (NS)<br>
IDLE: {o1,o2,err}<=3'b000;<br>
S1: {o1,o2,err}<=3'b100;<br>
S2: {o1,o2,err}<=3'b010;<br>
ERROR: {o1,o2,err}<=3'b111;<br>
endcase<br>
end<br>
<br>
个人认为,一个成熟的逻辑设计人员,是不应该写出这样的代码的。代码中不应该存在冗余代码,也不应该出现同一时刻多次赋值的情况,因为不利于理解。一个好的代码还要讲究缩进。我更改后的代码:<br>
always @ (posedge clk or negedge nrst)<br>
if (!nrst)<br>
{o1,o2,err} <= 3'b000;<br>
else<br>
case (NS)<br>
IDLE : {o1,o2,err} <= 3'b000;<br>
S1 : {o1,o2,err} <= 3'b100;<br>
S2 : {o1,o2,err} <= 3'b010;<br>
ERROR : {o1,o2,err} <= 3'b111;<br>
default : {o1,o2,err} <= 3'b000;<br>
endcase<br>
<br>
<br>
另外,这种写法也不推荐。因为从代码背后的机制看,err这个比特只跟error这个状态相关,但是这种写法就和idle,s1,s2等其他状态相关了,好的综合工具可能会综合成不相关,不好的综合工具可能会综合成相关,从而浪费资源,如果资源紧张的话,会加重资源的紧张度。<br>
<br>
[ 本帖最后由 caesar000 于 2006-11-22 10:22 编辑 ] |