1.设计一个基于FPGA的数字时钟
秒计数器计数59后,分计数器+1,同时秒归0
以此类推。
当分计数器到59的时候,时计数器+1,同时分归0
以此类推。
当时计数器=23,分计数器=59,秒计数器=59时,全部复位为0
另外整点报时功能,需要加入一个信号ring signal(这个信号时接给蜂鸣器的),也就是当分计数器=59,秒计数器=59时。给出一个
ring signal=1,这个ring signal=1的信号要持续多久,就看你自己设计经过几个时钟周期,让其停止。
而音调的高低:可以给蜂鸣器送不同的电压来确定。
响几声的话:你可以设计成比如说,一个时钟周期,就是相当于你的2HZ的2秒钟
首先 ring signal =1 ,然后下一个时钟周期ring sianl=0,
再等于1,再等于0,
再等于1,再等于0,
再等于1,再等于0,
这样四声低的就完成了,然后下一声高的,你就可以用另外一个信号ring siangl2
持续一个时钟周期。ring signal2=1,再复位为0
注意ring signal 和ring signal2的信号电压要给的不同,保证音调高低
另外重要的是还需要一个模块来驱动数码管。就相当于说是告诉数码管在它显示1,2,3,4,5,6,7,8,9,0的时候,它的七段 灯是怎么样亮的。
而且数码管还分共阴共阳极。可以根据其情况来给它不同的使能信号。
至于你说的原理图,我想应该是代码综合出来的RTL级示意图吧。因为既然是试验箱就是不需要你自己设计硬件的。那RTL级的图的话,如果就我上面说的这些你还是没明白的话,可以再问我。我再抽时间给你画个图。 或者最好由代码来生成.
另外在上实验箱实现的时候,你可以参照实验箱的使用手册,来定义输出的管脚.注意管脚文件可以在你的编译软件里设置.关键看你用哪家公司的FPGA了.Xilinx的ISE,Altera的QUARTUS ii 。或者可以另外写UCF文件跟你的代码一起编译,管脚设定便自动生成了。
如果有问题你可以继续补充问题。乐意为你解答。
或者留下你的联系方式,我可以后续support 你。
楼上的兄弟,你有设计那是你的设计.你的设计是完全按照楼主的意思来量身订制的么?
你这种设计文档,网上一搜一大堆.有用么?
楼主是用实验箱来做的,试问你带的原理图是什么东西啊?schematic?layout?
只有让楼主知道设计原理是怎么样的,才能让他理解并做好自己的设计.懂?
2.基于fpga数字时钟设计的主程序
如果你有兴趣,我把细节都给你module top( input clk, input rst, output CE, output SCLK, inout IO, output CS, output AO, output SCL, output SDI ); reg read_ds1302_start; wire read_ds1302_done; wire[23:0] read_ds1302_time; read_ds1302_time U1 (clk,rst,read_ds1302_start,read_ds1302_done,read_ds1302_time,CE,SCLK,IO); reg write_lcd_start; wire write_lcd_done; write_lcd_time U2 (clk,rst,CS,AO,SCL,SDI,write_lcd_start,write_lcd_done,read_ds1302_time); parameter T100ms = 21'd2_000_000; reg[20:0] count; always@(posedge clk,negedge rst) if(!rst) count <= 0; else if(count < T100ms) count <= count + 21'd1; else count <= 0;reg[1:0] i; reg[3:0] temp; always@(posedge clk,negedge rst) if(!rst) begin read_ds1302_start <= 0; write_lcd_start <= 0; i <= 0; end else case(i) 2'd0: if(count == T100ms) begin read_ds1302_start <= 1; i <= i + 2'd1; end 2'd1: begin read_ds1302_start <= 0; if(read_ds1302_done) if(read_ds1302_time[3:0] != temp) begin temp <= read_ds1302_time[3:0]; write_lcd_start <= 1; i <= i + 2'd1; end else i <= 0; end 2'd2: begin write_lcd_start <= 0; if(write_lcd_done) i <= 0; end endcase endmodule。
3.用cpld/fpga设计数字钟
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity count60 is port(jn,rd,clk:in std_logic; count1,count0:out std_logic_vector(3 downto 0); co:out std_logic); end count60; architecture count_arc of count60 is begin process(clk) variable cnt1,cnt0:std_logic_vector(3 downto 0); begin if clk'event and clk='1' then if jn='1' then if cnt1="0101" and cnt0="1000" then co 评论0 0 0。
转载请注明出处众文网 » 毕业论文基于FPGA的数字钟(设计一个基于FPGA的数字时钟)