基于FPGA的简易数字时钟


         基于FPGA的可显示数字时钟,设计思路为自底向上,包括三个子模块:时钟模块,进制转换模块,led显示模块。所用到的FPGA晶振频率为50Mhz,首先利用它得到1hz的时钟然后然后得到时钟模块,把时钟模块输出的时、分、秒输入到进制转换模块后得到十进制的值再输入到led显示模块,该工程已经在FPGA开发板上亲测可用。

       下图为模块示意图(实际工程中并没有采用原理图的输入方法,这里仅作示意)。

















下面分模块说明:

        clk1:  时钟模块,设计思路为首先根据50M晶振得到1hz的时钟,然后通过时分秒的关系得到时钟模块(具体见代码)。

                                        输入   clk:系统时钟信号 50Mhz            rst_n:低电平异步复位      

                                        输出  sec:  8bit位宽的秒位                    min:  8bit位宽的分位       hour  8bit位宽的时位

     bin_dec1: 进制转换模块,设计思路完全按照之前的博文《利用verilog将二进制码转换为十进制BCD码  》,代码稍作修改,去掉两个用不到的输出。

                                        输入   clk:系统时钟信号 50Mhz            rst_n:低电平异步复位         bin:  8bit位宽的输入待转换二进制数 

                                        输出  one: 十进制数的个位                  ten: 十进制数的十位           hun: 十进制数的百位,这里用不到所以空置了。

        led:            数码管显示模块,八段数码管在一定频率下切换赋值,每一个时钟对一个数码管单独赋值并显示,切换频率大于一定值后,看起来像8位数码管同时显示(具体设计见代码)。

                                      输入   clk: 系统时钟信号50Mhz            

                                                  sec0,sec1,min0,min1,hour0,hour1:  4bit位宽的值,分代表时钟秒、分、时的个位和十位。                                  

                                       输出    sel: 8bit 数码管位选信号               

                                                   data:8bit数码管译码显示的值


下面给出code:

 clk1:

module clock1(sec,min,hour,clk,rst_n
    );
input            clk,rst_n;
output [7:0]  sec,min;
output [7:0]  hour;
reg    [7:0]  sec=0;
reg    [7:0]  min=0;
reg    [7:0]  hour=0;
reg           clk_div;
reg    [32:0] cnt;

 分频部分  50MHz - 1Hz
always @ ( posedge clk or negedge rst_n)
begin
    if(!rst_n)
    begin
    cnt <= 0;
 clk_div <= 0;
    end
   else begin
if ( cnt < 25000000 - 1 )
   begin
   clk_div <= 0;
   cnt <= cnt + 1;
   end
else if ( cnt < 50000000 - 1 )
   begin
   clk_div <= 1;
   cnt <= cnt + 1 ;
       end
    else
       cnt <=0 ;
end
end
/ 时钟部分
always @ ( posedge clk_div or negedge rst_n )
begin
   if(!rst_n)
    sec <= 0;
  else begin
if ( sec == 59 )
 sec <= 0 ;
else 
 sec <= sec + 1 ;
  end
end
always @ ( posedge clk_div or negedge rst_n)
begin
   if(!rst_n)
    min <= 0;
   else begin
 if ( sec == 59 )
 begin
 if (min ==59 )
 min <= 0;
 else
 min <= min + 1 ;
 end
     end
end

always @ ( posedge clk_div or negedge rst_n)
begin
   if(!rst_n)
    hour <= 0;
  else begin
if ( sec == 59 && min ==59 )
begin
if (hour == 23)
hour <= 0 ;
else
hour <= hour + 1;
end
end
end

endmodule


 

bin_dec1
 module bin_dec1(clk,bin,rst_n,one,ten,hun
    );
input  [7:0] bin;
input        clk,rst_n;
output [3:0] one,ten;
output [1:0] hun;
reg    [3:0] one,ten;
reg    [1:0] hun;
reg    [3:0] count;
reg    [17:0]shift_reg=18'b000000000000000000;
// 计数部分
always @ ( posedge clk or negedge rst_n )
begin
 if( !rst_n ) 
   count<=0;
 else if (count==9)
   count<=0;
 else
   count<=count+1;
