为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

撒科打诨 2022-01-06 11:07:28
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;endalways@(state)begin case(state)state0:begin nextstate<=state1; endstate1:begin nextstate<=state2; endstate2:begin nextstate<=state4; endstate3:begin nextstate<=state6; endstate4:begin nextstate<=state1; endstate5:begin nextstate<=state2; endstate6:begin nextstate<=state4; endstate7:begin nextstate<=state6; enddefault:;endcaseend always@(state)begincase(state)state1:Q<=3'b110;state2:Q<=3'b101;state4:Q<=3'b011;default Q<=111;endcaseendalways@(A)begincase(A)3'b000:begin R2=1;R1=1;R0=1;L2=1;L1=1;L0=1;end3'b010:begin {R2,R1,R0}=Q;L2=1;L1=1;L0=1;end3'b001:begin R2=1;R1=1;R0=1;{L0,L1,L2}=Q;end3'b100:begin R2=0;R1=0;R0=0;L2=0;L1=0;L0=0;enddefault:;endcaseendendmoduleI1,I2,I3是三个按键,R1~3 L1~3分别连发光二极管,低电平亮。想分别按键控制 R循环亮,L循环亮,全亮。状态机是做循环周期为3的唤醒计数器,但是仿真结果如下图,没有出效果,问题出在哪儿?有高手解答。谢谢!
查看完整描述

1 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

没咋看懂你的程序,感觉状态机有点乱,电路中还是尽量不要有latch,而且代码应该规范点。发一个我写的吧,程序不好,将就看看,希望对你有帮助

module test(

   clk,

   rst_n,

   R,

   L,

   I

   );

   

input clk;

input rst_n;

input [2:0] I;//

output [2:0] R;

output [2:0] L;

reg [2:0] R;

reg [2:0] L;

reg[2:0] Q;

reg[3:0] state,nstate;

parameter  IDLE = 4'b0001,// kong xian

   Cycle_L = 4'b0010,

   Cycle_R = 4'b0100,

   NON_Cycle = 4'b1000,

   

   //Cycle_R2 = 4'b1001,

   Cycle_R1 = 4'b1010,

   Cycle_R0 = 4'b1011,

   

   //Cycle_L2 = 4'b1100,

   Cycle_L1 = 4'b1101,

   Cycle_L0 = 4'b1110;

   

always @ (posedge clk)

 if(!rst_n)

  state <= IDLE;

 else

  state <= nstate;

always @ (state or I)

 begin 

  case(state)

   IDLE: begin 

     R <= 3'b111;

     L <= 3'b111;

     if(!I[0]) nstate <= Cycle_R;

     else if(!I[1]) nstate <= Cycle_L;

     else if(!I[2]) nstate <= NON_Cycle;

     else nstate <= IDLE;

      end

   Cycle_R: begin

      L <= 3'b111;

      R <= 3'b011;

      if(!I[0])

       nstate <= Cycle_R1;

      else

       nstate <= IDLE;

       end

   Cycle_R1: begin

      R <= 3'b101;

      if(!I[0])

       nstate <= Cycle_R0;

      else

       nstate <= IDLE;

       end

   Cycle_R0: begin

      R <= 3'b110;

      if(!I[0])

       nstate <= Cycle_R;

      else

       nstate <= IDLE;

       end

       

   Cycle_L: begin

      R <= 3'b111;

      L <= 3'b110;

      nstate <= Cycle_L1;

      end

   Cycle_L1:begin

      L <= 3'b101;

      if(!I[1])

       nstate <= Cycle_L0;

      else

       nstate <= IDLE;

      end

   Cycle_L0:begin

      L <= 3'b011;

      if(!I[1])

       nstate <= Cycle_L;

      else

       nstate <= IDLE;

      end

   NON_Cycle: begin

       R <= 3'b111;

       L <= 3'b111;

        end

   default:;

 endcase

end 

endmodule



查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信