在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2076|回复: 3

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

[复制链接]
发表于 2016-4-23 09:40:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
哪位好心人可以帮忙仿真一下么

主程序如下:
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

5.PNG
发表于 2016-4-28 11:24:34 | 显示全部楼层
根据你的波形图, 你的seg_dat和sl不是在变化么。

你的数码管到底连得是哪个端口?
发表于 2016-4-30 16:22:35 | 显示全部楼层
sl与seg_dat没有同步更新。
发表于 2016-4-30 16:26:22 | 显示全部楼层
看了代码,用CLK主时钟控制同步吧,你这个segdat 与sl的数据更新不会同步,
把你的波形放大,仔细看边缘就知道了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 13:04 , Processed in 0.021269 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表