end
// 二进制转换为十进制 /
always @ (posedge clk or negedge rst_n )
begin
  if (!rst_n)
       shift_reg=0;
  else if (count==0)
       shift_reg={10'b0000000000,bin};
  else if ( count<=8)                //实现8次移位操作
   begin
      if(shift_reg[11:8]>=5)         //判断个位是否>5,如果是则+3  
          begin
             if(shift_reg[15:12]>=5) //判断十位是否>5,如果是则+3  
                 begin
   shift_reg[15:12]=shift_reg[15:12]+2'b11;   
   shift_reg[11:8]=shift_reg[11:8]+2'b11;
shift_reg=shift_reg<<1;  //对个位和十位操作结束后,整体左移
 end
             else
       begin
                   shift_reg[15:12]=shift_reg[15:12];
shift_reg[11:8]=shift_reg[11:8]+2'b11;
shift_reg=shift_reg<<1;
 end
          end  
             
      else
          begin
             if(shift_reg[15:12]>=5)
                 begin
   shift_reg[15:12]=shift_reg[15:12]+2'b11;
   shift_reg[11:8]=shift_reg[11:8];
shift_reg=shift_reg<<1;
 end
             else
       begin
                   shift_reg[15:12]=shift_reg[15:12];
shift_reg[11:8]=shift_reg[11:8];
shift_reg=shift_reg<<1;
 end
          end  
      
  end
  end
/输出赋值//
always @ ( posedge clk or negedge rst_n )
begin
 if ( !rst_n )
  begin
    one<=0;
    ten<=0;
    hun<=0; 
  end
 endmodule


led:

module led(clk,sec0,sec1,min0,min1,hour0,hour1,sel,data
    );
input             clk;
input      [3:0]  sec0,sec1,min0,min1,hour0,hour1;
output reg [7:0]  data;
output reg [7:0]  sel;
       reg [3:0]  data_dis=0;
reg [20:0] m=0;
 
always @ ( posedge clk )
begin
    m<=m+1;
end  


always@( posedge clk) 
 begin
 case(m[16:14])
   0: begin
  data_dis<=4'b0000;
sel<=8'b1111_1110;
  end
1: begin
  data_dis<=4'b0000;
sel<=8'b1111_1101;
end
2: begin
  data_dis<=hour1;
sel<=8'b1111_1011;
  end
3: begin
  data_dis<=hour0;
sel<=8'b1111_0111;
  end
4: begin
  data_dis<=min1;
sel<=8'b1110_1111;
    end
5: begin
  data_dis<=min0;
sel<=8'b1101_1111;
end
6: begin
  data_dis<=sec1;
sel<=8'b1011_1111;
  end
7: begin
  data_dis<=sec0;
sel<=8'b0111_1111;
end
default:begin
  data<=8'bz;
sel<=8'bz;
end
endcase

end


always @(data_dis)
begin
case(data_dis)//七段译码
4'h0:data = 8'hc0;//显示0
4'h1:data = 8'hf9;//显示1
4'h2:data = 8'ha4;//显示2
4'h3:data = 8'hb0;//显示3
4'h4:data = 8'h99;//显示4
4'h5:data = 8'h92;//显示5
4'h6:data = 8'h82;//显示6
4'h7:data = 8'hf8;//显示7
4'h8:data = 8'h80;//显示8
4'h9:data = 8'h90;//显示9
default data = 8'hxx;
endcase
end

endmodule

顶层例化模块:

top

module top(clk,rst_n,sel,data
    );
input         clk,rst_n;
output  [7:0] sel,data;
wire    [7:0] sec,min,hour;
wire    [3:0] one1,ten1,one2,ten2,one3,ten3;

clock1     clock(
                 .clk(clk),
 .rst_n(rst_n),
 .sec(sec),
 .min(min),
 .hour(hour)
 );  

bin_dec1    bin_dec1(
                 .clk(clk),
 .rst_n(rst_n),
 .bin(sec),
 .one(one1),
 .ten(ten1)
 );
 
bin_dec1    bin_dec2(
                 .clk(clk),
 .rst_n(rst_n),
 .bin(min),
 .one(one2),
 .ten(ten2)
 );
 
bin_dec1    bin_dec3(
                 .clk(clk),
 .rst_n(rst_n),
 .bin(hour),
 .one(one3),
 .ten(ten3)
 );
 
led    led(
                 .clk(clk),
 .sec0(one1),
 .sec1(ten1),
 .min0(one2),
 .min1(ten2),
 .hour0(one3),
 .hour1(ten3),
 .sel(sel),
 .data(data)
 );

endmodule





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620950.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

数字逻辑之数字时钟课程设计(含proteus仿真图及代码)

一、设计要求 1、设计一个能显示日期、小时、分钟、秒的数字电子钟&#xff0c;并具有整点报时的功能。  2、可手动校正时、分时间和日期值&#xff0c;时间以24小时为一个周期&#xff0c;有校时功能&#xff0c;可以分别对时及分进行单独校时&#xff0c;使其校正到标准时间…

数电实验:数字时钟设计 (经验分享,仅供参考)

实 验 目 的 一、独立完成一个数字小系统的设计 二、基于实验箱对设计进行验证 实验内容: 能够显示时、分、秒共6位数字&#xff1b; 考虑使用实验箱时钟&#xff08;频率包括1M、500K、 250K、100K、10K、1K等&#xff09;&#xff1b; 考虑使用实验箱数码管输出接口。 …

数据结构】二叉树篇|超清晰图解和详解:后序篇

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 你不能要求一片海洋&#xff0c;没有风暴&#xff0c;那不是海洋&#xff0c;是泥塘——毕淑敏 目录 一、核心二、题目 一、核心 我们清楚…

Yandex SEO和Google SEO有啥区别?5000字说必须要了解的一些事儿

最近筋斗云SEO服务有做一些俄罗斯市场的SEO&#xff0c;而做俄罗斯的SEO相当于就是要做Yandex的SEO。对比Google的SEO优化&#xff0c;其实有比较多的区别&#xff0c;但总体算法、逻辑等等都大致相似。本文从Linus自己的研究和搜集的公开信息&#xff0c;对比一下Google和Yand…

阿里,百度,腾讯,360,新浪,网易,小米等开源项目

奇虎360 https://github.com/Qihoo360 1.MySQL中间层 Atlas Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上&#xff0c;修改了大量bug&#xff0c;添加了很多功能特性。目前该项…

大公司都有哪些开源项目~~~阿里,百度,腾讯,360,新浪,网易,小米等

红色字体是现阶段比较火的 ---------------------------------------------------------------------------------------------------------------- 奇虎360 https://github.com/Qihoo360 1.MySQL中间层 Atlas Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于M…

(读) 周鸿祎重新思考360(有感)

为什么80%的码农都做不了架构师&#xff1f;>>> 我们的红衣教主——周鸿祎&#xff08;yi&#xff09; 我只能从我的印象中和对他的了解中说出&#xff1a; 公司的人群 规模&#xff1a;800&#xff08;上市前&#xff09;-3/4000人&#xff08;目前&#xff09;目…

WIFI市场,除了免流量还能如何玩?

此前手机QQ公测QQWiFi功能&#xff0c;在最近发布的手机QQ5.3安卓版本中&#xff0c;正式全员开放QQwifi功能&#xff0c;用户可以通过简单几步接入运营商和商户的500多万WIFI热点&#xff0c;巨大的用户基础让本已热闹的WIFI市场又增变数。在此之前&#xff0c;微信、小米、阿…

java版-wifi无线网络搭建

这几天 360出了一款随身WIFI&#xff0c;非常小巧&#xff0c;使用也比较方便。插在USB的接口上就能自动创建一个无线网络环境。但是价格却要19.9元&#xff0c;相信大部分的孩子会觉得这么便宜呀。赶快入手。但是真的值这个价格吗&#xff1f;我可以说这个玩意毫无技术含量&am…

关于类的隐形生成函数

https://www.youtube.com/watch?ve8Cw17p_BiU&listPL5jc9xFGsL8FWtnZBeTqZBbniyw0uHyaH&index6 https://www.youtube.com/watch?vKMSYmY74AEs&listPLE28375D4AC946CC3&index4 如果只有copy asignment operator, 那么default construct will be generated as…

证券低延时环境设置并进行性能测试

BIOS设置BIOS参考信息 关闭 logical Process Virtualization Technology 在System Profiles Settings 中System Profile 选择Performance Workload Profile 选择HPC Profile OS中信息参考在/etc/default/grub文件中添加 intel_idle.max_cstate=0 processor.max_cstate=0 idle=p…

探索Java的ReentrantLock:实现并发锁的强大力量

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;java系列 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

苹果基带坏了怎么办_iPhone12 上市,苹果这次有哪些改变

苹果每年一度发布新品时间一般在9月份 但今年疫情使得发布延后&#xff0c;这里对iPhone12网上流传的配置做下总结 通讯方面: 这次毫无疑问的事iPhone12从之前的4G升级到了5G&#xff0c;使用高通X55基带&#xff0c;这次再也没用英特尔的基带了&#xff0c;英特尔基带手机信号…

iPhone12基带确认,果粉放心

在iPhone12发布的时候都没有提到iPhone12到底用的是什么基带&#xff0c;我之前在粉丝留言下方说了是高通基带&#xff0c;我当时说可能部分手机是因特尔部分是高通&#xff0c;今天有人在社交媒体发布了iPhone12的基带从中可以看出本次iPhone12采用的是高通的X55基带&#xff…

android备份基带,备份过SHSH,保留基带,直刷5.0.1系统完美详细教程

此教程仅适用于备份SHSH直刷任何高于现手机版本的任何系统&#xff0c;我的系统是4.3.3直刷到5.0.1.可能刷法不同&#xff0c;我的用电量貌似没有增加&#xff0c;依然比较省电,没有大家说的掉电突然增加的现象。而且&#xff0c;刷完5.0.1&#xff0c;我的3G开关也依然存在&am…

苹果或方案自立研制iPhone基带芯片

据业界人士称&#xff0c;苹果方案组成一支新的研制团队去开发基带处理器&#xff0c;那些基带处理器将被用于它方案在2015年发布的新款iPhone中。知情人士还说&#xff0c;苹果方案将基带芯片的订单交给三星电子和Globalfoundries。 尽管某些知情人士还说&#xff0c;苹果或许…

使用Easy Chm制作chm文档步骤

前言 软件发布后需要相应的文档说明&#xff0c;CHM是微软新一代的帮助文件格式&#xff0c;利用HTML作源文&#xff0c;把帮助内容以类似数据库的形式编译储存。因为使用方便&#xff0c;形式多样也常被采用作为电子书的格式&#xff1b; 制作类似的chm文档可以使用Easy Chm软…

JWT 技术的使用

应用场景&#xff1a;访问某些页面&#xff0c;需要用户进行登录&#xff0c;那我们如何知道用户有没有登录呢&#xff0c;这时我们就可以使用jwt技术。用户输入的账号和密码正确的情况下&#xff0c;后端根据用户的唯一id生成一个独一无二的token&#xff0c;并返回给前端&…

bindService的调用流程

使用bindService去调用service&#xff0c;如果有多个客户端调用&#xff0c;onBind方法只会被调用一次&#xff0c;由于bindService嗲处理中&#xff0c;AMS是一个中间商&#xff0c;猜测这个处理也是AMS里进行的&#xff0c;这里我们再看看bindService的调用流程 public clas…

【翻译】开发人员的技术写作

HTML、CSS、JavaScript、Python、PHP、C、Dart--有这么多的编程语言&#xff0c;你甚至可能完全精通其中的几种但是&#xff0c;当我们的目标是写出更多、更好的代码时&#xff0c;我们用日常语言写作和交流的方式变得越来越重要......甚至可能被忽略了。 我们写代码和围绕代码…