求助高手帮帮帮小白的verilog吧,下面内容总是报错,请问该怎么解决?

module traffic_light(ncr,cp,en,r1,r2,r3,l1,l2,l3);
input ncr,cp;
input [1:0]en;
output r1,r2,r3,l1,l2,l3;
reg r1,r2,r3,l1,l2,l3;
reg [1:0] current_state1,next_state1,current_state2,next_state2;
parameter normal=2'b00,stop=2'b01,left=2'b10,right=2'b11;
always 
/*begin
r1=0;r2=0;r3=0;l1=0;l2=0;l3=0;
end*/
case(en)
normal:begin {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0}; end
stop:begin
always@(cp)
if(~ncr) {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};
else if (cp)
{r1,r2,r3,l1,l2,l3}={1,1,1,1,1,1};
else {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};
end
left:begin
always @(posedge cp)begin
if(~ncr) {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};
s1=00;
else
current_state1=next_state1;
end
always@(current_state1)
begin
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
end
right:begin
always @(posedge cp)begin
if(~ncr) {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};
s1=00;
else
current_state2=next_state2;
end
always@(current_state2)
begin
case(current_state2) 
2’b00:{r1,r2,r3}={1,0,0};next_state2=2’b01;
2’b01:{r1,r2,r3}={1,1,0};next_state2=2’b10;
2’b10:{r1,r2,r3}={1,1,1};next_state2=2’b11;
2’b11: {r1,r2,r3}={0,0,0};next_state2=2’b00;
endcase
end
endmodule

呼如林
浏览 280回答 2
2回答

郎朗坤

你对于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程序,看下别人怎么组织语言的

慕虎7371278

太乱了,怎么把always写到case里了?always块里怎么能嵌套always呢?状态机的状态跳一般这样写:always @(posedge clk or negedge rst_n)if(!rst_n)cureent_state<=normal;elsecureent_state<=next_state;然后再写状态机主体;always @(posedge clk or negedge rst_n)if(!rst_n)…………elsecase(en)normal: begin.........next_state<=stop;endstop: begin.........next_state<=left;endleft:...。。。。。。。。
打开App,查看更多内容
随时随地看视频慕课网APP