基于FPGA的电子时钟设计
- 格式:doc
- 大小:631.00 KB
- 文档页数:21
基于FPGA的电子钟设计报告一、FPGA的基本知识1、可编程逻辑器件的概况可编程逻辑器件主要分为FPGA和CPLD 两种,两者的功能基本相同。
FPGA--现场可编程门阵列的简称CPLD--复杂可编程逻辑器件的简称2、FPGA芯片及其最小系统(1)FPGA芯片它的外形与普通嵌入式处理器芯片相同采用PGA(Organic pin grid Array,有机管脚阵列)的封装形式,但可以通过烧写特殊程序改变其内部结构,实现专门的电路功能。
基于FPGA的数字时钟2019-11-23 21:36·电力源动一、FPGA的基本知识1、可编程逻辑器件的概况可编程逻辑器件主要分为FPGA和CPLD 两种,两者的功能基本相同。
FPGA--现场可编程门阵列的简称CPLD--复杂可编程逻辑器件的简称它的外形与普通嵌入式处理器芯片相同采用PGA(Organic pin grid Array,有机管脚阵列)的封装形式,但可以通过烧写特殊程序改变其内部结构,实现专门的电路功能。
二、FPGA的设计方法1、编程语言FPGA的主流程序设计语言主要有VHDL语言与Verilog语言两种。
本课题采用VHDL语言进行编写。
VHDL--用简洁明确的源代码来描述复杂的逻辑控制。
它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。
Verilog--一种基本语法与C语言相近,相比较于C语言更容易理解,2、图形化程序设计(设计效率低)三、软件开发环境QuartusII是Altera提供的FPGA开发集成环境,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。
它完全支持VHDL设计流程,其内部嵌有VHDL逻辑综合器。
四、数字钟功能模块认识数字时钟的设计采用了自顶向下分模块的设计。
底层是实现各功能的模块,各模块由VHDL语言编程实现顶层采用原理图形式调用。
具体的设计框图:各模块原理剖析:(1)在七段数码管上具有时--分--秒的依次显示;(2)时、分、秒的个位记满十向高位进一,分、秒的十位记满五向高位进一,小时按24进制计数,分、秒按60进制计数;(3)整点报时,当计数到整点时扬声器发出响声;(4)时间设置:可以通过按键手动调节秒和分的数值。
基于FPGA的数字电⼦钟的设计与实现背景:本实验所有结果基于Quartus II 13.1 (64-bit)实现,实验过程采⽤⾃下⽽上⽬录⼀、基本功能设计与思路基本功能:能实现秒、分钟、⼩时的计数,计数结果清晰稳定的显⽰在 6 位数码管上。
1、动态显⽰模块该模块主要功能是通过数码管的动态扫描实现 6 位数码管显⽰计数结果,本模块由扫描模块scan_cnt6,位选控制模块 dig_select,数据选择控制模块 seg_select 以及译码模块 decoder 构成扫描模块 scan_cnt6模块功能:产⽣ 位选控制端dig_select 和数据选择端 code_select 模块所需要的地址信息,扫描时钟决定位选信号和数据切换的速度。
设计思路:利⽤74390芯⽚(P160 TTL 双⼗进制异步计数器)构建⼀个模六计数器,就是6进制计数器,利⽤计数到6(110)时,“q2”和“q1”为⾼电平,产⽣ ⼀个复位信号,加到74390的⾼电平有效的异步清0端“1CLR”上,使计数器回0,从⽽实现模六计数。
设计结果:cnt6模块设计图波形仿真:(默认为时序仿真)cnt6模块波形仿真图位选模块 dig_select模块功能:在地址端的控制下,产⽣位选信号。
设计思路:利⽤74138芯⽚(3线-8线译码器),当选通端输⼊端G1为⾼电平,选通端输⼊端G2AN和G2BN为低电平时,将扫描信号cnt6的输出作为输⼊信号,dig[5..0]是译码输出,输出低电平有效。
设计结果:dig_select模块设计图波形仿真:dig_select模块波形仿真图数据选择模块 seg_select模块功能:输⼊ 6 组数据,每组数据 4bit,本模块完成在地址端的控制下从6 组数据当中选择 1 组输出。
设计思路:利⽤74151芯⽚(P91 8选1数据选择器),在控制输⼊端GN为低电平时,将扫描信号的选择下,分别选中D[5..0]对应的输⼊信号输出为Y。
fpga设计电子时钟(12864显示)设计心得:1,进行分块设计,类似调用函数,脉冲使能2,充分了解fpga的并行特性(c程序的串行特性,不能并行处理,线性:只有完成了当前任务,才能进行下一个任务)设计问题:1,似乎读有问题,在char_LR=1时,写的数据为汉字(程序中时间没有更改,主要为了调试看波形)实际板子验证时,将LCD_clk模块中的分频调为50到100kHz左右整体架构功能模块液晶初始化时序parameter Idle =8'b0000_0001,Basic_com =8'b0000_0010, //basic instruction:0x30Disp_set =8'b0000_0100, //set show curse blingDDRAM_clear =8'b0000_1000, //colunm address XWait_clear =8'b0001_0000,Point_set =8'b0010_0000,Show_on =8'b0100_0000,Stop=8'b1000_0000;写字符的时序由于字符属于半宽字形,且DDRAM形式下,每行只有8个地址,而字符可以写16个,因此用下面三个来表示写的地址:i nput [1:0] Y, //row 0-3i nput [2:0] X, //clunm 0-7i nput LR, //0/1因此当LR=0时,直接写地址,然后写一个字符编码即可LR=1时,先写地址,读出高位数据,然后写入两个字节(读出的数据,要写的数据)parameter Idle =8'b0000_0001,DDRAM =8'b0000_0010, //drawing modeW_addr =8'b0000_0100, //row address YDummy =8'b0000_1000, // not really readingR_data =8'b0001_0000, //reading high byte dataW0_data =8'b0010_0000,W1_data =8'b0100_0000,Stop =8'b1000_0000;# t1: 0 t2: 2305, T: 10,n_init: 38 # t1: 2305 t2: 2665, T: 10,n_char: 6 # t1: 2665 t2: 3265, T: 10,n_char: 10完成了上述工作,就可以设计一个简单的电子时钟,其要求如下:在屏幕上显示时间00:00:00要动态走(主要就是控制脉冲信号的产生)设计思路:100:00:0023LCD更新数据显示00:00:0100:01:591代码/*sign.v//creat the control signclock h:m:s*/module sign(//module LED(input lcd_clk, //100kHzinput sys_rst,output reg lcd_char_en,output reg lcd_init_en,output reg [7:0]char_data,output reg [2:0]char_X,output reg [1:0]char_Y,output reg char_LR);parameter T_w_char = 5,T_lcd_init = 40;reg [47:0] time_out;/* 1s */reg [16:0] cnt_s;reg [5:0] cnt0_clk;reg [3:0] cnt1_clk;reg [2:0] cnt_char;reg [5:0] sec,min;reg [4:0] hour;reg flag_s,flag_init;always @ (posedge lcd_clk or negedge sys_rst) begin //100kHz if(!sys_rst)begincnt_s <=0;cnt0_clk<=0;cnt1_clk<=0;cnt_char<=0;sec <=0;min <=0;hour <=0;flag_s <=0;flag_init <=1'b1;char_Y <= 2'b10;endelsebeginif(cnt_s == (40-1))begincnt_s <=0;flag_s<=1'b1;data_deal; //taskendelsecnt_s <=cnt_s+1'b1;if(flag_init)begincnt0_clk <= cnt0_clk +1'b1;case(cnt0_clk)1 : begin lcd_init_en <=1'b0; end2 : begin lcd_init_en <=1'b1; end3 : begin lcd_init_en <=1'b1; end4 : begin lcd_init_en <=1'b0; endT_lcd_init: beginflag_init <=0;cnt0_clk <=0;enddefault: lcd_init_en <=0;endcaseendelseif(flag_s)begincnt1_clk <= cnt1_clk +1'b1;case(cnt1_clk)1 : begin lcd_char_en <=1'b0; e nd2 : begin lcd_char_en <=1'b1; e nd3 : begin lcd_char_en <=1'b1; e nd4 : begin lcd_char_en <=1'b0; e ndT_w_char: beginif(cnt_char == 3'b111)begin cnt_char<=0; flag_s <=0; endelsecnt_char <=cnt_char+1'b1;cnt1_clk <=0;enddefault: lcd_char_en <=0;endcasecase(cnt_char)//2 3 4 50 : begin char_X <=3'b000; char_LR <=0; char_data <=time_out[47:40]; end //x0:00:001 : begin char_X <=3'b001; char_LR <=0; char_data <=time_out[39:32]; end //0x:00:002 : begin char_X <=3'b010; char_LR <=0; char_data <=8'h3a; end //: ascii 0583 : begin char_X <=3'b011; char_LR <=0; char_data <=time_out[31:24]; end //00:x0:004 : begin char_X <=3'b100; char_LR <=0; char_data <=time_out[23:16]; end //00:0x:005 : begin char_X <=3'b101; char_LR <=0; char_data <=8'h3a; end //: ascii 0586 : begin char_X <=3'b110; char_LR <=0; char_data <=time_out[15: 8]; end//00:00:x07 : begin char_X <=3'b111; char_LR <=0; char_data <=time_out[7 : 0]; endendcaseendendendtask data_deal;beginif(sec == 59)if(min ==59)if(hour == 23)begin hour<=0;min <=0;sec <=0; endelsebegin hour<=hour + 1'b1; min <=0; sec<=0; endelsebegin min <= min+1'b1; sec <=0; endelsesec <= sec +1'b1;time_out[47:40] <= 8'h30+(hour/10);time_out[39:32] <= 8'h30+(hour%10);time_out[31:24] <= 8'h30+(min /10);time_out[23:16] <= 8'h30+(min %10);time_out[15: 8] <= 8'h30+(sec /10);time_out[ 7: 0] <= 8'h30+(sec %10);endendtaskendmodule2代码module LCD_init(//module LED(input lcd_clk,input sys_clk,input lcd_en, //1 is activedoutput reg LCD_RS,output reg LCD_RW,output reg LCD_EN,inout [7:0] LCD_DATA,output reg ACK);reg flag;reg [7:0] lcd_data;reg [7:0] State;reg link_rs;reg link_data;parameter Idle =8'b0000_0001,Basic_com =8'b0000_0010, //basic instruction:0x30Disp_set =8'b0000_0100, //set show curse blingDDRAM_clear =8'b0000_1000, //colunm address XWait_clear =8'b0001_0000,Point_set =8'b0010_0000,Show_on =8'b0100_0000,Stop =8'b1000_0000;reg [9:0] cnt; //16*2*32=2^10 byte(8bits)/* LCD_RW LCD_DATA*/assign LCD_DATA = link_data ? lcd_data: 8'hzz;/* LCD_RW LCD_EN */always @ (posedge sys_clk) beginif(flag)beginLCD_RW =0;LCD_EN = lcd_clk;endelsebeginLCD_RW =1'bz;LCD_EN =1'bz;endend/* LCD_RS */always @ (posedge lcd_clk) beginif(link_rs)LCD_RS <=1'b0;elseLCD_RS <=1'bz;end/*-Main state transter-*/always @ (posedge lcd_clk) begincase (State)Idle : beginif(lcd_en)begin link_rs=1; State <= Basic_com; endelseState <= Idle;ACK =0;flag <=1'b0;lcd_data <= 8'hzz;cnt <= 0;endBasic_com : beginflag <=1'b1;link_data =1'b1;cnt <= cnt +1'b1;if(cnt == 1)State <= Disp_set;elseState <= Basic_com;lcd_data <= 8'h30;endDisp_set : beginState <= DDRAM_clear;lcd_data <= 8'h0c; //show curse blink is offendDDRAM_clear : beginState <= Wait_clear;lcd_data <= 8'h01;endWait_clear : begincnt <=cnt +1'b1;link_data = 1'b0;flag <=0;lcd_data <= 8'hzz;if(cnt == 30)State <= Point_set;elseState <= Wait_clear;endPoint_set : beginflag <=1'b1;link_data =1'b1;State <= Show_on;lcd_data <= 8'h06; //point +1 automatically,screen move off endShow_on : beginState <= Stop;lcd_data <= 8'h0c;endStop : beginState <= Idle;flag <=1'b0;link_data =1'b0;ACK <=1'b1;lcd_data <= 8'hzz;cnt <= 0;link_rs =0;enddefault: begin ACK =0;State <= Idle;end endcaseendendmodule3代码//module LCD_top(module LED(input sys_clk,input sys_rst,output LCD_RS,output LCD_RW,output LCD_EN,inout [7:0] LCD_DATA,output BUSY);wire [7:0] char_data;wire [2:0] char_X;wire [1:0] char_Y;sign singb(.lcd_clk (lcd_clk), //100kHz.sys_rst (sys_rst),.lcd_char_en(lcd_char_en),.lcd_init_en(lcd_init_en),.char_data (char_data),.char_X (char_X),.char_Y (char_Y),.char_LR (char_LR));LCD_init lcd_init(.lcd_clk (lcd_clk),.sys_clk (sys_clk),.lcd_en (lcd_init_en), //1 is actived .LCD_RS (LCD_RS),.LCD_RW (LCD_RW),.LCD_EN (LCD_EN),.LCD_DATA (LCD_DATA),.ACK (init_ack));LCD_charac a(.lcd_clk (lcd_clk),.sys_clk (sys_clk),.lcd_en (lcd_char_en), //1 is actived .Y (char_Y), //row 0-3.X (char_X), //clunm 0-7.LR (char_LR), //0/1.data_disp (char_data),.LCD_RS (LCD_RS),.LCD_RW (LCD_RW),.LCD_EN (LCD_EN),.LCD_DATA (LCD_DATA),.ACK (init_ack));LCD_clk clk1(.sys_clk (sys_clk),.lcd_clk (lcd_clk));endmodule4代码module LCD_clk(//module LED(input sys_clk,output reg lcd_clk);/*-creat the 25kHz clock-*/reg [11:0] lcd_cnt;always @ (posedge sys_clk) beginif(lcd_cnt == 2) //100kHzbeginlcd_cnt =0;lcd_clk <= ~ lcd_clk;endelselcd_cnt = lcd_cnt +1'b1;endinitial begin lcd_clk =0; lcd_cnt =0; endendmodule5代码/* to display character */module LCD_charac(//module LED(input lcd_clk,input sys_clk,input lcd_en, //1 is activedinput [1:0] Y, //row 0-3input [2:0] X, //clunm 0-7input LR, //0/1input [7:0] data_disp,output reg LCD_RS,output reg LCD_RW,output reg LCD_EN,inout [7:0] LCD_DATA,output reg ACK);reg [7:0] lcd_data;reg [7:0] R_buff;reg [7:0] State;parameter Idle =8'b0000_0001,DDRAM =8'b0000_0010, //drawing modeW_addr =8'b0000_0100, //row address YDummy =8'b0000_1000, // not really readingR_data =8'b0001_0000, //reading high byte dataW0_data =8'b0010_0000,W1_data =8'b0100_0000,Stop =8'b1000_0000;reg flag,cnt;reg link_data;reg flag0;/* LCD_DATA */assign LCD_DATA = link_data ? lcd_data :8'hzz;/* LCD_EN */always @ (posedge sys_clk) beginif(flag == 1'b1)LCD_EN <= lcd_clk;elseLCD_EN <=1'bz;end/* LCD_RW */always @ (posedge lcd_clk) beginif(flag0)if(State == Dummy || State == R_data)LCD_RW <=1'b1;elseLCD_RW <=1'b0;elseLCD_RW <=1'bz;end/* LCD_RS */always @ (posedge lcd_clk) beginif(flag0)if(State == W0_data || State == W1_data || State == Dummy || State == R_data) LCD_RS <=1'b1;elseLCD_RS <=1'b0;elseLCD_RS <=1'bz;end/*-Main state transter-*/always @ (posedge lcd_clk) begincase (State)Idle : beginif(lcd_en)begin State <= DDRAM; link_data =1; flag0=1'b1; endelsebegin State <= Idle; flag0= 1'b0;endflag <= 1'b0;lcd_data <= 8'hzz;ACK <=0;endDDRAM : begin //here flag is changed,not Idle, cause sys_clk flag <= 1'b1;State <= W_addr;link_data =1;lcd_data <= 8'h30;endW_addr : beginif(!cnt)beginif(LR)State <= Dummy;elseState <= W0_data;cnt =1'b1;endelseState <= W0_data;case (Y)2'b00: lcd_data <= 8'h80 + X;2'b01: lcd_data <= 8'h90 + X;2'b10: lcd_data <= 8'h88 + X;2'b11: lcd_data <= 8'h98 + X;endcaselink_data =1'b1;endDummy : beginState <= R_data;R_buff <= LCD_DATA;link_data =0;endR_data : beginState <=W_addr;R_buff <= LCD_DATA;endW0_data : beginif( !LR)beginlcd_data <= data_disp;State <= Stop;endelsebeginlcd_data <= R_buff;State <= W1_data;endendW1_data : beginlcd_data <= data_disp;State <=Stop;flag0=0;endStop : beginState <= Idle;flag <= 1'b0;lcd_data <= 8'hzz;cnt <= 0;ACK <= 1;enddefault: begin ACK =0;State <= Idle; link_data=0 ;end endcaseendendmodule。
目录第一章绪论 (1)第二章可编程逻辑器件概述及设计方案 (2)2.1 CPLD/FPGA概述及VHDL语言的特点 (2)2.2可编程逻辑器件的分类和发展历程 (4)2.3 EPF10K10LC84-4芯片简介 (5)2.4 电子时钟的设计方案 (6)第三章系统电路设计 (7)3.1 总体设计 (7)3.2 显示电路设计 (8)3.2.1 分频器电路 (10)3.2.2 扫描电路电路 (11)3.2.3 BCD码多路选择器 (12)3.2.4 BCD译码器 (13)3.2.5 位选码电路 (15)3.3 电子时钟计数器电路设计 (15)3.3.1 秒和分计数器设计 (16)3.3.2 小时计数器设计 (17)总结 (23)参考文献 (24)致谢 ................................................................................... 错误!未定义书签。
第一章绪论时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。
现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能更进一步,产品更新换代的节奏也越来越快。
现代电子设计技术的核心是EDA ( Electronic Design Automation ) 技术。
目录第一章绪论.............................................. 错误!未定义书签。
1.1选题背景........................................... 错误!未定义书签。
1.1.1 课题相关技术的发展............................. 错误!未定义书签。
1.1.2 课题研究的必要性............................... 错误!未定义书签。
1.2课题研究的内容..................................... 错误!未定义书签。
第二章 FPGA简介......................................... 错误!未定义书签。
2.1FPGA概述........................................... 错误!未定义书签。
2.2FPGA基本结构....................................... 错误!未定义书签。
2.3FPGA系统设计流程................................... 错误!未定义书签。
2.4FPGA开发编程原理................................... 错误!未定义书签。
2.5Q UARTUS II设计平台................................... 错误!未定义书签。
2.5.1 软件开发环境及基本流程......................... 错误!未定义书签。
2.5.2 具体设计流程................................... 错误!未定义书签。
第三章数字钟总体设计方案................................ 错误!未定义书签。
硬件设备75基于FPGA的数字电子时钟设计◆◆邢钰莹摘要:数字电子钟是一种用数字显示秒﹑分﹑时的记时装置,与传统的机械钟相比,他具有走时准确﹑显示直观﹑无机械传动装置等优点,因而得到了广泛的应用:小到人们的日常生活中的电子手表,大到车站﹑码头﹑机场等公共场所的大型数显电子钟。
本文基于FPGA的基础上用通过简单的VERILOG语言实现数字电子钟。
电子时钟最基础也是最关键的一步就是分频,我们所使用的开发板是50M有源晶振,程序设计要根据实现的不同功能进行分频。
最基本的有50M分频得到1HZ,5000分频得到1万HZ扫描数码管,60进制计数器、24进制计数器、12进制计数器,然后设定按键分别实行模式的选择、数字的加、选择数码管、复位清0,这样我们就能实现电子时钟的基本功能了,再加上判断语句就能得到闹钟和整点报时了。
关键词:数字电子钟;分频;计数器;数码管;按键选择1◆◆系统设计1.1 方案论证秒、分、时分别为60、60、24/12进制计数器。
秒、分均为六十进制,即显示00~59,它们的个位为十进制,十位为六进制。
分秒功能的实现:在Verilog语言中分别设计高低位,用if语句判断。
低位为个位,判断是否大于9若记到10清0,同时向高位进1;高位为十位,只有在收到低位的进位信号才变化,每次加1,判断是否大于5记到6清0同时向小时的低位进1。
时为二十四进制计数器时,显示为00~23,个位仍为十进制,而十位为三进制,当十进位计到2同时个位计到4时清零,就为二十四进制了;十二进制时,显示为00~11,个位仍然为十进制,而十位为二进制,当高位记到1同时个位记到2则清0,就为十二进制。
同分秒的用法,用if判断语句来实现。
2◆◆系统设计2.1 结构框图及说明图 1 设计框架图2.2.1 顶层文件设计及工作原理顶层文件采用文本方式,对模块进行例化实现顶层设计,具体程序代码见发的工程工作原理:振荡电路产生的50MHZ脉冲信号经50M分频器分频后产生的1HZ脉冲信号输入60进制秒计数器,再由秒计数器每60秒进位输出给60进制分钟计数器,分钟计数器满60后产生进位信号输入给24进制小时计数器,从而实现24小时制电子钟的功能;由时制转换模块实现24时制切换到12时制,从而实现12小时制电子钟的功能。
基于FPGA的数字电子钟系统设计摘要随着电子技术的飞速发展,现代电子产品渗透到了社会的各个领域,并有力地推动着社会生产力的发展和社会信息化程度的提高。
在现代电子技术中,可编程器无疑是扮演着重要角色。
现场可编程门阵列(FPGA)是近年来迅速发展起来的新型可编程器,其灵活的可编程逻辑可以方便的实现高速数字信号处理。
它突破了并行处理、流水级数的限制,具有反复的可编程能力,从而有效的地利用了片上资源,加上高效的硬件描述语言(VHDL),从而为数字系统设计提供了极大的方便。
本文较系统地介绍了FPGA的基本结构、基本原理、功能特点及其应用;阐述了数字系统设计的基本思想及设计流程,同时,也概述了FPGA在数字系统设计中的作用,基于FPGA的数字系统设计方法和流程;简要介绍了VHDL语言的发展历程,VHDL语言的功能特点等。
本文的主要内容是根据上述原理和方法设计一个电子钟系统,目的在于通过该系统的功能,体现出FPGA在数据处理中的应用。
该电子钟系统功能齐全,设计思路清晰。
系统程序基于VHDL语言,采用模块化设计方法。
系统设计包含8个子程序模块:分频组件、六十进制计数器组件、二十四进制计数器组件、闹钟设定组件、校时组件、i60BCD组件、i24BCD组件、以及二进制转换成七段码组件。
每个子程序均经过EDA 工具仿真,并附有仿真图,最后将各模块组装为一个整体——电子钟。
-关键词电子设计自动化;现场可编程门阵列;硬件描述语言;电子钟-Digital Electronic Clock DesignBased on Technology of FPGAAbstractWith the rapid development of electronic technology, modern electronic products , also increased. In modern electronic technology, the programmable logic devices play a key role.Field programmable gate arrays (FPGA), a new type of programmable device, is developing rapidly recent years.It introduced the concept of flexible programmable logic, which can realize -chip resources, coupled with efficient language VHDL, so as to design digital systems conveniently. This article introduces a system of the basic structure of the FPGA, the basic principle of features and applications; expounded on the basic design of digital systems thinking and design process, at the same time, also outlined the FPGA in the design of digital systems, FPGA-based digital system design methods and processes; gave a briefing on the development of VHDL language, VHDL language and other features.The main work is based on the principles and methods, design an electronic clock system to the adoption of the system, embodied in the FPGA data processing of applications. The electronic clock system is fully functional, designed clear ideas. Based on VHDL system procedures, The system is modular in design methods. It includes 8 sub-system design process modules:frequency division system, 60 M counter system,24 M-counter system,Alarm clock settings system, timing system, i60BCD system, i24BCD system, and convert binary into Seven-Segment code system. each subroutine simulated by EDA tools, with a simulation map. The modules will be the final assembly as a whole - the electronic clock.Key words EDA;FPGA; VHDL; Electronic clock-目录摘要 (I)Abstract (II)第1章绪论 (1)1.1课题背景和意义 (1)1.2可编程器件的发展历程 (1)1.2.1早期的可编程器件——PLD (2)1.2.2高级可编程器件FPGACPLD (3)1.3国内外研究现状 (4)1.4本文主要内容 (5)第2章FPGA基本结构及数字系统设计原理 (6)2.1 FPGA的基本结构及工作原理 (6)2.1.1基于查找表结构的FPGA (8)2.1.2查找表结构的FPGA逻辑实现原理 (8)2.1.3 FPGA的工作原理 (9)2.2数字系统设计概述 (9)2.2.1数字系统的组成 (10)2.2.2数字系统设计方法 (10)2.2.3数字系统设计的一般过程 (11)2.3本章小结 (12)-第3章数字电子钟功能模块设计 (13)3.1数字系统设计中的FPGA (13)3.1.1 FPGA在数字系统设计中的作用 (13)3.1.2基于FPGA的应用系统设计 (13)3.2数字系统设计的重要工具——VHDL (16)3.2.1 VHDL语言的特点 (16)3.2.2基于VHDL的系统设计流程 (17)3.3电子钟主要功能模块设计 (18)3.3.1分频模块 (18)3.3.2六十进制计数器模块 (19)3.3.3二十四进制计数器模块 (20)3.3.4校时模块 (22)3.3.5 BCD七段显示译码器 (23)3.4本章小结 (23)第4章电子钟模拟仿真及其分析 (24)4.1系统设计的总体思路 (24)4.2各功能模块仿真分析 (25)4.2.1 分频组件 (25)4.2.2 六十进制计数器组件 (25)4.2.3 二十四进制计数器组件 (26)4.2.4 闹钟设定组件 (26)4.2.5 校时组件 (27)4.2.6 i60BCD组件 (28)4.2.7 i24BCD组件 (29)4.2.8 二进制转换成七段码组件 (30)4.3数字电子钟功能仿真图 (30)4.4采用FPGA设计优势分析 (33)4.5本章小结 (34)结论 (35)致谢 (36)参考文献 (37)附录A (38)附录B (43)附录C (47)附录D (48)第1章绪论1.1课题背景和意义20世纪70年代,随着中小规模集成电路的开发应用,传统的手工制图设计印刷电路板和集成电路的方法已无法满足设计的精度和效率的要求。
重庆邮电大学电子设计自动化技术与应用设计报告设计题目:基于FPGA语言的数字钟设计学院:通信学院*名:***学号: S*********一、需求分析本设计是基于利用FPGA设计具有时、分、秒显示功能的简易时钟电路,数字电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别显示小时,分钟,秒的基本功能。
计数器有可以随意调整时间的功能,当显示器显示为23时59分59秒时,秒再进一位则时计数器清零。
二、总体设计1 、设计思路:利用FPGA实现电子时钟的功能,显示电路利用七段数码管进行显示。
它的计时周期是24小时,满刻度为23时59分59秒。
对于FPGA来说可以使用任何的I/O口来实现数据的传输,其I/O口的数量远多于单片机。
整个电路以FPGA芯片作为总体控制核心,对整个电路的正常运行进行控制,对于1秒时间产生可以利用开发板上可调频率来实现每1秒。
系统完成时间的实时计算以后,将计算数据通过I/O口传给数码管进行显示,通过段选和位选判断以后,将时间实时显示出来。
对于调整时间来可以利用简单的独立按键来实现调整复位及小时/分钟/秒的加一操作,并用数码管实时的显示调整后的时间。
当数字钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器信号,时、分、秒的计时结果通过6个数码管来动态显示,加上分隔符一共需要8个数码管显示。
2 、器件选型8位7段数码管、FPGA芯片。
三、硬件设计硬件电路总体的设计:硬件电路设计,要结合开发板上的硬件连接,从而对应连接才可以设计电路。
首先确定使用FPGA的哪个I/O口,对于按键使用哪个I/O口资源,按键SW0-SW3作为独立按键使用。
系统框图如下:Clk 0Clk1八个数码管组成的显示电路位选电路时计数器分计数器秒计数器译码显示电路按键调整电路秒、分、时计数器管脚分配表如下:四 、软件设计1、 总体软件流程图由于在Verilog语言中各个模块电路同时工作采用并行执行的,时序逻辑由时钟驱动,因此在程序中一定要注意时序的设计及时钟的设计,在各个不同的时钟驱动下电路响应的方式。
FPGA(Field-Programmable Gate Array,现场可编程门阵列)闹钟是一种基于FPGA芯片设计和实现的数字时钟设备。
下面是FPGA闹钟的工作原理:
1.时钟信号输入:FPGA闹钟通常会接收一个外部的时钟信号作为参考,比如晶体振荡器
产生的脉冲信号。
2.时钟分频:利用FPGA内部的时钟分频电路,将外部时钟信号分频为更低频率的时钟信
号。
例如,将1秒的脉冲信号分频为每秒钟一个时钟周期。
3.时间计数器:FPGA闹钟内部有一个时间计数器,根据分频后的时钟信号递增来记录当
前的时间。
计数器可以具体设置为年、月、日、时、分、秒等各个时间单位的计数值。
4.按键输入检测:FPGA闹钟可能还包含按键输入检测电路,用于检测用户操作的按键输
入,比如调整时间、设置闹钟、关闭闹钟等。
5.显示与输出控制:FPGA闹钟通常配备显示模块,如数码管或液晶显示屏,用于显示当
前的时间。
根据时间计数器的值,将相应的数字或字符输出到显示模块上。
6.闹钟功能:FPGA闹钟还可以具备闹钟功能,通过用户设置的时间和闹钟触发条件,当
计数器达到设定的闹钟时间时,触发闹钟功能,如蜂鸣器发出提示音或显示闹钟图标。
7.其他功能:FPGA闹钟还可以具备其他附加功能,如温度显示、日历功能、定时器功能
等,这些功能可以根据具体需求进行设计和实现。
通过FPGA芯片的灵活性和可编程性,闹钟的功能和特性可以由设计者根据需要进行自定义和扩展。
因此,FPGA闹钟具有较高的定制性和可扩展性,适用于各种不同的应用场景。
基于FPGA的电子钟设计基于FPGA的电子钟设计随着物联网技术的发展,我们对于时间的要求也越来越精细。
电子钟作为一个基本的时间计量工具,其精度和稳定性至关重要。
而FPGA作为一种强大的可编程逻辑器件,具有高速、高效、灵活等优势,成为电子钟设计的重要基础。
一、电子钟的基本原理电子钟是指采用电路元器件、微处理器等电子器件构成的时钟。
其基本原理可以概括为:利用更精确的时间计量器件替代机械时钟中的发条和摆轮,同时采用数字处理器等电子元器件代替机械表盘展示时间。
电子钟的核心是时基电路,其作用是产生高精度的时间信号,为其它电路提供时间标准。
通常采用晶振、TCXO、OCXO等时基器件。
为了保证时间精度,还要从外部时钟或天线接收校正信号。
二、FPGA的优势FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,可以灵活地对电路进行编程和调整,从而实现不同的功能。
FPGA相对于ASIC(Application Specific Integrated Circuit),具有以下优点:1. 灵活性:FPGA可以通过重新编程来实现不同的逻辑功能,而ASIC则需要重新设计电路,成本和时间都比较高。
2. 高速:FPGA以可编程方式实现电路逻辑,减少了多级缓存的开销,因此运行速度更快。
3. 低功耗:FPGA可以在逻辑上进行优化,以达到低功耗效果,同时利用现代的制造技术,还可以采用低功耗工艺。
4. 可重用性:FPGA的电路设计可以在不同的项目中重复使用,从而提高了效率和经济性。
三、基于FPGA的电子钟设计基于FPGA的电子钟设计方案主要包括两部分,分别是时基电路和数码显示电路。
1. 时基电路设计时基电路是电子钟的核心部分,可以采用晶振、TCXO、OCXO等器件来产生高精度的时间信号。
在电子钟的设计中,一般还需要接收外部同步校时信号,用于校正时钟误差。
基于FPGA的时基电路设计主要包括以下几个部分:(1)时钟输入电路:接收来自外部同步信号的时钟脉冲,用于校准电子钟的误差。
名目第一章绪论现代社会的标志之一确实是根基信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。
支撑信息电子产品高速开展的根底确实是根基微电子制造工艺水平的提高和电子产品设计开发技术的开展。
前者以微细加工技术为代表,而后者的代表确实是根基电子设计自动化〔electronicdesignautomatic,EDA〕技术。
本设计采纳的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、存放器传输级和逻辑门级这三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。
ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器;而FPGA是特不的ASIC芯片,与其它的ASIC芯片相比,它具有设计开发周期短、设计制造本钞票低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。
在操纵系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所对应的功能。
因此,按键信息输进是与软件结构紧密相关的过程。
依据键盘结构的不同,采纳不同的编码方法,但不管有无编码以及采纳什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。
[1]钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些根基上以钟表数字化为根底的。
因此研究数字钟以及扩大其应用有着特不现实的意义。
1.1选题背景本节将从FPGA嵌进式应用开发技术与数字钟技术开展的客瞧实际动身,通过对该技术开展状况的了解及课题本身的需要,指出研究基于FPGA的芯片系统与设计——数字钟的设计与实现的必要性。
课题相关技术的开展当今电子产品正向功能多元化,体积最小化,功耗最低化的方向开展。
它与传统的电子产品在设计上的显着区不是大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗落低,同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。
第1章绪论数字化是电子设计发展的必由之路已成为共识。
在数字化的道路上,我国电子设计技术的发展经历了,并将继续经历许多重大的变革与飞跃、从应用SSI通用数字电路芯片构成电路系统,到广泛地应用MCU(微控制器或单片机),它使得电子系统的智能化水平在广度和深度上产生了质的飞跃。
MCU的广便应用并没有抛弃SSI的应用,而是为它们在电于系统中找到了更合理的地位。
随着社会经济发展的延伸、各类新型电子产品的开发为我们提出了许多全新的课题和更高的要求。
FPGA在EDA基础上的广泛应用.从某种意义上说,新的电子系统运转的物理机制又将回到原来的纯数字电路结构,但这是—种更高层次的循环,应是一次否定之否定的运动,它在更高层次上容纳了过去数字技术的优秀部分,对MCU系统将是—种扬弃,但在电子设计的技术操作和系统构成的整体上却发生质的飞跃。
如果说MCU在逻辑的实现上是无限的话,那么高速发展的FPGA 不但包括了MCU这一特点,并兼有串、并工作方式和高速、高可靠性以及宽口径适用等诸多方面的特点、不仅如此,随着EDA技术的发展和FPGA在深亚微米领域的进军、它们与MCU、MPU、DSP、A/D、D/A、RAM和ROM等独立器件问的物理与功能界限正日趋模糊。
以大规模集成电路为物质基础的EDA技术终于打破了软硬件之间最后的屏障,使软硬件工程师们有了共同的语言[1]。
1.1 课题背景电子产品随着技术的进步,更新换代速度可谓日新月异。
不同行业层出不穷的技术需求,使得对配套电子系统或部件的功能、可靠性、集成度、成本、设计周期的要求日益提高。
随着时间的推移,科学研究与技术开发行为日益市场化,而远非纯粹的学术行为,这要求设计工作必须在较短的时间内出色完成,技术人员感到工作压力越来越大。
显然,采用传统的电子设计手段完成复杂电子系统设计显得越来越力不从心了,传统的电子设计与现实手段受到极大的挑战。
如果在激烈的技术产品竞争中仍沿用老办法,很可能在激烈的竞争中处于被动落后的境地,例如,当设计比较复杂的电子系统时,要等到做完全部硬件试验才开始设计印制电路板,这样,设计周期必然会相应拉长,即使设计出印制电路板来,也很难保证它的电气连接全部正确、各个元器件参数合理以及完善的电磁兼容性能,如果需要设计实现的数字电路部份规模较大,仍习惯地利用中、小规模数字集成芯片实现,电路的集成度和可靠性在许多应用场合会受到很大限制,甚至根本无法满足需求。
Civil Aviation University of China电子技术应用设计报告基于FPGA的电子时钟设计专业:通信工程学号: xxxxxxx学生姓名: xxx所属学院:电信学院任课教师: xxx摘要本设计采用EDA技术,采用原理图和硬件描述语言VHDL混合编程设计时钟逻辑系统,在QuartusII5.0工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的电子时钟。
本时钟系统主芯片采用EP1C6Q240C8N,具有显示时间、日期、时间及日期校准、整点报时、定时闹钟等功能。
其中时间采用24小时循环计数,日期计数器具有闰年、月大、月小的判断并准确计数功能。
通过按键控制可以实现:日期和时间的切换显示、日期和时间的校准、闹钟的开关控制。
关键词:FPGA;电子时钟;原理图;VHDL语言;AbstractIn my design EDA technology is used, and I designed the clock logic system by means of schematic and VHDL hardware description language. Under QuartusII5.0 Tools software environment, I used the top-down design methodology, where various basic modules work together to build a FPGA-based electronic clock.The main chip of the clock system is EP1C6Q240C8N, which has the function of time display, date display, time and date calibration, the whole point of time, and regular alarm clock. Furthermore, 24-hour cycle, date counter which time has leap-year, month, a small month's judgment and accurate counting function are designed. What we can achieve through the control buttons are as follows: switching the display of date and time, calibration of date and time, and the alarm switch control.Keywords: FPGA; electronic clock; schematic; VHDL language;目录电子技术应用设计报告 0基于FPGA的电子时钟设计 0摘要 (1)Abstract (1)基于FPGA的电子时钟设计 (3)1.FPGA介绍 (3)2.电子时钟的设计方案 (3)2.1时钟系统整体介绍 (3)2.2分频器 (4)2.3时间计数模块 (5)2.4日期计数模块 (6)2.5译码器模块 (7)2.6显示模块 (7)2.7校时模块 (8)2.8闹钟模块 (10)3实习总结 (11)3.1本系统的优点 (11)3.2本系统的不足 (11)3.3想实现却又没实现的功能 (11)附录1:分频器 (12)附录2:时间计数器 (13)附录3:日期计数器 (15)附录4:译码器程序 (19)基于FPGA的电子时钟设计1.FPGA介绍FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。
现场可编程门阵列(FPGA)是可编程器件。
与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构,FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。
FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。
2.电子时钟的设计方案2.1时钟系统整体介绍本时钟系统主要由分频器模块、计数模块、译码模块、显示模块、校时模块以及闹钟模块构成。
由分频器从48MHZ晶振中得到1HZ信号给计数器提供标准时钟,译码器将计数器数据译码数码管能显示的信号,显示模块扫描译码器数据并显示。
由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。
系统框图如下:图2-1时钟系统框图2.2分频器本分频器采用偶数分频,使占空比达到50%很简单,只要使用一个计数器,在计数器的前一半时间里,使输出电平低电平,在计数器的后一半时间里,使输出电平为低电平,这样输出的时钟信号就是占空比为50%的偶数分频时钟信号。
图2-2-1分频器电路设计本分频器有48分频、100分频、10分频三个程序模块构成,输入48MHz,输出1KHz、100Hz、1Hz时钟信号。
由于本分频器的判断条件为if count<(integer(N/2)) then,所以当N为奇数时,得到脉冲占空比不为50%。
(VHDL程序见附录1)图2-2-2分频器电路模块2.3时间计数模块时间计数模块由60进制计数器和24进制计数器构成。
当秒计数器到59后,进位并归零,分计数器得到秒计数器的进位信号后计数加1,时计数器同理。
(VHDL程序见附录2)图2-3-1六十进制计数器图2-3-2二十四进制计数器1khz为蜂鸣器信号输入端;clk为1HZ时钟信号输入端;reset为异步清零信号输入端;sadd、sdec、madd、mdec、hadd、hdec均为同步校时控制信号输入端,其中sadd为秒加,sdec为秒减,madd为分加,mdec为分减,hadd为时加,hdec为时减。
图2-3-3计数器模块2.4日期计数模块本日期计数模块具有闰年、闰月、月大、月小判断并计数功能。
日期控制信号为sel[2..0]输入端,当sel[0]= 0时,表示闰年,当sel[1]=1表示4,6,9,11四个月就,sel[1]=0则表示1、2、3、5、7、8、10、12八个月,当sel[2]=1则表示2月。
(VHDL程序见附录3)图2-4-1年月日计数模块2.5译码器模块本译码器模块采用VHDL语言编写,译码具有灵活性,方便更改译码结果。
输入数据为4位,输出数据为8位。
输入0000到1001译码为0到9,输入1010到1110译码为A、b、C、D、E,输入1111译码为横线。
(VHDL程序见附录4)图2-5译码器模块2.6显示模块本显示模块由一个74161计数器构成8进制计数模块,输入1KHz信号,计数器通过74138使数码管轮流工作,同时通过宏模块选通时间数据在数码管上显示。
由于数码管只有8个,要想在8个数码管上显示时分秒年月日这么多数据,必须要有切换显示模块。
本系统利用按键控制宏模块选通时间和日期两路数据分别在数码管上显示。
图2-6-1显示模块电路图图2-6-2显示模块2.7校时模块校时模块由8个按键组成。
当按键按下输出低电平,未按下时输出高电平。
图2-7-1按键消抖模块按键消抖模块由1KHz时钟信号控制,经过D触发器和与非门处理后,使得按键按下后输出高电平。
未按下时输出低电平。
图2-7-2八路按键模块图2-7-3按键选通模块由于时分秒信息和年月日信息分开显示,所以调整时间时必须分别对时分秒、年月日进行校准。
然而控制信号只有八路,这样就必须使按键信号能分别送进时间计数模块和日期计数模块。
于是编写下面这部分程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY channel ISPORT(s:IN STD_LOGIC;data_in:IN STD_LOGIC_VECTOR(6 DOWNTO 0);cal_out:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);time_out:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY;ARCHITECTURE one OF channel ISBEGINPROCESS(s)BEGINCASE s ISWHEN '0'=> cal_out <=data_in;time_out<="0000000";WHEN OTHERS=> time_out <=data_in;cal_out<="0000000";END CASE;END PROCESS;END ARCHITECTURE;这样就使得当控制按钮按下时,通过显示模块切换显示画面,同时按键分别控制时间计数模块和日期计数模块。
2.8闹钟模块闹钟模块由整点报时和定时闹钟两部分组成。
图2-8-1整点报时模块当时计数器进位时,进位信号被取出送到蜂鸣器控制端,控制端使能输入1KHz信号到蜂鸣器,这样就到达整点报时功能。
图2-8-2定时闹钟模块为了便于演示本闹钟模块定时时间为10秒,具有开启和关闭功能。
当按键按下时T 触发器翻转,使能计数器,当计数器计满10秒时进位使能蜂鸣器实现闹钟效果。
当再次按下按键,T触发器再次翻转,计数器关闭,闹钟关闭。
3实习总结3.1本系统的优点1.分频器实现容易,可以任意分频,连线少。
2.时间计数器和日期计数器具有校准信号输入端,能实现校时和重启功能3.日期计数器能准确的实现闰年、闰月、月大、月小的计数4.译码器具有灵活性,不受器件限制,可以任意译码,实现自己想要的效果。