1、 简易电子钟设计 摘 要:Verilog是广泛应用的硬件描述语言,可以用在硬件设计流程的建模、综合和模拟等多个阶段。随着硬件设计规模的不断扩大,应用硬件描述语言进行描述的CPLD结构,成为设计专用集成电路和其他集成电路的主流。通过应用Verilog HDL对多功能电子钟的设计,达到对Verilog HDL的理解,同时对CPLD器件进行简要了解。 本文的研究内容包括: 对Altera公司Flex 10K系列的EPF10K 10简要介绍,Altera公司软件Max+plusⅡ简要介绍和应用Verilog HDL对多功能电子钟进行设计。 关键词:多功能电子钟;硬件描述语言 Ab
2、stract:Verilog is the most widely used hardware description language.It can be used to the modeling, synthesis, and simulation stages of the hardware system design flow. With the scale of hardware design continually enlarging, describing the CPLD with HDL become the mainstream of designing ASIC and
3、other IC.To comprehend Verilog HDL and get some knowledge of CPLD device, we design a block with several functions with Verilog HDL. This thesis is about to discuss the above there aspects: Introduce the EPF10K 10 of Flex 10K series producted by Altera Corporation simply. the software Max+plusⅡ,Des
4、ign the block with several functions with Verilog HDL. Keywords: block with several functions; hardware description language 目 录 第11页 多功能电子钟的Verilog设计 第11页 共32页 1 引 言 2 1.1 课题的背景、目的 2 1.2 课题设计环境 2 2 EPF10K 10相关说明及VERILOG HDL简介 3 2.1 EPF10K 10相关说明 3 2.2 Verilog Hdl硬件描述语
5、言简介 4 3 应用VERILOG HDL描述的简易电子钟 5 3.1 功能描述 5 3.2 简易电子钟变成流程图 6 3.3 源程序 7 4 应用VERILOG HDL描述的简易电子钟功能模块及仿真 8 4.1 计时模块 8 4.2 译码显示模块 9 4.3 仿真分析及结论 11 5 结束语 11 6 致谢 12 1 引 言 随着电子技术的发展,现场可编程门阵列FPGA和复杂可编程逻辑器件CPLD的出现,使得电子系统的设计者利用与器件相应的电子CAD软件,在实验室里就可以设计自己的专用集成电路ASIC器件。这种可编程ASIC不仅使设计的产品达到小型化、集成化和高可
6、靠性,而且器件具有用户可编程特性,大大缩短了设计周期,减少了设计费用,降低了设计风险。目前数字系统的设计可以直接面向用户需求,根据系统的行为和功能要求,自上至下地逐层完成相应的描述﹑综合﹑优化﹑仿真与验证,直到生成器件,实现电子设计自动化。其中电子设计自动化(EDA)的关键技术之一就是可以用硬件描述语言(HDL)来描述硬件电路。VHDL是用来描述从抽象到具体级别硬件的工业标准语言,它是由美国国防部在80年代开发的HDL,现在已成为IEEE承认的标准硬件描述语言。VHDL支持硬件的设计、验证、综合和测试,以及硬件设计数据的交换、维护、修改和硬件的实现,具有描述能力强、生命周期长、支持大规模设计的
7、分解和已有设计的再利用等优点。利用VHDL这些优点和先进的EDA工具,根据具体的实际要求,我们可以自己来设计串口异步通信电路。 1.1 课题的背景、目的 二十一世纪是信息化高速发展的世纪,产业的信息化离不开硬件芯片的支持。芯片技术的进步是推动全球信息化的动力。因此在二十一世纪掌握芯片技术是十分有必要的。本次课题是计算机组成原理的课程设计,这次课题旨在通过自己对所需功能芯片的设计与实现来巩固以前所学的计算机硬件基础知识,同时也提高动手实践的能力,还有为将来进行更大规模更复杂的开发积累经验。 1.2 课题设计环境 本次课题设计方要用到的开发环境是Altera公司的EDA设计工具软件
8、MAX+plusII。 Altera公司的工作与EDA厂家紧密结合,使MAX+plusII软件可以与其它工业标准的设计输入、综合和校验工具相连接。设计者可以使用Altera或标准EDA输入工具进行设计,使用MAX+plus II编译器对Altera器件的设计进行编译,并使用Altera或其它EDA校验工具进行仿真。目前,MAX+plusII支持与Cadence,Mentor Graphics, Synopsys, Viewlogic等EDA工具接口。 MAX+plusII的编译器支持Altera公司的FLEX系列、MAX系列和Classic可 编程逻辑器件,提供了一种真正与结构无关的设计
9、环境。编译器还具有强大的逻辑综合与优化功能,使用户不必十分关心设计的细节,可以把精力放在逻辑的实现上。 MAX+plusII的设计输入、处理和校验功能都集中在统一的开发环境下,这样可以加快动态调试,缩短开发周期。 MAX+plusII软件支持多种硬件描述语言设计输入,包括VHDL,Verilog HDL和Altera自己的硬件描述语言AHDL。 MAX+plusII软件提供丰富的库单元供设计调用,其中包括74系列的全部器件和一些基本的逻辑门,多种特殊的逻辑宏功能(Macro-Function)以及新型的参数化的兆功能(Mage-Function).调用库单元进行设计,可以大大减轻工作量。
10、 2 EPF10K 10相关说明及Verilog Hdl简介 2.1 EPF10K 10相关说明 EPF10K 10隶属于Altera公司生产的FLEX 10K系列产品,此系列集成度从几万门到几十万门,是业界第一个在PLD中嵌入存储器块的器件。具有许多特点:高密度。10000到250000典型门;功能强大的I/O引脚。每一个引脚都是独立的三态门结构,具有可编程的速率控制;嵌入式阵列块(EAB)。每个EAB提供2K比特位,可用来作存储器使用或者用来实现一般的逻辑功能;逻辑单元采用查找表(LUT)结构;采用快速通道(Fast Track)互连,速度快并可预测延时;具有实现快速
11、加法器和计数器的专用进位链和实现高速、多输入逻辑函数的专用级连链;其中EPF10K 10相关电路说明如下:EPF10K10板,内含预定型10K10主体电路和自定义实验区二个部分;预定型10K10主体电路特点如下:采用ALTERA公司10K10 PLCC84 脚器件;使用有源晶振4MHZ增强线路板抗干扰性能;采用三种不同的配置方式,对ALTERA公司的10K10芯片进行配置:通过EDA软件使用本板提供的JTAG接口下载到10K10器件中对其进行加载配置;通过EDA软件使用本板提供的PS MODE接口下载到10K10器件中对其进行加载配置;为了确保系统板掉电又重新上电后能使10K10正常运行,本系
12、统板提供ALTERA公司EPC1441或EPC1P8二种器件对10K10作上电后自动加载配置。 本EDA板提供电源接线端子+5V,GND数字地,+12V或自定义,-12V或自定义,SGND模拟地及电源测试引线口+5V、+12V、-12V,均给出信号信息LED指示灯,本EDA板提供JTAG PS MODE代码下载信号信息LED指示灯。 自定义实验区特点如下:本EDA板提供三个试验区,其中数字电路实验区A、B二个,模拟电路实验区C一个;为了提高EDA系统板抗干扰性能,模拟地和数字地采用分开设计,而且增加了实验区电路的可塑性,数字电路实验区配有+5V GND数字地,用户电路实验自由连接点,模拟电
13、路实验区配有+5V SGND模拟地,+12V、-12V用户电路实验,自由连接点,用户实验区电路自由连接点共为1908个点,其中数字电路实验区用户自由连接点为2x49行x12列+6行x8列=1272个点,模拟电路实验区用户自由连接点为49行x12列+6行x8列=636个点,提供10K10可用的全部I/O脚引线插座,方便与用户实验区任意连接。 实验区连线方式通常使用三种方式:元器件直接焊接方式,一次性使用;实验区可焊接可插接排针孔,以便实验电路任意搭接,增强使用的灵活性,多次性;实验区可选配安装通用实验面包板, 无须做b项操作,面包板可安装三块。 EDA 板上跳线连接说明:JP8:控制EPC1
14、441/EPC1P8 +5V电压的提供,JTAG MODE JP,JTAG下载方式支持由本跳线组确定4个全 短接,则允许JTAG方式下载;断开则屏蔽JTAG方式下载;PS MODE:JP PS下载方式支持由本跳线组确定5个全 短接,则允许PS方式下载;断开,则屏蔽PS方式下载;JP10:MSEL0信号受控脚跳左,则MSEL0为0;跳右则MSEL0为1;JP11:MSEL1信号受控脚跳左,则MSEL1为0;跳右则MSEL1为1;PWR5V:+5V跳线开关跳左,+5V为ON接通;跳右+5V为OFF关闭;PIN1_OSC:ALTERA10K10 PIN1脚的时钟信号输入端,跳左CLOCK信号频率,由
15、U5晶振确定;跳右,CLOCK信号频率由上层独立型适配器的时钟晶振确定;PIN43_OSC:ALTERA10K10 PIN43 脚的时钟信号输入端跳左,CLOCK信号频率由U5晶振确定;跳右,CLOCK信号频率由上层独立型适配器的时钟晶振确定;J1A:控制数字实验A区的+5V;DC:电源电压;J2A:控制数字实验A区的电源电压数字信号地GND;J1B:控制数字实验B区的电源电压数字信号地GND;J1C:控制模拟实验C区的+12V;J2C:控制模拟实验C区的-12V;J3C:控制模拟实验C区的电源电压模拟信号地SGND 5;EDA板上电源端子接口LED 指示灯说明;JPWR:电源电压接线端子,从
16、上往下顺序定义为+5V GND、+12V -12V SGND;PWRT:电源电压测试接线端子,从上往下顺序定义,同JPWR +5V GND、+12V -12V SGND;JTAG_MODE:ALTERA10K10 JTAG方式下载接口;PS_MODE: ALTERA10K10 PS方式下载接口;10K10(IN1): ALTERA10K10 外扩展,I/O引线接口 1;10K10(IN2): ALTERA10K10 外扩展,I/O引线接口 2;JP2、JP3、JP4、JP5、JP6向上可选配;GEXIN:各种独立型适配器;LED指示灯:D2、D3、D4、TCK、LED、PS LED分别为+5V
17、12V、-12V、JTAG;PS:信号指示灯。 2.2 Verilog Hdl硬件描述语言简介 模块是Verilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述; 设计的数据流行为使用连续赋值语句进行描述; 时序行为使用过程结构描述。一个模块可以在另一个模块中使用。 说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义设计的功能和结构。说明部分和语句可以散布在模块中的任何地方;但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性
18、 最好将所有的说明部分放在语句前。本书中的所有实例都遵守这一规范。 在模块中,可用下述方式描述一个设计: (1) 数据流方式; (2) 行为方式; (3) 结构方式; (4) 上述描述方式的混合。 Verilog HDL模型中的所有时延都根据时间单位定义。 使用编译指令将时间单位与物理时间相关联。这样的编译器指令需在模块描述前定义。如果没有编译器指令, Verilog HDL 模拟器会指定一个缺省时间单位。IEEE Verilog HDL 标准中没有规定缺省时间单位。 用数据流描述方式对一个设计建模的最基本的机制就是使用连续赋值语句。在连续赋值语句中,某个值被指派给线网
19、变量。 请注意连续赋值语句是如何对电路的数据流行为建模的;这种建模方式是隐式而非显式的建模方式。此外,连续赋值语句是并发执行的,也就是说各语句的执行顺序与其在描述中出现的顺序无关。 设计的行为功能使用下述过程语句结构描述: (1) initial语句:此语句只执行一次。 (2) always语句:此语句总是循环执行, 或者说此语句重复执行。 只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。所有的初始化语句和always语句在0时刻并发执行。 在顺序过程中出现的语句是过程赋值模块化的实例。模块化过程赋值在下一条语句执行前完成执行。过程赋值
20、可以有一个可选的时延。 时延可以细分为两种类型: (1) 语句间时延: 这是时延语句执行的时延。 (2) 语句内时延: 这是右边表达式数值计算与左边表达式赋值间的时延。 在Verilog HDL中可使用如下方式描述结构: (1) 内置门原语(在门级); (2) 开关级原语(在晶体管级); (3) 用户定义的原语(在门级); (4) 模块实例 (创建层次结构)。 通过使用线网来相互连接。 3 应用Verilog HDL描述的简易电子钟 3.1 功能描述 计时功能 包括时、分、秒的计时,分别类似于模12、模60、模60计数器。 输入变量:时钟clk,直接清零res
21、et。输出变量:小时计时变量为q[15:8],其中q[15:12]为小时的十位,q[11:8]为小时的个位;q[7:0]为分计时变量,其中q[7:4]为分的十位,q[3:0]为分的个位,上述计时变量均采用8421BCD码。 3.2 简易电子钟变成流程图 开 始 q[15:12]==1&& q[11:8]==2&& q[7:4]==5&& q[3:0]==9 q[3:0]!==9 Reset!=0 q[3:0]==0 q[3:0]==0 q[7:4]!==5 q[7:4]==0 q[11:8]!==9 q[11:8]==0
22、 q[15:12]= q[15:12]+1 q[3:0]= q[3:0]+1 q[7:4]= q[7:4]+1 q[11:8]= q[11:8]+1 q[15:12]=0; q[11:8]=1; q[7:0]=0; False False False False False Ture Ture Ture Ture Ture 3.3 源程序 module clock(reset,clk,q); output [15:0]q; //输出变量 input reset,clk; //输入变量 reg [15:0]q; //类型 al
23、ways @(posedge clk or negedge reset) if(!reset) //复位 (低电平有效) q<=0; //清零电子钟 else begin //如果当前状态为12:59时,计时器变为01:00。 if((q[15:12]==1)&(q[11:8]==2)&(q[7:4]==5)&(q[3:0]==9)) begin q[15:12]<=0; q[11:8]<=1; q[7:0]<=0; end //如果当前分钟状态为59时,计分器变为00。 else
24、if(q[3:0]==9) begin q[3:0]<=0; if(q[7:4]==5) begin q[7:4]<=0; //若当前小时个位态为9时,小时个位变为0,且十位加一。 if(q[11:8]==9) begin q[11:8]<=0; q[15:12]<=q[15:12]+1; end else q[11:8]<=q[11:8]+1; end else //分十位和
25、个位按计时规律分别加一计时。 q[7:4]<=q[7:4]+1; end else q[3:0]<=q[3:0]+1; end endmodule 4 应用Verilog HDL描述的简易电子钟功能模块及仿真 4.1 计时模块 模块功能为正常计时,即每秒钟读一次数,秒表加1,秒计时满60进1给分计时,分计时满60进1给小时计时,小时计时满12清零。从功能上讲分别为模60计数器,模60计数器和模12计数器。 模块程序代码: module clock(reset,clk,q); output [15:0]q; input r
26、eset,clk; reg [15:0]q; always @(posedge clk or negedge reset) if(!reset)//reset the digital clock begin q<=0; end else begin if((q[15:12]==1)&(q[11:8]==2)&(q[7:4]==5)&(q[3:0]==9)) begin q[15:12]<=0; q[11:8]<=1; q[7:0]<=0; end else if(q[3:0]==9
27、) begin q[3:0]<=0; if(q[7:4]==5) begin q[7:4]<=0; if(q[11:8]==9) begin q[11:8]<=0; q[15:12]<=q[15:12]+1; end else q[11:8]<=q[11:8]+1; end else q[7:4]<=q[7:4]+1; end else q
28、[7:4]<=q[3:0]+1; end endmodule 模块仿真: 模块符号如下图: 电子钟 HH:MM Q[15:0] CLK REST 图 计时模块符号生成 模块仿真波形如图4.2: 图 仿真波形 4.2 译码显示模块 3-8译码器的原理框图及真值表如图及表所示,3个输入a[2:0]可能出现8种组合情况:000,001,010,011,100,101,110,111,这样就可控制8个输出y[7:0]相应的某1位输出为“0”。 a[0] 3-8 译码器 a[1] a[2] y[7:0] 输 入 输 出 a[2
29、0] y[7:0] 000 11111110 001 11111101 010 11111011 011 11110111 输 入 输 出 a[2:0] y[7:0] 100 11101111 101 11011111 110 10111111 111 01111111 表 3-8译码器真值表 图 3-8译码器的原理框图 七段显示译码器的原理框图及真值表如图及表所示,4个输入d[3:0]可能出现16种组合情况;它的7个输出y[6:0]分别控制共阴LED数码管的a、b、c、d、e、f、g七段的亮
30、/灭,从而显出对应的16个字符。 a b g c d e f d[3:0] y[6:0] 七段显示译码器 图 七段显示译码器的原理框图 表 8421BCD七段显示译码器真值表 输 入 输 出 d[3:0] y[6:0] a,b,c,d,e,f,g H"0" 1,1,1,1,1,1,0 H"1" 0,1,1,0,0,0,0 H"2" 1,1,0,1,1,0,1 H"3" 1,1,1,1,0,0,1 输 入 输 出 d[3:0] y[6:0] a,b,c,d,e,f,g H"4" 0,1,1,0,0,1,1 H"
31、5" 1,0,1,1,0,1,1 H"6" 1,0,1,1,1,1,1 H"7" 1,1,1,0,0,0,0 输 入 输 出 d[3:0] y[6:0] a,b,c,d,e,f,g H"8" 1,1,1,1,1,1,1 H"9" 1,1,1,1,0,1,1 H"A" 1,1,1,0,1,1,1 H"B" 0,0,1,1,1,1,1 输 入 输 出 d[3:0] y[6:0] a,b,c,d,e,f,g H"C" 1,0,0,1,1,1,0 H"D" 0,1,1,1,1,0,1 H"E" 1,0,0,1,1,1,1 H"F"
32、1,0,0,0,1,1,1 模块程序代码 module de_7(d, y); input [3:0]d; output [6:0]y; reg [6:0]y; always @( d ) case( d ) 4’b0000: y=7’b1111110; 4’b0001: y=7’b0110000; 4’b0010: y=7’b1101101; 4’b0011: y=7’b1111001; 4’b0100: y=7’b0110011; 4’b0101:
33、 y=7’b1011011; 4’b0110: y=7’b1011111; 4’b0111: y=7’b1110000; 4’b1000: y=7’b1111111; 4’b1001: y=7’b1111011; 4’b1010: y=7’b1110111; 4’b1011: y=7’b0011111; 4’b1100: y=7’b1001110; 4’b1101: y=7’b0111101; 4’b1110: y=7’b1001111; 4’b1111: y=7’b1000111; endcase endmodule 4
34、3 仿真分析及结论 由仿真波形图可以看出,当Q15…Q12为小时的十位,Q11…Q8为小时的个位,分别计数0001、0010(即12),而Q7…Q4为分的十位,Q3…Q0为分的个位,分别计数为0101、1001(即59)时,在下一个时钟CLK作用下计时器翻转到01时00分,然后计数器继续自然递增累加计数,完成小时计数器“12翻1”,分计数器为8421BCD码60进制的计时功能。设计及仿真结果符合设计要求,达到预期效果。 5 结束语 Verilog Hdl语言设计的出现从根本上改变了以往数字电路的设计模式,使电路设计由硬件设计转变为软件设计,这样提高了设计的灵活性,降低了电路的复杂程度,
35、修改起来也很方便。 利用Verilog Hdl设计的灵活性,根据串行通信协议的要求,可以在实验室利用先进的EDA工具,设计出符合自己实际需求的多功能电子钟电路。 经过两周的设计制作,该设计终于如期开发完毕,其功能基本上可以满足处理的需要。 由于时间有限,本系统还有许多不尽人意的地方,需要将来做进一步的改善。 这次课程设计,以方便实际操作为基础,以理论联系实际为准则,不断完善,不断创新。 6 致谢 通过为期两周的课程设计,我顺利完成了计算机组成原理课中多功能电子钟的Verilog设计的课程设计。在这次课程设计中,非常感谢课程设计阳小明老师的指导,在老师的身上学到的不仅仅是知识的层面,更
36、重要的是老师追求知识的热情,还重要的是老师对学生的尊重和关爱,却又不失老师本身工作的严谨的态度,他的工作作风以及对生活的态度让我受益匪浅。 我在课程设计中碰到的很多个人困难,老师都能给予很大的体谅与帮助。在设计中遇到的试验的客观条件方面,老师都能给予最大力度的协助,让我有更好的设计学习环境,在这里,同时感谢在西华大学电气信息专业综合实验中心所提供的实验条件,由于他们对工作的热情度以及对我们的关心,谢谢同学的相互帮助,感谢有了这些,我才能很好的顺利的完成我的这次课程设计。 参考文献 [1] 张振荣,晋明武等.MCS-51单片机原理及实用技术[M].北京:人民邮电出版社,2000. [2] 周兴华.手把手教你学单片机[M].北京:北京航空航天大学出版社,2005. [3]褚振勇,翁木云.FPGA设计及应用[M].西安:西安电子科技大学出版社,2002. [4] 王新梅,肖国镇.纠错码——原理与方法(修订版) [M].西安电子科技大学出版社,2001.






