集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2071|回复: 3

困扰小弟几天的一个问题,请老师们指点

[复制链接]
qiyanan12 发表于 2011-10-31 09:31:27 | 显示全部楼层 |阅读模式
当我下载到板子上仿真的时候出现了没有定义的数码管亮了,定义的数码管亮度很暗,但显示的结果是对的
module clock1(clr,clk,segdat,sl);
input clr,clk;
output [7:0] segdat;
output [3:0] sl;
reg[36:0] count;
reg[7:0]  sec,min;
reg[7:0]  segdat_reg;
reg[3:0]  sl_reg;
reg[3:0]  disp_dat;
reg second;
reg cn;

parameter CLK_FREQ = 26'd50_000_000;//系统时钟
parameter DCLK_FREQ = 26'd2;        //输出频率10Hz

always@(posedge clk)
   begin
   if(count<(CLK_FREQ/DCLK_FREQ))
    count <= count + 1'b1;
  else
   begin
   count <= 0;
   second <= ~second;
end
end
always@(count[14:13])
   begin
   case(count[14:13])
        2'b00:
                    begin
                     disp_dat= sec[3:0];       
                     sl_reg = 4'b1110;       
                    end
                2'b01:
                    begin
                     disp_dat=sec[7:4];       
                     sl_reg=4'b1101;               
                    end
                2'b10:
                    begin
                     disp_dat=min[3:0];       
                    sl_reg=4'b1011;               
                    end
                2'b11:
                    begin
                     disp_dat=min[7:4];       
                     sl_reg=4'b0111;               
                    end
    endcase
   end


always @(posedge second )
   begin
     if(!clr)
       begin
       sec[7:0]=8'h0;
       cn=0;
       end
     else
       begin
       cn=0;
       sec[3:0]=sec[3:0]+1'b1;
       if(sec[3:0]==4'd10)
       begin
          sec[3:0]=4'd0;
          sec[7:4]=sec[7:4]+1'b1;
          if(sec[7:4]==4'd6)
             begin
               sec[7:4]=4'd0;
               cn=1;
             end
       end
       end
    end
always @(posedge cn)
    begin
     if(!clr)
       begin
       min[7:0]=8'h0;
       end
     else
       begin
       min[3:0]=min[3:0]+1'b1;
       if(min[3:0]==4'd10)
       begin
          min[3:0]=4'd0;
          min[7:4]=min[7:4]+1'b1;
          if(min[7:4]==4'd6)
             begin
               min[7:4]=4'd0;
             end
       end
       end
    end
always@(disp_dat or sl)
   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;
     default:segdat_reg=8'hc0;
   endcase
   
   end
assign segdat=segdat_reg;
assign sl=sl_reg;
endmodule
vvt 发表于 2011-10-31 09:48:15 | 显示全部楼层
jahero 发表于 2011-10-31 14:33:48 | 显示全部楼层
你把count[14:13] 改成count[21:20]试试
zhouhuaguo 发表于 2011-11-4 16:21:46 | 显示全部楼层
出现这个问题应该于程序的关系不是很大(如果有关系就将那个数码管的逻辑换以下旧可以了)。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-10 08:31 , Processed in 0.074053 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表