基于FPGA技术的数字时钟万年历设计

作者&投稿:氐奋 (若有异议请与网页底部的电邮联系)
基于FPGA的数字万年历设计,使用Verilog语言。~

/*
本实验实现一个能显示小时,分钟,秒的数字时钟。
*/
module clock(clk,rst,dataout,en);

input clk,rst;
output[7:0] dataout;
reg[7:0] dataout;
output[7:0] en;
reg[7:0] en;

reg[3:0] dataout_buf[7:0];
reg[25:0] cnt;
reg[15:0] cnt_scan;
reg[3:0] dataout_code;

wire[5:0] cal; //各级进位标志
assign cal[0]=(dataout_buf[0]==9)?1:0;
assign cal[1]=(cal[0]&&dataout_buf[1]==5)?1:0;
assign cal[2]=(cal[1]&&dataout_buf[3]==9)?1:0;
assign cal[3]=(cal[2]&&dataout_buf[4]==5)?1:0;
assign cal[4]=(cal[3]&&dataout_buf[6]==9)?1:0;
assign cal[5]=(cal[3]&&dataout_buf[6]==2&&dataout_buf[7]==1)?1:0;

always@(posedge clk or negedge rst)
begin
if(!rst) begin
cnt_scan<=0;
en<=8'b1111_1110;
end
else begin
cnt_scan<=cnt_scan+1;
if(cnt_scan==16'hffff) begin
en[7:1]<=en[6:0];
en[0]<=en[7];
end
end
end

always@(*)
begin
case(en)
8'b1111_1110:
dataout_code=dataout_buf[0];
8'b1111_1101:
dataout_code=dataout_buf[1];
8'b1111_1011:
dataout_code=dataout_buf[2];
8'b1111_0111:
dataout_code=dataout_buf[3];
8'b1110_1111:
dataout_code=dataout_buf[4];
8'b1101_1111:
dataout_code=dataout_buf[5];
8'b1011_1111:
dataout_code=dataout_buf[6];
8'b0111_1111:
dataout_code=dataout_buf[7];
default:
dataout_code=dataout_buf[0];
endcase
end

always@(posedge clk or negedge rst)
begin
if(!rst)
cnt<=0;
else if(cnt!=40000000)
cnt<=cnt+1;
else
cnt<=0;
end

always@(posedge clk or negedge rst) //实现计数和进位的功能
begin
if(!rst) begin
dataout_buf[0]<=0;
dataout_buf[1]<=0;
dataout_buf[2]<=15;
dataout_buf[3]<=0;
dataout_buf[4]<=0;
dataout_buf[5]<=15;
dataout_buf[6]<=2;
dataout_buf[7]<=1;
end
else begin
if(cnt==26'd40000000) begin
if(!cal[0])
dataout_buf[0]<=dataout_buf[0]+1;
else begin
dataout_buf[0]<=0;
if(!cal[1])
dataout_buf[1]<=dataout_buf[1]+1;
else begin
dataout_buf[1]<=0;
if(!cal[2])
dataout_buf[3]<=dataout_buf[3]+1;
else begin
dataout_buf[3]<=0;
if(!cal[3])
dataout_buf[4]<=dataout_buf[4]+1;
else begin
dataout_buf[4]<=0;
if(!cal[4])
dataout_buf[6]<=dataout_buf[6]+1;
else begin
dataout_buf[6]<=0;
if(!cal[5])
dataout_buf[7]<=dataout_buf[7]+1;
else
dataout_buf[7]<=0;
end
end
end
end
end
end
end
end

always@(dataout_code)
begin
case(dataout_code)
4'b0000:
dataout=8'b1100_0000;
4'b0001:
dataout=8'b1111_1001;
4'b0010:
dataout=8'b1010_0100;
4'b0011:
dataout=8'b1011_0000;
4'b0100:
dataout=8'b1001_1001;
4'b0101:
dataout=8'b1001_0010;
4'b0110:
dataout=8'b1000_0010;
4'b0111:
dataout=8'b1111_1000;
4'b1000:
dataout=8'b1000_0000;

endcase
end

endmodule

这个你再改改吧,应该没有什么难度的,祝你好运!

秒计数器计数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?
只有让楼主知道设计原理是怎么样的,才能让他理解并做好自己的设计.懂?

【实验目的】:

设计一个24小时制数字钟,要求能显示时,分,秒,并且可以手动调整时和分

【试验中所用器材】:

开发环境MAX—PLUSII,ZY11EDA13BE 试验系统, VHDL 语言.

【设计原理】

数字钟的主体是计数器,它记录并显示接收到的秒脉冲个数,其中秒和分为模60计数器,小时是模24计数器,分别产生3位BCD码。BCD码经译码,驱动后接数码管显示电路。

秒模60计数器的进位作为分模60计数器的时钟,分模60计数器的进位作为模24计数器的时钟。

为了实现手动调整时间,在外部增加了setm(调整分),seth(调整时)按键,当这两个按键为低电平时,电路正常计时,当为高电平时,分别调整分,时。同时在外部还增加了一个清零按键clr.和消抖动电路。

【单元模块设计部分】

消抖动电路关键部分

signal key_in1,key_in2:std_logic:='0';

begin

process(clk,key_in)

begin

if clk'event and clk='1' then

key_in1<=key_in;key_in2<=key_in1;

if key_in='1' and key_in1='1' and key_in2='1' then key_out<='1';

else key_out<='0';

时序仿真图

模60计数器程序关键部分:

signal md_temp,mg_temp:std_logic_vector(3 downto 0);

begin

process(clk,clr)

begin

if clr='1' then

md_temp<="0000"; mg_temp<="0000";

elsif set='1' then

md_temp<=setl; mg_temp<=seth;

elsif clk'event and clk='1' then

if md_temp="1001" then

md_temp<="0000";mg_temp<=mg_temp+'1';

else md_temp<=md_temp+'1';

end if;

if md_temp="1001" and mg_temp="0101" then

md_temp<="0000";mg_temp<="0000";

秒时序仿真图

分时序仿真

分的清零和调整时间部分

模24计数器程序关键部分

signal hd_temp,hg_temp:std_logic_vector(3 downto 0);

begin

process(clk,clr,set,setl,seth)is

begin

if set='1' then hd_temp<=setl; hg_temp<=seth;

elsif clr='1' then hd_temp<="0000"; hg_temp<="0000";

elsif clk'event and clk='1' then

if hg_temp="0010" and hd_temp="0011" then

hd_temp<="0000"; hg_temp<="0000";

elsif hd_temp="1001" then

hg_temp<=hg_temp+'1' hd_temp<="0000";

else hd_temp<=hd_temp+'1';

end if;

end if;

end process ;

时时序仿真图

清零和调时

显示部分关键程序

process (sd,sg,md,mg,hd,hg)

begin

case sd is

when "0000" =>sl<="1111110";

when "0001" =>sl<="0110000";

when "0010" =>sl<="1101101";

when "0011" =>sl<="1111001";

when "0100" =>sl<="0110011";

when "0101" =>sl<="1011011";

when "0110" =>sl<="1011111";

when "0111" =>sl<="1110000";

when "1000" =>sl<="1111111";

when "1001" =>sl<="1111011";

when others =>sl<="0000000";

end case;

if clk_g'event and clk_g='1' then

if sel="101" then

sel<="000";

else sel<=sel+'1';

end if;

end if;

end process;

process(sel,sd,sl,sg,sh,md,ml,mg,mh,hd,hl,hg,hh)

begin

case sel is

when"000"=>led<=sl;

led_which<=sd;

when"001"=>led<=sh;

led_which<=sg;

when"010"=>led<=ml;

led_which<=md;

when"011"=>led<=mh;

led_which<=mg;

when"100"=>led<=hl;

led_which<=hd;

when"101"=>led<=hh;

led_which<=hg;

when others=>led<="0000000";

led_which<="0000";

end case;

仿真图

顶层文件关键程序

port(

clk,clk_g:in std_logic;-----clk_g是用在数码管显示里面的信号

clr: in std_logic;------clr=1时 清零

setm,seth:in std_logic;---------setm为1时调分,seth为1时调时

setd,setg:in std_logic_vector(3 downto 0);----调整时间的时候,setd调整的是低位setg调整高位

led:out std_logic_vector(6 downto 0);

sel_out: out std_logic_vector(2 downto 0);

led_which: out std_logic_vector(3 downto 0));---输出的是秒分时的哪一个

begin

u1:de_shake port map (clk=>clk,key_in=>clr,key_out=>clro);

u2:de_shake port map (clk=>clk,key_in=>setm,key_out=>setmo);

u3:de_shake port map (clk=>clk,key_in=>seth,key_out=>setho);

u4:s60 port map (clk=>clk,clr=>clro,sd=>sdl,sg=>sgh,fenmaichong=>fenmaichongo);

u5:m60 port map (clk=>fenmaichongo,clr=>clro,md=>mdl,mg=>mgh,xiaoshimaichong=>xiaoshimaichongo,setl=>setd,seth=>setg,set=>setmo);

u6:h24 port map (clk=>xiaoshimaichongo,clr=>clro,hd=>hdl,hg=>hgh,set=>setho,setl=>setd,seth=>setg);

u7:led_xs port map (clk_g=>clk_g,sd=>sdl,sg=>sgh,md=>mdl,mg=>mgh,hd=>hdl,hg=>hgh,led=>led,sel_out=>sel_out,led_which=>led_which);


基于FPGA的并行扰码解扰器设计
扰码技术:FPGA并行解扰器设计详解<\/ 扰码,这个数字传输系统中的关键技术,如璀璨的繁星照亮通信的航道,它通过随机化处理数字信息,将其转化为近似白噪声的序列,对通信系统的稳定性、保密性和效率发挥着至关重要的作用。在EPON系统中,它更是不可或缺的稳定器。移位寄存器,作为扰码器设计的灵魂,...

FPGA技术芯片的具体实现
FPGA技术的核心实现是基于Altera公司的Flex10k系列芯片。该芯片的工作流程是通过Max+plusII开发软件,设计师使用VHDL语言来描述系统中的各个模块,如图1所示的虚线框部分。这个过程由软件自动完成,包括编译、综合、布局和布线,最终生成可供编程使用的数据文件。这些文件会被装载到FPGA的配置存储单元中。FPGA的...

FPGA现在学起来怎么样?难不?需要了解哪些基础课程?
数字逻辑是任何电子电气类专业的专业基础知识,也是必须要学好的一门课。如果不能将数字逻辑知识烂熟于心,养成良好的设计习惯,学FPGA到最后仍然是雾里看花水中望月,始终是一场空的。以上四条只是我目前总结菜鸟们在学习FPGA时所最容易跑偏的地方,FPGA的学习其实就像学习围棋一样,学会如何在棋盘上落子很容易,成为一位...

基于FPGA的频率计设计 毕业论文。。请高手帮忙,有重谢。。
数字频率计用于测量信号(方波,正弦波或其他周期信号)的频率,并用十进制数字显示,它具有精度高,测量速度快,读数直观,使用方便等优点。一个用VHDL语言实现的实例如下:-- Project Name: 恒精度频率计 -- Target Devices: FPGA or CPLD -- Revision 0.01 - File Created -- Comments: clk-...

FPGA技术入门与典型项目开发实例基本信息
FPGA技术入门与典型项目开发实例是由作者张晓飞编写的,这本书于2012年1月16日由享有盛誉的化学工业出版社首次出版。全书共164页,语言简洁明了,适合使用简体中文阅读。它的开本为16开,方便携带和阅读。书的国际标准书号为ISBN: 7122119246和9787122119247,便于图书识别和检索。商品的尺寸为25.6厘米 x 18...

"FPGA”代表什么?
FPGA的缩写分类属于社区类别,主要应用于会议和研讨会的领域。在实际应用中,FPGA技术广泛用于电子设计自动化,特别是在数字信号处理、通信系统和硬件加速器的设计中。例如,通过FPGA,工程师可以灵活地编程定制硬件,以实现特定功能,这在实时处理和嵌入式系统中尤为常见。总之,FPGA是一个专业术语,代表着一...

FPGA具有哪五大优势?工业电子市场网
FPGA是可重新编程的硅芯片。使用预建的逻辑块和可重新编程布线资源,用户无需再使用电路试验板或烙铁,就能配置这些芯片来实现自定义硬件功能。FPGA技术的五大优势性能 上市时间 成本 稳定性 长期维护 性能-利用硬件并行的优势,FPGA打破了顺序执行的模式,在每个时钟周期内完成更多的处理任务,超越了数字信号...

fpga是什么意思?
FPGA是现场可编程门阵列的英文缩写。FPGA是一种可编程逻辑器件,其内部逻辑可以由用户来设定。通常在芯片设计的验证阶段被大量使用,也在小批量试制产品中得到应用。

fpga开发的语言是什么
fpga开发的语言是Verilog HDL。Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。Verilog的设计初衷是成为一种基本语法与C语言相近的硬件描述语言。这是因为C语言在Verilog设计之初,已经在许多...

问一下CPU运算速度和FPGA等数字电路方面知识。麻烦懂架构的人解释下...
1.每秒十万亿次,这个概念本身就比较含糊,如果CPU厂商负责的话,一般会标明每秒十万亿次指令(MIPS--兆指令每秒),还是十万亿次浮点运算(MFLOPS--兆浮点操作每秒)。2.每个时钟周期最多应该就是执行一条指令,就算是多核也就是乘以核的数量。3.一般的CMOS与非门ASIC的延时在ns级。一般来说,FPGA...

乐业县18025129729: 基于FPGA技术的数字时钟万年历设计 -
莫发乳酸: 【实验目的】: 设计一个24小时制数字钟,要求能显示时,分,秒,并且可以手动调整时和分 【试验中所用器材】: 开发环境MAX—PLUSII,ZY11EDA13BE 试验系统, VHDL 语言. 【设计原理】 数字钟的主体是计数器,它记录并显示接收到...

乐业县18025129729: 如何基于FPGA设计一个万年历,实现年、月、日显示功能,具有清零、年月日调整的功能. -
莫发乳酸: 将月模块的输出接入到天模块的输入中,反过来控制天数;在年模块中可以设计一个闰年标志位,并将该输出与天、月模块建立联系即可.

乐业县18025129729: LED数字时钟万年历设计
莫发乳酸: 件方案: ⑴ 显示器采用6位LED数码管(共阳),可分别显示时间或日期;(通过KB键可切换) ⑵ 显示器的驱动采用动态扫描电路形式,以达到简化电路的目的.但要注意所需的驱动电流比静态驱动时要大,因此要增加驱动电路.可采用74LS244或者晶体管;其中74ls244是用来驱动段选码,晶体管是驱动位选码! ⑶采用“一键多用方案”,以减少按键数目.本方案只采用了两个按键 ⑷ 整体上要考虑:结构简单、布局美观、操作方便、成本低廉. 以往我们做过这个课题~~~

乐业县18025129729: 基于FPGA的,LCD1602显示的电子万年历. -
莫发乳酸: 能显示初始设定时间,说明LCD1602的引脚连接是对的.可以再查看下按键的引脚有没有连接正确.

乐业县18025129729: 基于FPGA的多功能数字钟 -
莫发乳酸: 本文利用Verilog HDL语言自顶向下的设计方法设计多功能数字钟,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过Altera QuartusⅡ4.1和ModelSim SE 6.0完成综合、仿真.此程序通过下载到FPGA芯片后,可应用于实际的数字钟显示中.

乐业县18025129729: 基于FPGA显示数字钟 -
莫发乳酸: 这个应该要用SOPC做,因为在LCD上实现这个针式数字钟比较复杂,应该在软件上做,所以应该用上nios处理器,然后想办法在这个处理器上用软件的方法. 至于你说如何实现时钟各针的变化,我想应该是改变图片的属性来实现各针的位置变化的.至于算法是怎样的,这个可以查一下C++做的数字钟,关于这方面的资料还是很多的.

乐业县18025129729: 基于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 ...

乐业县18025129729: 基于FPGA的毕设题目 -
莫发乳酸: 就做个数字时钟吧 简单 呵呵 直接用QUARTUS里的模块拼 如果会用MATLAB 那做起来就更快啊

乐业县18025129729: 基于FPGA的可编程定时器/计数器8253的设计与实现 -
莫发乳酸: 基于FPGA的可编程定时器/计数器8253的设计与实现 摘??? 要:本文介绍了可编程定时器/计数器8253的基本功能,以及一种用VHDL语言设计可编程定时器/计数器8253的方法,详述了其原理和设计思想,并利用Altera公司的FPGA器件...

乐业县18025129729: 用单片机做数字钟和用FPGA做数字钟的方案比较 -
莫发乳酸: 一般来讲,同样的逻辑,基于fpga要比基于单片机要快很多,因为它们工作的原理是完全不同的.单片机是基于指令工作的,同样的激励到达单片机后,单片机首先要判断,然后读取相应的指令,最后作出相应,这每一步都是需要在单片机的时钟驱动下一步步的进行.而基于fpga则是把相应的逻辑“暂时”固化为硬件电路了,它对激励作出的响应速度就是电信号从fpga的一个管脚传播另一个管脚的传播速度,当然这指的是异步逻辑,同时电信号也要在芯片内进行一些栅电容的充放电动作,但这些动作都是非常非常快的.因此,总的来说,基于fpga要比基于单片机要快很多

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网