0

问题是我需要 C 位与 B_G2 同时变高,并且它是在 else 语句中完成的。

这是我到目前为止的代码:

module lightcontrol(clk, R,C, A_CAR, B_CAR, lightsA, lightsB, cnt);
     
    `define A_G2 3'b000
    `define A_Y 3'b001
    `define B_G1 3'b010
    `define B_G2 3'b110
    `define B_Y 3'b101
    `define A_G1 3'b100
     
    `define RED 3'b100
    `define YELLOW 3'b010
    `define GREEN 3'b001
     
    input clk;            
    input A_CAR;          
    input B_CAR;          
    input R ;            
     
    output [2:0] lightsA;      
    output [2:0] lightsB;      
    output [3:0] cnt;
    output C;
          
    reg [3:0] cnt = 0;
    reg [2:0] state;           
    reg C = 0;
     
    always @(posedge clk)
 
        begin   
            if (R==0 && C==1)
                begin 
                    if((state == `B_G2)&&(A_CAR == 1'b1)) 
                        state=`B_Y;
                        C=0; 
                end
 
            else if ((R==1 &&C==0) | (R==1 && C==1))
                 state = `A_G2;
            else
                case(state)
                    `A_G2: state = B_CAR ? `A_Y : `A_G2;
                    `A_Y: state = `B_G1;
                    `B_G1: 
                        begin 
                            state = `B_G2;
                            C=1;
                        end
                    `B_G2: state = A_CAR ? `B_Y : `B_G2 ;
                    `B_Y: state = `A_G1 ;
                    `A_G1: state = `A_G2 ;
                endcase
        end
        assign lightsA = ((state == `A_G2)|(state == `A_G1)) ? `GREEN: (state == `A_Y) ? `YELLOW : `RED;
        assign lightsB = ((state == `B_G2)|(state == `B_G1)) ? `GREEN: (state == `B_Y) ? `YELLOW : `RED;
endmodule
4

1 回答 1

0

您应该使用非阻塞分配

而不是像你正在做的那样初始化变量,reg C = 0 你应该使用重置。除此之外,为了获得事件,您需要确定运行该代码所需的条件。

您立即看到它需要C == 0,R == 0来运行案例(以推进状态)。而你感兴趣的事件需要 state 为B_G1,你可以去state == B_G1from ,如果你在 state并且输入被设置state == A_Y,你可以到达 to 。最后(最初)你去状态when 。也许更好地理解波形。state == A_YA_G2B_CARA_G2R == 1

波形

(由wavedrom提供支持)

{signal: [
  {name: 'clk', wave: 'p....'},
  {name: 'R', wave: '10...'},
  {name: 'C', wave: 'x0..1'},
  {name: 'state', wave: 'x2345', data:['A_G2', 'A_Y', 'B_G1', 'B_G2']},
  {name: 'B_CAR', wave: 'x1xxx'},
]}
于 2021-03-08T22:23:14.143 回答