猿问

以下是关于verilog的一个小程序问题,麻烦帮忙看看怎么解决~

module light(R2,R1,R0,L2,L1,L0,I3,I2,I1,clk);
input clk,I3,I2,I1;
output R2,R1,R0,L2,L1,L0;
wire[2:0] A;
assign A={I3,I2,I1};

reg R2,R1,R0,L2,L1,L0;

reg[2:0] Q;
reg[2:0] state,nextstate;

parameter state0=3'b000,state1=3'b001,
state2=3'b010,state3=3'b011,
state4=3'b100,state5=3'b101,
state6=3'b110,state7=3'b111;

always@(posedge clk)
begin //begin end 
state<=nextstate;
end

always@(state)
begin 
case(state)
state0:begin nextstate<=state1; end
state1:begin nextstate<=state2; end
state2:begin nextstate<=state4; end
state3:begin nextstate<=state6; end
state4:begin nextstate<=state1; end
state5:begin nextstate<=state2; end
state6:begin nextstate<=state4; end
state7:begin nextstate<=state6; end
default:;
endcase
end 

always@(state)
begin
case(state)
state1:Q<=3'b110;
state2:Q<=3'b101;
state4:Q<=3'b011;
default Q<=111;
endcase
end

always@(A)
begin
case(A)
3'b000:begin R2=1;R1=1;R0=1;L2=1;L1=1;L0=1;end
3'b010:begin {R2,R1,R0}=Q;L2=1;L1=1;L0=1;end
3'b001:begin R2=1;R1=1;R0=1;{L0,L1,L2}=Q;end
3'b100:begin R2=0;R1=0;R0=0;L2=0;L1=0;L0=0;end
default:;
endcase
end
endmodule

I1,I2,I3是三个按键,R1~3 L1~3分别连发光二极管,低电平亮。想分别按键控制 R循环亮,L循环亮,全亮。状态机是做循环周期为3的唤醒计数器,但是仿真结果如下图,没有出效果,问题出在哪儿?有高手解答。谢谢!



撒科打诨
浏览 213回答 1
1回答

慕容708150

没咋看懂你的程序,感觉状态机有点乱,电路中还是尽量不要有latch,而且代码应该规范点。发一个我写的吧,程序不好,将就看看,希望对你有帮助module&nbsp;test(&nbsp;&nbsp;&nbsp;clk,&nbsp;&nbsp;&nbsp;rst_n,&nbsp;&nbsp;&nbsp;R,&nbsp;&nbsp;&nbsp;L,&nbsp;&nbsp;&nbsp;I&nbsp;&nbsp;&nbsp;);&nbsp;&nbsp;&nbsp;input&nbsp;clk;input&nbsp;rst_n;input&nbsp;[2:0]&nbsp;I;//output&nbsp;[2:0]&nbsp;R;output&nbsp;[2:0]&nbsp;L;reg&nbsp;[2:0]&nbsp;R;reg&nbsp;[2:0]&nbsp;L;reg[2:0]&nbsp;Q;reg[3:0]&nbsp;state,nstate;parameter&nbsp;&nbsp;IDLE&nbsp;=&nbsp;4'b0001,//&nbsp;kong&nbsp;xian&nbsp;&nbsp;&nbsp;Cycle_L&nbsp;=&nbsp;4'b0010,&nbsp;&nbsp;&nbsp;Cycle_R&nbsp;=&nbsp;4'b0100,&nbsp;&nbsp;&nbsp;NON_Cycle&nbsp;=&nbsp;4'b1000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Cycle_R2&nbsp;=&nbsp;4'b1001,&nbsp;&nbsp;&nbsp;Cycle_R1&nbsp;=&nbsp;4'b1010,&nbsp;&nbsp;&nbsp;Cycle_R0&nbsp;=&nbsp;4'b1011,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Cycle_L2&nbsp;=&nbsp;4'b1100,&nbsp;&nbsp;&nbsp;Cycle_L1&nbsp;=&nbsp;4'b1101,&nbsp;&nbsp;&nbsp;Cycle_L0&nbsp;=&nbsp;4'b1110;&nbsp;&nbsp;&nbsp;always&nbsp;@&nbsp;(posedge&nbsp;clk)&nbsp;if(!rst_n)&nbsp;&nbsp;state&nbsp;<=&nbsp;IDLE;&nbsp;else&nbsp;&nbsp;state&nbsp;<=&nbsp;nstate;always&nbsp;@&nbsp;(state&nbsp;or&nbsp;I)&nbsp;begin&nbsp;&nbsp;&nbsp;case(state)&nbsp;&nbsp;&nbsp;IDLE:&nbsp;begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R&nbsp;<=&nbsp;3'b111;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L&nbsp;<=&nbsp;3'b111;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!I[0])&nbsp;nstate&nbsp;<=&nbsp;Cycle_R;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(!I[1])&nbsp;nstate&nbsp;<=&nbsp;Cycle_L;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(!I[2])&nbsp;nstate&nbsp;<=&nbsp;NON_Cycle;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;nstate&nbsp;<=&nbsp;IDLE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;Cycle_R:&nbsp;begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L&nbsp;<=&nbsp;3'b111;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R&nbsp;<=&nbsp;3'b011;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!I[0])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nstate&nbsp;<=&nbsp;Cycle_R1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nstate&nbsp;<=&nbsp;IDLE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;Cycle_R1:&nbsp;begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R&nbsp;<=&nbsp;3'b101;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!I[0])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nstate&nbsp;<=&nbsp;Cycle_R0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nstate&nbsp;<=&nbsp;IDLE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;Cycle_R0:&nbsp;begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R&nbsp;<=&nbsp;3'b110;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!I[0])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nstate&nbsp;<=&nbsp;Cycle_R;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nstate&nbsp;<=&nbsp;IDLE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cycle_L:&nbsp;begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R&nbsp;<=&nbsp;3'b111;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L&nbsp;<=&nbsp;3'b110;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nstate&nbsp;<=&nbsp;Cycle_L1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;Cycle_L1:begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L&nbsp;<=&nbsp;3'b101;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!I[1])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nstate&nbsp;<=&nbsp;Cycle_L0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nstate&nbsp;<=&nbsp;IDLE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;Cycle_L0:begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L&nbsp;<=&nbsp;3'b011;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!I[1])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nstate&nbsp;<=&nbsp;Cycle_L;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nstate&nbsp;<=&nbsp;IDLE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;NON_Cycle:&nbsp;begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R&nbsp;<=&nbsp;3'b111;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L&nbsp;<=&nbsp;3'b111;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;default:;&nbsp;endcaseend&nbsp;endmodule
随时随地看视频慕课网APP
我要回答