微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 数字时钟程序仿真结果不正确,求指导

数字时钟程序仿真结果不正确,求指导

时间:10-02 整理:3721RD 点击:
哪位好心人可以帮忙仿真一下么
主程序如下:
module clock (clr_key,clk,segdat,sl);
input clr_key,clk;
output [7:0] segdat;
output [3:0] sl;
reg [23:0] count;   
reg [7:0] sec,min;
reg [7:0] segdat_reg;
reg [3:0] sl_reg;
reg [3:0] disp_dat;
reg second,second_1;
reg cn;
    always @(posedge clk or negedge clr_key)
    begin
      if (!clr_key)
      begin
        count<=0;
        second_1<=0;
      end
      else
      begin
        if (count==24'd12499999)  
        begin
           count<=0;
          second_1<=~second_1;
        end
        else
        begin
          count<=count+1;
        end
      end
      end
     always@(posedge second_1 or negedge clr_key)
     begin
      if (!clr_key)
        second<=0;
        else
        second<=~second;
      end
always@ (count[11:10])
begin
case (count[11:10])
2'b00:disp_dat=sec[3:0];
2'b01:disp_dat=sec[7:4];
2'b10:disp_dat=min[3:0];
2'b11:disp_dat=min[7:4];
endcase
end
always@(disp_dat)
begin
case (disp_dat)
4'h0:segdat_reg=8'hc0;
4'h1:segdat_reg=8'hf9;
4'h2:segdat_reg=8'ha4;
4'h3:segdat_reg=8'hb0;
4'h4:segdat_reg=8'h99;
4'h5:segdat_reg=8'h92;
4'h6:segdat_reg=8'h82;
4'h7:segdat_reg=8'hf8;
4'h8:segdat_reg=8'h80;
4'h9:segdat_reg=8'h90;
endcase
if ((count[11:10]==2'b10)&second)
segdat_reg=segdat_reg&8'b01111111;
end
always @(count[11:10])
begin
case (count[11:10])
2'b00:sl_reg=4'b1110;
2'b01:sl_reg=4'b1101;
2'b10:sl_reg=4'b1011;
2'b11:sl_reg=4'b0111;
endcase
end
always @(posedge second or negedge clr_key)
begin
if (!clr_key)
begin
sec[7:0]=8'h0;
cn=0;
end
else
begin
cn=0;
sec[3:0]=sec[3:0]+1;
if (sec[3:0]==4'd10)
begin
sec[3:0]=4'd0;
sec[7:4]=sec[7:4]+1;
if(sec[7:4]==4'd6)
begin
sec[7:4]=4'd0;
cn=1;
end
end
end
end
always@(posedge cn or negedge clr_key)
begin
if (!clr_key)
begin
min[7:0]=8'h0;
end
else
begin
min[3:0]=min[3:0]+1;
if (min[3:0]==4'd10)
begin
min[3:0]=4'd0;
min[7:4]=min[7:4]+1;
if(min[7:4]==4'd6)
begin
min [7:4]=4'd0;
end
end
end
end
assign segdat=segdat_reg;
assign sl=sl_reg;
endmodule  
testbench:
`timescale 1ns/ 1ns
module clock_vlg_tst();
reg clk;
reg clr_key;                                             
wire [7:0]  segdat;
wire [3:0]  sl;
                        
clock i1 (   
.clk(clk),
.clr_key(clr_key),
.segdat(segdat),
.sl(sl)
);
                                                  
initial                                                
begin                                                  
clk=0;
clr_key=0;
#100  clr_key=1;
#3000000000  clr_key=0;
#1000 $stop;                                                            
end                                                                                                                    
always  #10 clk=~clk;                                                
                                                                    
endmodule
仿真图形如下图所示,数码管上只是循环显示0和1


根据你的波形图, 你的seg_dat和sl不是在变化么。
你的数码管到底连得是哪个端口?

sl与seg_dat没有同步更新。

看了代码,用CLK主时钟控制同步吧,你这个segdat 与sl的数据更新不会同步,
把你的波形放大,仔细看边缘就知道了。

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

网站地图

Top