微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog交通灯的测试程序

verilog交通灯的测试程序

时间:10-02 整理:3721RD 点击:
module traffic(CLK,EN,LAMPA,LAMPB,ACOUNT,BCOUNT);
  output[7:0] ACOUNT,BCOUNT;
  output[3:0] LAMPA,LAMPB;
  input CLK,EN;
  reg[7:0] numa,numb;
  reg tempa,tempb;
  reg[2:0] counta,countb;
  reg[7:0] ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;
  reg[3:0] LAMPA,LAMPB;
  
  always @(EN)
  if(!EN)
    begin
      ared     <=8'b01010101;
      ayellow  <=8'b00000101;
      agreen   <=8'b01000000;
      aleft    <=8'b00010101;
      bred     <=8'b01100101;
      byellow  <=8'b00000101;
      bleft    <=8'b00010101;
      bgreen   <=8'b00110000;
    end
  assign ACOUNT=numa;
  assign BCOUNT=numb;
  
  always @(posedge CLK)
    begin
      if(EN)
        begin
          if(!tempa)
            begin
              tempa<=1;
              case(counta)
                0:begin numa<=agreen;   LAMPA<=2; counta<=1; end
                1:begin numa<=ayellow;  LAMPA<=4; counta<=2; end
                2:begin numa<=aleft;    LAMPA<=1; counta<=3; end
                3:begin numa<=ayellow;  LAMPA<=4; counta<=4; end
                4:begin numa<=ared;     LAMPA<=8; counta<=0; end
                default:                LAMPA<=8;
              endcase
            end
          else begin
            if(numa>1)
              if(numa[3:0]==0)begin
                              numa[3:0]<=4'b1001;
                              numa[7:4]<=numa[7:4]-1;
                            end
            else              numa[3:0]<=numa[3:0]-1;
              if(numa==2)tempa<=0;
            end
          end
        else  begin
          LAMPA<=4'b1000;
          counta<=0;tempa<=0;
        end
      end
      
  always @(posedge CLK)
    begin
      if(EN)
        begin
          if(!tempb)
            begin
              tempb<=1;
              case(countb)
                0:begin numb<=bred;    LAMPB<=8; countb<=1; end
                1:begin numb<=bgreen;  LAMPB<=2; countb<=2; end
                2:begin numb<=byellow; LAMPB<=4; countb<=3; end
                3:begin numb<=bleft;   LAMPB<=1; countb<=4; end
                4:begin numb<=byellow; LAMPB<=4; countb<=0; end
                default:               LAMPB<=8;
              endcase
            end
          else begin
            if(numb>1)
              if(numb[3:0]==0)begin
                              numb[3:0]<=9;
                              numb[7:4]<=numb[7:4]-1;
                            end
            else              numb[3:0]<=numb[3:0]-1;
              if(numb==2) tempb<=0;
            end
          end
        else  begin
          LAMPB<=4'b1000;
          tempb<=0; countb<=0;
        end
      end
    endmodule
源程序是这样的,请问一下测试程序怎么写?

个人觉得貌似测试程序一般比源程序难写,如果您能写出这个源程序,测试程序应该可以搞定吧。



    就是写代码,把traffic模块的接口,都赋给一定的值,看看功能是否符合预期。模块都写出来了,应该testbench不难,有时间的话试试

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top