EDA设计(二)
课程设计报告
姓名学号
学院(系) 自动化学院
专业自动化
标题数字秒表的设计
南京理工大学
2015 年 10 月
目次
1 引言 (1)
2 系统总体设计 (1)
2.1 系统功能概述 (1)
3 系统各组成模块详细设计 (2)
3.1 分频模块设计 (2)
3.2 计时模块设计 (3)
3.3 七段译码显示模块设计 (4)
3.4 动态刷新模块设计 (5)
4 系统调试 (6)
4.1 分频模块 (6)
4.2 计时模块 (7)
4.3 七段译码显示模块 (7)
4.4动态刷新模块 (8)
4.5 系统实际验证 (8)
5 实验中遇到的问题与解决方法 (9)
6 总结与心得体会 (10)
参考文献 (11)
1 引言
随着科技的发展,集成电路和计算机得到了高速发展。而EDA技术就是以计算机为工具,我们在EDA的设计平台上,用硬件描述语言VHDL完成设计文件,本次设计我们采用VHDL语言进行数字系统的结构、行为、功能和接口。VHDL具有较强的行为描述能力,可避开具体的器件结构,从逻辑功能和行为上进行描述和设计。
本文是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表。设计中采用东南大学的SE-5M型EDA实验开发平台系统,以Altera公司的MAX+plus II 10.0为开发软件,使用层次化设计方法,实现秒表的功能。
2 系统总体设计
2.1 系统功能概述
数字秒表用于体育比赛,设计中我们采用层次化方法,所要实现的主要功能和要求如下:
1、提供给计时器内部定时的时钟脉冲频率为1khz,能够进行一小时以内(即计时的最长时间为59分59秒99)的计时功能。
2、设置有复位和启/停开关
(1)复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时进程立刻终止,并对计时器清零。
(2)起/停开关的使用方法与传统的机械式计时器相同,即按一下起/停开关,启动计时器开始计时,再按一下起/停开关计时终止。
2.2 系统总体组成结构
系统采用层次化的设计方法,由分频模块、计时模块、动态扫描模块和七段译码显示组成。分频模块用于提供给计时器内部定时的时钟脉冲频率为100hz;计时模块用于秒表内部的计数,从秒的进到分;动态扫描用于实现了六个LED
数码管的刷新显示;七段显示用于显示分和秒的数字。
数字秒表总体框图:
计时控制器
计数电路
扫描显示电路
时基分频器
启动/暂停
1m 时钟清零
显示位输出
显示段输出
图1
3 系统各组成模块详细设计
3.1 分频模块设计
分频模块就是将一个时钟信号通过一定的电路结构转变成不同频率的时钟信号,本设计中要求及时精度大于1/100s ,计时器能显示1/100s 的时间,提供给计时器内部定时的时间脉冲频率为1/100hz ,设计中输入信号为1KHz ,需要得到100Hz 的输出信号作为秒百分位的计数脉冲,因此需要设计一个十分频电路即计数以10为周期即可。即时钟每触发10个周期,电路输出一个周期信号。分频模块的分装如下图所示:
图2
3.2 计时模块设计
由于秒表显示的最长时间为59分59.99秒,因此我们需要两个模60和一个模100的计数器,最后再用VHDL语言实现计数器的封装。
模60和模100的分装如下:
图3
计时模块中需要六个输出,当秒的十分和百分位为100时,就向秒的个位进位,以此类推,当秒达到60,就向分进一位,模100的输入信号时经过分频后的100hz,复位信号reset和使能信号en。
当两个模60和模100分装好后,我们要进行计时模块的连接,代码中需要调用这两个模块以实现计时功能。其顶层电路的核心代码如下:ARCHITECTURE rtl OF time IS
COMPONENT count60
port(EN,Clk,RST : in std_logic;
GE,SHI: out std_logic_vector(3 downto 0);
CO : out std_logic );
END COMPONENT;
COMPONENT count100
port(EN,Clk,RST : in std_logic;
GE,SHI: out std_logic_vector(3 downto 0);
CO : out std_logic );
END COMPONENT;
SIGNAL co1,co2,co3 :std_logic;
BEGIN
U0:count100
PORT MAP(EN,CLK,reset,sec001,sec01,co1);
U1:count60
PORT MAP(co1,CLK,reset,sec,sec10,co2);
U2:count60
PORT MAP(co2,CLK,reset,min,min10,co3);
END rtl;
计时模块分装图:
图 1
3.3 七段译码显示模块设计
七段译码显示模块将数字系统中BCD码转换成数码管所需要的驱动信号,共阴极数码管输出高电平有效。
七段译码显示电路的段码表如下表所示:
显示字符输入输出显示字符输入输出
0 0000 011 1111 5 0101 110 1101
1 0001 000 0110 6 0110 111 1101
2 0010 101 1011 7 0111 000 0111
3 0011 100 1111 8 1000 111 1111
4 0100 110 0110 9 1001 110 1111
图 2
核心代码为:
封装图示如下图所示:
图 3
3.4 动态刷新模块设计
本次设计中,我主要是负责动态刷新模块,模块中需要用到6个LED灯,由于系统最多支持4个LED的静态显示,所以我们采用动态扫描法。在动态刷新需要用到一个模六计数器、一个位选择器和一个段选择器。模六的计数器一直在不停的循环中,当计数值为0时,位码选择器输出使能显示秒百分位的LED,而段码选择器则输出秒表分位的BCD码,再经过七段译码显示电路输出给LED 的abcdefg接口,显示相应计数值。以此类推1、2、3、4、5,分别显示相应的LED和数值。
顶层分装的核心代码分别调用了count6、decoder_choose、time_choose和seg7显示模块。
动态刷新模块的封装图如下图所示:
图 4
最后顶层设计的图形:
图 8
4 系统调试
4.1 分频模块
模块编译完成后,及可进行波形仿真,十分频电路仿真波形图:
图 5
4.2 计时模块
模60计数器仿真波形图:
图 6
由图我们可知,当RST的信号为1时,计数会立即复位,当EN信号为0时,会停止计数,直到使能信号有效。
模100计数器仿真波形图:
图 7
整个计时模块仿真波形图:
图 8
4.3 七段译码显示模块
七段译码器仿真波形图:
图 9
4.4动态刷新模块
位选择仿真波形图:
图 13
当计数器在不断地从0-5循环计数时,选择不同的位,决定显示秒表的分、秒的各个位。
段选择仿真波形图:
图 14
这是个数据选择器,负责将秒表各个位上的BCD码送到七段译码显示的输入端,从而可以显示相应的十进制数。
4.5 系统实际验证
在编译完成后,我们就可以进行管脚的分配。管脚分配的方法有两种,一
种是在“Assign”下的“Pin/Location/Chip”中锁定引脚,第二种是在“MAX+plusII”下的“Floorplan Editor”中配置,注意管脚锁定之后要进行全程编译,以便将引脚信息编入到下载文件中。
分配完后,我们就可以下载到实验板上,进行编程下载,点击“MAX+plus II”下的“Programmer”,第一次下载需要进行“Hardware Setup”,选择“ByteBlaster(MV)”即可,然后单击“Configure”即可进行编程下载。
通过验证,秒表的正常功能均可以实现,复位,暂停,计数。
5 实验中遇到的问题与解决方法
(1)命名问题
在我们编完代码后,将文件设置为当前文件后开始编译,发现怎么编译都是有错误的。后来,我们发现是因为文件的实体名和文件的命名不一致,导致编译错误,这是初学者最容易犯的错误。代码分为实体和结构体两部分,实体主要是进行变量的定义,结构体就主要负责它要实现的功能。
(2) VHDL语言编译问题
平常使用C编程时,不怎么关注语句的顺序,而VHDL语言区别于其他语言最大的特点就是它的并发语句。开始时,我们对并发语句不怎么了解,因此仿真的结果和我们预期的不一样。后来我们通过改变相关语句的位置来观察相对应的仿真结果,发现并发的内容与前后顺序无关,是同时发生的,对并发语句的理解也更加深刻了。
(3)动态扫描问题
在进行完管脚分配后,我们就需要下载在实验台上,在动态扫描中M3、M4对应的8个I/O口用于动态显示数码管的8个段,M1、M2对应的8个I/O口用于连接动态显示数码管的共阴极端进行位扫描。可是,我们下载完后,发现只有四个灯亮了,而且不在正常计数。后来我们仔细检查发现,我们没有将拨码开关CZ1中ST处拨到SW上,导致一直是静态显示。
6 总结与心得体会
本次EDA设计,收获了很多,让我们进一步巩固了数电上的计数器、选择器、译码器等知识点。这次EDA设计和上次有许多相同的地方,都是要我们学会用一个软件工具设计出我们的硬件图。这次我们要学会使用VHDL语言来编辑图形,使用MAX+plus这个软件,和我们之前学过的quartus软件差不多,只不过用VHDL 语言取代了图形编辑。首先,我们需要基本掌握VHDL语言,掌握它有哪些组成,命名的原则,变量是怎么定义的等,只有准备工作做好了,我们才能进行编程。在编译的过程中,我们也遇到了很多问题,比如没有将文件的命名和实体名一样,导致了编译的时候出现了问题,对VHDL的使用不是很了解,不知道怎么进行顶层的分装。我们通过查找资料,请教同学,将问题一一解决。
使用VHDL编写来实现硬件电路的功能,我充分体会到VHDL作为电路设计语言的方便性,具有很强的硬件描述能力,很强的移植能力,减少硬件电路设计的工作量,缩短了开发周期,同时也省去了电路连线的工作,方便我们更快的查找错误。它既支持自顶向下的设计方法,也支持自底向上的设计,既支持模块化设计,也支持层次化。而本次我们采用的是自顶向下的设计方法,分别模块化处理,各个模块相互是独立的,最后进行整合即可。
这次设计提高了我们的动手实践能力,利用我们学过的知识进行动手设计,巩固了我们的知识,增强了自身的能力。我们也体验到了团队合作的重要性。最后,感谢吴老师在本次实验中对我们的指导。
参考文献
[1] 南京理工大学. EDA设计实验指导书[M]. 南京: 南京理工大学电子技术中心, 2008
[2] 姜雪松. VHDL设计实例与仿真. 北京:机械工业出版社,2007.1
[3] 蒋立平. 数字逻辑电路与系统设计.北京:电子工业出版社,2009.1