2 回答
TA贡献1921条经验 获得超9个赞
你对于verilog的写法有很多不符合规范的
比如你的状态机在left:begin end之后接了一个时序逻辑然后又判断right;
比如你进入状态之后还在进行时序判断;
比如你的
case(current_state1)
2’b00:{l1,l2,l3}={1,0,0};next_state1=2’b01;
2’b01:{l1,l2,l3}={1,1,0};next_state1=2’b10;
2’b10:{l1,l2,l3}={1,1,1};next_state1=2’b11;
2’b11: {l1,l2,l3}={0,0,0};next_state1=2’b00;
endcase
这段程序里面,同一个状态下的两条语句需要加begin end括起来用;
建议:1、看一下状态机的写法,分为一段,两段,三段式的,建议二段或者三段式写法,容易规划,别人看也容易些
2、写verilog要记得,你写的东西就是电路,在脑袋里面要有电路的概念;
3、建议先看下成熟的verilog程序,看下别人怎么组织语言的
TA贡献1802条经验 获得超4个赞
太乱了,怎么把always写到case里了?always块里怎么能嵌套always呢?状态机的状态跳一般这样写:
always @(posedge clk or negedge rst_n)
if(!rst_n)
cureent_state<=normal;
else
cureent_state<=next_state;
然后再写状态机主体;
always @(posedge clk or negedge rst_n)
if(!rst_n)
……
……
else
case(en)
normal: begin
.........
next_state<=stop;
end
stop: begin
.........
next_state<=left;
end
left:
...。。。。
。。。。
- 2 回答
- 0 关注
- 278 浏览
添加回答
举报
