基于basys2用verilog设计多功能数字钟(重写)
2017-02-07 16:59
344 查看
话不多说先上图
[b]
seg_display
-----------------------------------------我是华丽的分隔线----------------------------------------------------------------
今天无意之中看到了另一种设置多功能数字表的思想,废话少说,下面做以笔记。
我原来的设计,在秒分频过后,当记到59秒时,将分的个位加1,当分的个位记到9时将分的十位加1,当分的十个位为59时,将时的个位加1,以此类推。我使用的basys2开发板只有四个LED数码管,所以只能显示分时,所以有四个输出端口minute_one,minute_ten,hour_one,hour_ten。完成显示。
下面我引出另一种设计思路
将秒计数到59,分进行进位,将分计数到59,小时进行进位,最后小时计数到23。然而一个时钟的个位和十位是分别显示的,所以还要做一个接口转换,把2位十进制数的个位和十位分离开。具体方法就是除以10,商是十位的值,余是个位的值。
如图所示:
-----------------------------------------我是分隔线---------------------------------------------------------------------
在这次任务中我们没有体现出小组合作的优势,很伤心的是我们组最开始的两个组员因为忙双双离我而去,他们由于事情安排不开而且上一期的任务还没有完成,所以前面一半的工程我都独自一个人完成。记得那个周六我从早上九点多来到实验室,除了中间吃饭一直坐在这写代码,一直写到晚上十点多才离开,到第二天也是同样,只不过下午五点多就回去休息了。正是我这两天沉下心来做才让我们的任务有了很大的进展。最后我的两个组员离开,我感到有些伤心,但工程还得继续,我已经做好独立完成的准备,还好最后又有两个人分到我的小队,这让我又看到了希望,我的新队员给了我很多的灵感,所以我决定在原有的题目基础上加入闹钟的功能,但是我独立完成的那一部分还有一个致命的问题没有解决,就是硬件开发的基础问题——按键消抖。
从接触开始我就感觉按键消抖比较抽象,再加上对于放在我们这个数字钟的题目,按键不由的跟时钟扯到了一起,消抖的代码没有问题,但是因为这个题目的特殊,消抖后必须和时钟扯上关系,所以在这个问题上耗费了我很多的时间,上周从周一到周四四天里一下课我就来实验室,将代码改了一遍又一遍,改回来又改回去,到周四的时候我已经体会到绝望的感觉。周五终于解决了这个问题。到这里我们的工程就取得了一个大前进。
我其他两个组员编写了秒表计数的模块,然后在周五下午我就立马将模块整合,到此便完成了题目的所有要求。闹钟功能必须要又可以设置闹钟的功能而按键只有四个已经用过了,要是再在原来的基础上改动有可能别的模块出问题。周日的工作很顺利几乎没用多少时间,在原有的代码基础上增加个模块就实现了闹钟功能,至此我们的任务顺利完成。
------------------------------------------------------------------------------
从开始接触fpga以来已经有6个月了,我的路还是很漫长,就像bingo曾经说的,我没资格放弃。现在寒假还有不到二十天结束,不知道我又能学多少,我不认为自己势必比别人聪明的人,但我相信通过自己的努力,会慢慢变得更好。最后献上一个图,每天多努力一点点和少努力一点点的差距就是这么大。
转载请注明出处:NingHeChuan(宁河川)
个人微信订阅号:NingHeChuan
如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号
知乎ID:NingHeChuan
微博ID:NingHeChuan
原文地址:http://www.cnblogs.com/ninghechuan/p/6374586.html
[b]
module seven_seg_display( input mclk, input rst_n, input [2:0] hour_ten, input [3:0] hour_one, input [2:0] minute_ten, input [3:0] minute_one, output reg [7:0] out, output reg [3:0] an//所有的数码管的使能端 ); wire [3:0] aen;//数码管使能信号 reg [1:0] s;//数码管显示选择 reg [18:0] cnt;//数码管扫描时钟计数 parameter CLK190 = 18'd263157; always @(posedge mclk or negedge rst_n) begin if(!rst_n) cnt <= 18'b0; else if(cnt == CLK190 - 1'b1) cnt <= 18'b0; else cnt <= cnt + 1'b1; end //灯的状态没5.2毫秒刷新一次 always @(posedge mclk or negedge rst_n) begin if(!rst_n) s <= 2'b0; else if(cnt == CLK190 - 1'b1) s <= s + 1'b1; end assign aen = 4'b1111; always @(*) begin an <= 4'b1111; if(aen[s] == 1) an[s] <= 1'b0; end reg [7:0] out0; //小时的十位显示 always @(posedge mclk or negedge rst_n) begin if(!rst_n) out0 <= 8'b0000_0011; else begin case(hour_ten) 0: out0 <= 8'b0000_0011; 1: out0 <= 8'b1001_1111; 2: out0 <= 8'b0010_0101; default: out0 <= 8'b0000_0011; endcase end end reg [7:0] out1; //小时的个位显示 always @(posedge mclk or negedge rst_n) begin if(!rst_n) out1 <= 8'b0000_0010; else begin case(hour_one) 0: out1 <= 8'b0000_0010; 1: out1 <= 8'b1001_1110; 2: out1 <= 8'b0010_0100; 3: out1 <= 8'b0000_1100; 4: out1 <= 8'b1001_1000; 5: out1 <= 8'b0100_1000; 6: out1 <= 8'b0100_0000; 7: out1 <= 8'b0001_1110; 8: out1 <= 8'b0000_0000; 9: out1 <= 8'b0000_1000; default: out1 <= 8'b0000_0010; endcase end end reg [7:0] out2; //分钟的十位显示 always @(posedge mclk or negedge rst_n) begin if(!rst_n) out2 <= 8'b0000_0011; else begin case(minute_ten) 0: out2 <= 8'b0000_0011; 1: out2 <= 8'b1001_1111; 2: out2 <= 8'b0010_0101; 3: out2 <= 8'b0000_1101; 4: out2 <= 8'b1001_1001; 5: out2 <= 8'b0100_1001; 6: out2 <= 8'b0100_0001; 7: out2 <= 8'b0001_1111; 8: out2 <= 8'b0000_0001; 9: out2 <= 8'b0000_1001; default: out2 <= 8'b0000_0011; endcase end end reg [7:0] out3; //分钟的个位显示 always @(posedge mclk or negedge rst_n) begin if(!rst_n) out3 <= 8'b0000_0011; else begin case(minute_one) 0: out3 <= 8'b0000_0011; 1: out3 <= 8'b1001_1111; 2: out3 <= 8'b0010_0101; 3: out3 <= 8'b0000_1101; 4: out3 <= 8'b1001_1001; 5: out3 <= 8'b0100_1001; 6: out3 <= 8'b0100_0001; 7: out3 <= 8'b0001_1111; 8: out3 <= 8'b0000_0001; 9: out3 <= 8'b0000_1001; default: out3 <= 8'b0000_0011; endcase end end always @(posedge mclk or negedge rst_n) begin if(!rst_n) out <= 8'b0000_0011; else case(s) 0: out <= out3; 1: out <= out2; 2: out <= out1; 3: out <= out0; default: out <= 8'b0000_0011; endcase end endmodule
seg_display
-----------------------------------------我是华丽的分隔线----------------------------------------------------------------
今天无意之中看到了另一种设置多功能数字表的思想,废话少说,下面做以笔记。
我原来的设计,在秒分频过后,当记到59秒时,将分的个位加1,当分的个位记到9时将分的十位加1,当分的十个位为59时,将时的个位加1,以此类推。我使用的basys2开发板只有四个LED数码管,所以只能显示分时,所以有四个输出端口minute_one,minute_ten,hour_one,hour_ten。完成显示。
下面我引出另一种设计思路
将秒计数到59,分进行进位,将分计数到59,小时进行进位,最后小时计数到23。然而一个时钟的个位和十位是分别显示的,所以还要做一个接口转换,把2位十进制数的个位和十位分离开。具体方法就是除以10,商是十位的值,余是个位的值。
如图所示:
三、实验总结
这里我就我不再次总结了,把以前的实验报告复制过来看看,现在看起来以前的总结报告,有些写的真是不堪入目,-----------------------------------------我是分隔线---------------------------------------------------------------------
工作总结
第二期我们小队选择多功能数字时钟一题,针对basys2开发板使用Verilog HDL语言编译,完成该工程。题目要求多功能数字中有时钟(可校时)、秒表(可清零、暂停)功能,我们在原有题目完成的基础上添加了闹钟功能,在完成任务过程中可谓是一路心酸加苦逼,但最后还是终于圆满完成!下面我将简述我们完成工作过程中具体遇到的一些问题。心得与体会
在设计之初,由于心中对整个工程的思考不够,没有一个具体的模块化概念,还只是单单把每个功能当成一个题目去做,导致给后面的工作埋下了定时炸弹。后来在慢慢的进度到后面的时候,才有了将各个模块联系起来的思想,在设计一个模块的时候就必须将其他想加入的模块提前考虑好,给下一步工程就要留下能加入引用的空间。而且小组合作就必须每个人的代码风格要类似,每个人写自己的模块,要不然最后模块整合的时候会有很大的麻烦。在这次任务中我们没有体现出小组合作的优势,很伤心的是我们组最开始的两个组员因为忙双双离我而去,他们由于事情安排不开而且上一期的任务还没有完成,所以前面一半的工程我都独自一个人完成。记得那个周六我从早上九点多来到实验室,除了中间吃饭一直坐在这写代码,一直写到晚上十点多才离开,到第二天也是同样,只不过下午五点多就回去休息了。正是我这两天沉下心来做才让我们的任务有了很大的进展。最后我的两个组员离开,我感到有些伤心,但工程还得继续,我已经做好独立完成的准备,还好最后又有两个人分到我的小队,这让我又看到了希望,我的新队员给了我很多的灵感,所以我决定在原有的题目基础上加入闹钟的功能,但是我独立完成的那一部分还有一个致命的问题没有解决,就是硬件开发的基础问题——按键消抖。
从接触开始我就感觉按键消抖比较抽象,再加上对于放在我们这个数字钟的题目,按键不由的跟时钟扯到了一起,消抖的代码没有问题,但是因为这个题目的特殊,消抖后必须和时钟扯上关系,所以在这个问题上耗费了我很多的时间,上周从周一到周四四天里一下课我就来实验室,将代码改了一遍又一遍,改回来又改回去,到周四的时候我已经体会到绝望的感觉。周五终于解决了这个问题。到这里我们的工程就取得了一个大前进。
我其他两个组员编写了秒表计数的模块,然后在周五下午我就立马将模块整合,到此便完成了题目的所有要求。闹钟功能必须要又可以设置闹钟的功能而按键只有四个已经用过了,要是再在原来的基础上改动有可能别的模块出问题。周日的工作很顺利几乎没用多少时间,在原有的代码基础上增加个模块就实现了闹钟功能,至此我们的任务顺利完成。
------------------------------------------------------------------------------
从开始接触fpga以来已经有6个月了,我的路还是很漫长,就像bingo曾经说的,我没资格放弃。现在寒假还有不到二十天结束,不知道我又能学多少,我不认为自己势必比别人聪明的人,但我相信通过自己的努力,会慢慢变得更好。最后献上一个图,每天多努力一点点和少努力一点点的差距就是这么大。
转载请注明出处:NingHeChuan(宁河川)
个人微信订阅号:NingHeChuan
如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号
知乎ID:NingHeChuan
微博ID:NingHeChuan
原文地址:http://www.cnblogs.com/ninghechuan/p/6374586.html
相关文章推荐
- 基于basys2用verilog设计多功能数字钟(重写)
- 基于basys2用verilog设计多功能数字钟(重写)
- 基于basys2用verilog设计多功能数字钟(重写)
- 硬件课程设计报告--基于Basys2的多功能电子琴
- 基于basys2驱动LCDQC12864B的verilog设计图片显示
- 基于basys2驱动LCDQC12864B的verilog设计图片显示
- 基于BASYS 2开发板的多功能数字钟Verilog程序
- 基于basys2驱动LCDQC12864B的verilog设计图片显示
- 基于多功能DAQ卡的虚拟数字示波器的设计
- 基于达芬奇技术的数字视频系统设计与实现
- 【原创】基于Altera DE2的数字实验—001_1 (DE2)(Digital Logical)(Verilog)
- DE2-70数字系统设计(4)--基于Nios的LCD显示
- 基于信号完整性分析的高速数字PCB 的设计方法
- 基于DVB-SI的数字有线电视机顶盒节目指南的设计实现
- 《基于高精度数字倍频原理实现电力系统频率跟踪的新技术》这篇文章的verilog源码
- 基于FPGA的数字秒表的设计
- 【原创】基于Altera DE2的数字实验—001_3 (DE2)(Digital Logical)(Verilog)
- Verilog HDL 与数字电路设计
- 基于DCT变换的信息隐藏(数字水印)嵌入算法的设计(Matlab)
- 基于ARM9的多功能硬盘MP3播放器的设计