两位数码管显示电路 - 下载本文

第2章 EDA、Verilog HDL简介

2.1 EDA技术

2.1.1 EDA技术的概念

EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

2.1.2 EDA技术的特点

利用EDA技术进行电子系统的设计,具有以下几个特点:① 用软件的方式设计硬件;② 用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③ 设计过程中可用有关软件进行各种仿真;④ 系统可现场编程,在线升级;⑤ 整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。因此,EDA技术是现代电子设计的发展趋势。

2.1.3 EDA设计流程

1、文本/原理图编辑与修改。首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本或图形方式表达出来。

2、编译。完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。

3、 综合。将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。

4、 行为仿真和功能仿真。利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。

5、适配。利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、布局布线。适配报告指明了芯片内资源的分配与利用、引脚锁定、设计的布尔方程描述情况。

6、 功能仿真和时序仿真。

7、 下载。如果以上的所有过程都没有发现问题,就可以将适配器产生的下载文件

6

通过FPGA/CPLD下载电缆载入目标芯片中。

8、 硬件仿真与测试。

2.2 硬件描述语言

2.2.1 Verilog HDL简介

Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。

Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。

2.2.2 Verilog HDL语言的特点

1.既能用于电路设计的综合,又可以用于模拟仿真。

2.能够在多个层次上对所设计的系统加以描述,从开关级、门级、寄存器传输级到行为级等,语言不对设计的规模施加任何限制。

3.灵活多样的电路描述风格,可进行行为描述,也可进行结构描述或数据流描述;支持混合建模在一个设计中各个模块可以在不同的设计层次上建模和描述。

7

第3章 两位数码管的显示电路

3.1 系统需求分析

1) 计数电路采用十六进制,从00开始到FF后再回到00。 2) 各用2位数码管显示。 3) 具有自动开始和手动暂停功能。

4) 为了保证计数的稳定及准确,须由晶体振荡器提供数字基准信号

3.2 设计原理

如图4.9-1所示,LED数码管由7个发光二极管组成,此外,还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。通过七段发光二极管亮

暗的不同组合,可以显示多种数字、字母以及其它符号。LED数码管中的发光二极管共有两种连接方法:

1) 共阴极接法:把发光二极管的阴极连在一起构成公共阴极。使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。实验中使用的LED显示器为共阴极接法

2) 共阳极接法:把发光二极管的阳极连在一起构成公共阳极。使用时公共阳极接+5V。这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。

为了显示数字或符号,要为LED显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。七段发光二极管,再加上一个小数点位,共计八段。因此提供给LED显示器的字形代码正好一个字节。若a、b、c、d、e、f、g、dp 8个显示段依次对应一个字节的低位到高位,即D0、D1、D2、D3、D4、D5、D6、D7,则用共阴极LED数码管显示十六进制数时所需的字形代码如表3.2-1所示。

8

表3.2-1 共阴极LED数码管字形代码

3.3 MAXII晶体管说明

7 段数码管(不算小数点)的原理也很简单,它无非是由 7 个发光二极管组

成。这 7 个发光二极管有一个公共端,必须接 GND(共阴极数码管)或者接 VCC (共阳极数码管)。对 7 个二极管的另一端进行控制,相应的就能控制他们的亮 暗。不同的亮暗组合就产生了数字 0-9 的显示效果。若希望数码管显示某个数字, 只要给数码管的 7 个段选接口送相应的译码信号即可。

如图3.3-1所示,两个共阴数码管 SM4205 的段选和位选与 CPLD 的 I/O 连接。 带小数点的共阴极数码管对应的段选如图3.3-2所示

图3.3-1

图3.3-2

9

3.4 编写代码

信号名称 clk rst_n sm_cs1_n sm_cs2_n sm_db[6:0] 方向 input input output output output 描述 时钟信号,50MHz 复位信号,低电平有效 数码管1片选信号(即共阴端),低电平有效 数码管2片选信号(即共阴端),低电平有效 数码管段选信号 module led_seg7(clk,rst_n,sm_cs1_n,sm_cs2_n,sm_db); inputclk; // 50MHz

input rst_n; // 复位信号,低有效

output sm_cs1_n,sm_cs2_n; //数码管片选信号,低有效 output[6:0] sm_db; //7 段数码管(不包括小数点)

reg[24:0] cnt; //计数器,最大可以计数到 2 的 25 次方*20ns=640ms always @ (posedgeclk or negedgerst_n) if(!rst_n) cnt<= 25'd0;

else cnt<= cnt+1'b1; //循环计数 reg[3:0] num; //显示数值 always @ (posedgeclk or negedgerst_n) if(!rst_n) num<= 4'd0;

else if(cnt == 24'hffffff) num<= num+1'b1; //每(大约)640ms 增一 //----------------------------------------------------------------------------- --

/* 共阴极 :不带小数点 ;0, 1, 2, 3, 4, 5, 6, 7,

db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h ;8, 9, a, b, c, d, e, f , 灭

db 7fh,6fh,77h,7ch,39h,5eh,79h,71h,00h*/ parameter seg0 = 7'h3f, seg1 = 7'h06, seg2 = 7'h5b, seg3 = 7'h4f, seg4 = 7'h66, seg5 = 7'h6d, seg6 = 7'h7d, seg7 = 7'h07, seg8 = 7'h7f, seg9 = 7'h6f, sega = 7'h77, segb = 7'h7c, segc = 7'h39, segd = 7'h5e, sege = 7'h79, segf = 7'h71;

10