电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

vhdl体会范文

来源:开心麻花作者:开心麻花2025-09-191

vhdl体会范文(精选6篇)

vhdl体会 第1篇

VHDL 编程的一些心得体会(转)http://www.dzjs.net/html/EDAjishu/2007/0131/1504.html

VHDL 是由美国国防部为描述电子电路所开发的一种语言,其全称为(Very High Speed Integrated Circuit)Hardware Description Language。与另外一门硬件描述语言 Verilog HDL 相比,VHDL 更善于描述高层的一些设计,包括系统级(算法、数据通路、控制)和行为级(寄存器传输级),而且 VHDL 具有设计重用、大型设计能力、可读性强、易于编译等优点逐渐受到硬件设计者的青睐。但是,VHDL 是一门语法相当严格的语言,易学性差,特别是对于刚开始接触 VHDL 的设计者而言,经常会因某些小细节处理不当导致综合无法通过。为此本文就其中一些比较典型的问题展开探讨,希望对初学者有所帮助,提高学习进度。

一. 关于端口

VHDL 共定义了 5 种类型的端口,分别是 In, Out,Inout, Buffer及 Linkage,实际设计时只会用到前四种。In 和 Out 端口的使用相对简单。这里,我们主要讲述关于 buffer和inout 使用时的注意事项。

与 Out 端口比,Buffer 端口具有回读功能,也即内部反馈,但在设计时最好不要使用 buffer,因为 buffer类型的端口不能连接到其他类型的端口上,无法把包含该类型端口的设计作为子模块元件例化,不利于大型设计和程序的可读性。若设计时需要实现某个输出的回读功能,可以通过增加中间信号作为缓冲,由该信号完成回读功能。

双向端口 Inout 是四种端口类型中最为特殊的一种,最难以学习和掌握,为此专门提供一个简单程序进行阐述,部分程序如下:...„

① DataB<=Din when CE=’1’ and Rd=’0’ else ②(others=>’Z’);

③ Dout<=DataB when CE=’1’ and Rd=’1’ else ④(others=>’1’);„ „

程序中 DataB 为双向端口,编程时应注意的是,当 DataB 作为输出且空闲时,必须将其设为高阻态挂起,即有类似第②行的语句,否则实现后会造成端口死锁。而当 DataB 作为有效输入时,DataB 输出必须处于高阻态,对于该例子中即,当 CE=’1’ and Rd=’1’时,二.信号和变量

常数、信号和变量是 VHDL 中最主要的对象,分别代表一定的物理意义。常数对应于数字电路中的电源或地;信号对应某条硬件连线;变量通常指临时数据的局部存储。信号和变量功能相近,用法上却有很大不同。

表 1 信号与变量主要区别

信号 变量

赋值延迟 至少有△延时 无,立即变化

相关信息 有,可以形成波形 无,只有当前值 进程敏感 是 否 全局性 具有全局性,可存在于多个进程中 只能在某个进程或子程序中有效 相互赋值关系 信号不能给变量赋值 变量可以给信号赋值

对于变量赋值操作无延迟,初学者认为这个特性对 VHDL 设计非常有利,但这只是理论上的。基于以下几点原因,我们建议,编程时还是应以信号为主,尽量减少变量的使用。

(1)变量赋值无延时是针对进程运行而言的,只是一个理想值,对于变量的操作往往被综合成为组合逻辑的形式,而硬件上的组合逻辑必然存在输入到输出延时。当进程内关于变量的操作越多,其组合逻辑就会变得越大越复杂。假设在一个进程内,有关于变量的 3 个 级连操作,其输出延时 分别为 5ns,6ns,7ns,则其最快的时钟只能达到 18ns。相反,采用信号编程,在时钟控制下,往往综合成触发器的形式,特别是对于 FPGA 芯片而言,具有丰富的触发器结构,易形成流水作业,其时钟频率只受控于延时最大的那一级,而不会与变量一样层层累积。假设某个设计为 3 级流水作业,其每一级延时分别为 10ns,11ns,12ns,则其最快时钟可达 12ns。因此,采用信号反而更能提高设计的速度。

(2)由于变量不具备信息的相关性,只有当前值,因此也无法在仿真时观察其波形和状态改变情况,无法对设计的运行情况有效验证,而测试验证工作量往往会占到整个设计 70%~80%的工作量,采用信号则不会存在这类问题。

(3)变量有效范围只能局限在单个进程或子程序中,要想将其值带出与其余进程、子模块之间相互作用,必须借助信号,这在一定程度上会造成代码不够简洁,可读性下降等缺点。

当然,变量也具有其特殊的优点,特别是用来描述一些复杂的算法,如图像处理,多维数组变换等。

三.位(矢量)与逻辑(矢量)

bit 或其矢量形式 bit_vector只有’0’和’1’两种状态,数字电路中也只有’0’和’1’两种逻辑,因此会给初学者一个误区,认为采用位(矢量)则足够设计之用,而不必像std_logic那样出现’X’,’U’,’W’各种状态,增加编程难度。但实际情况却并非如此,以一个最简单 D型触发器设计为例 „ „

① process(clk)② begin

③ if clk’event and clk=’1’ then ④ Q<=D;⑤ end if;

⑥ end process;„ „

实际中 clk 对数据端 D的输入有一定的时间限制,即在 clk 上升沿附近(建立时间和保持时间之内),D必须保持稳定,否则 Q输出会出现亚稳态,如下图所示。

当 clk 和 D时序关系不满足时,由于 bit 只有’0’或’1’,系统只能随机的从’0’和’1’中给 Q 输出,这样的结果显然是不可信的;而采用 std_logic 类型,则时序仿真时会输出为一个’X’,提醒用户建立保持时间存在问题,应重新安排 D和 clk 之间时序关系。

此外,对于双向总线设计(前面已提及)、FPGA/CPLD上电配置等问题,如果没有’Z’,’X’等状态,根本无法进行设计和有效验证。

四.关于进程

进程(Process)是 VHDL 中最为重要的部分,大部分设计都会用到 Process 结构,因此掌握Process 的使用显得尤为重要。以下是初学和使用 Process 经常会出错的例子。

1.多余时钟的引入

在设计时往往会遇到这种情况,需要对外部某个输入信号进行判断,当其出现上跳或下跳沿时,执行相应的操作,而该信号不像正常时钟那样具有固定占空比和周期,而是很随机,需要程序设计判断其上跳沿出现与否。这时,很容易写出如下程序:

① process(Ctl_a)--Ctl_a即为该输入信号 ② begin

③ if Ctl_a’event and Ctl_a=’1’ then ④ „ „;--执行相应操作 ⑤ end if;⑥ end process;

由于出现第③行这类语句,综合工具自动默认 Ctl_a 为时钟,某些 FPGA 更会强行将该输入约束到时钟引脚上。而设计者的初衷只是想将其作为下位机的状态输入以进行判断。上面的程序容易造成多时钟现象,增加设计的难度。解决的办法可以如下,将 Ctl_a 增加一级状态 Ctl_areg 寄存,通过对 Ctl_a 和Ctl_areg 状态判断上跳与否,改正程序如下: ① process(clk)② begin

③ if clk’event and clk=’1’ then ④ Ctl_areg<=Ctl_a;--产生相邻状态

⑤ if Ctl_areg=’0’ and Ctl_a=’1’ then--上跳判断 ⑥ „ „;--执行相应操作 ⑦ end if;⑧ end if;

⑨ end process;

程序中第④行用以产生两个相邻状态,第⑤行对前后状态进行判断是否有上跳现象发生。其中,需注意的是 clk 的时钟频率应明显快于 Ctl_a信号的变化频率,以保证正确采样。

2.输出多驱动

误用 Process经常会引起输出多驱动源的发生,即在两个以上的进程内对同一信号赋值操作。

以下程序就出现了这类情况: ⑴ Proc_a: process(clk)⑵ begin

⑶ if clk’event and clk=’1’ then ⑷ Dout<=Din_A;⑸ end if

⑹ end process;;⑺

⑻ Proc_b:process(sel_en)⑼ begin

⑽ if sel_en=’1’ then ⑾ Dout<=Din_B;⑿ end if;

⒀ end process;

进程 Proc_a 和 Proc_b 中都出现了对 Dout 的赋值语句,设计者原本的想法是,只要合理控制好 clk 和 sel_en 输入,使其不发生冲突,即 clk上升沿时 sel_en 不为’1’;sel_en 为’1’时,不出现 clk 的上升沿,这样 Proc_a,Proc_b 两个进程就不会发生冲突。但综合时,综合工具会将所有可能情况全部罗列进去,包括第⑶行和第⑽行同时成立的情况,此时对于 Dout就有 Din_A和 Din_B 两个输入驱动,Dout 不知接收哪一个,因此该程序无法综合,改正的方法是只要将两个进程合并成一个即可。

由于进程在 VHDL 中的重要性,对此专门做了一个总结如下:(1)一个进程中不允许出现两个时钟沿触发,(Xilinx 公司 CoolRunner 系列 CPLD 支持单个时双钟的双触发沿除外)(2)对同一信号赋值的语句应出现在单个进程内,不要在时钟沿之后加上 else 语句,如 if clk’event and clk=’1’ then-else „ 的结构,现有综合工具支持不了这种特殊的触发器结构

(3)当出现多层 IF语句嵌套时,最好采用 CASE 语句替代,一是减少多层嵌套带来的延时,二来可以增强程序的可读性

(4)顺序语句如 IF语句、CASE 语句、LOOP 语句、变量赋值语句等必须出现在进程、函数或子程序内部,而不能单独出现在进程之外

(5)进程内部是顺序执行的,进程之间是并行运行的;VHDL 中的所有并行语句都可以理解为特殊的进程,只是不以 Process结构出现,其输入信号和判断信号就是隐含的敏感表

五.关于 VHDL 学习中的几点说明

与软件语言相比,VHDL 最重要的特点就在于它的并行运行特性,当设计好的电路上电后,器件内部所有信号将同时并发工作,而不会以软件方式按照程序顺序执行,即使在进程内部也是趋向并行工作的。例如以下程序: ① process(clk)② begin

③ if clk’event and clk=’1’ then ④ <=;⑤ <=;

⑥ end if;;

⑦ end process;

综合的结果两个独立的 D 型触发器,虽然进程内部应按顺序执行,但是硬件实现后,只要采样到时钟上升沿,和 状态会同时翻转,而不会先执行 的变化,然后才会去执行 的转变。因此,VHDL 学习过程中,应加强硬件概念的理解,没有硬件概念或是硬件概念不强,在设计时,往往会将 VHDL 设计以软件编程的方式来处理,而得出一些不可思议的结果。

作为一门硬件描述语言,VHDL 几乎可以用来描述现有的大型系统数字电路、算法以及其它设计。但是,限于目前综合工具的水平,VHDL 中的许多语法还不能支持,例如:

dout<=din after 5 ns;综合时就无法达到如此精度,因此这条语句主要用来编写测试激励,而很少出现在设计实体中。类似的情况还有很多,目前 VHDL 设计使用的也只是整个标准中的一部分,这也正是VHDL 的“可综合子集”性质,它一定程度上限制了 VHDL 的广泛应用,但是随着综合技术的发展,这种情况会逐渐得以改善,VHDL 也将在各个领域中发挥出愈来愈重要的作用

vhdl体会 第2篇

Bit只是一个逻辑型变量,只能存在“0”和“1”,不存在不定状态和高阻态

STD_LOGIC存在U初始值,X不定,0,1,Z高阻 W弱信号不定,L弱信号1,H弱信号0,-不可能情况 2 信号和变量的异同?

延时:变量无延时 信号有延时

位置:变量在PROCESS 信号ARCHITECTUUE SIGNAL BEGIN

信号可以是全局量,只要在构造体中已定义,那么构造体内的所有地方都可以使用;变量是局部量,只能在进程、子程序中定义和使用。如果将结果带出外部,则必须将变量付给一个信号量才行。3 VHDL基本顺序和并行语句有哪些?

顺序描述语句:WAIT语句,断言语句,信号带入语句,变量赋值语句,IF语句,CASE语句,LOOP语句,NEXT语句,EXIT语句,进程调用语句,NULL语句

并行语句:进程语句,并发信号带入语句,条件信号带入语句,选择信号带入语句,并发调用语句,块语句 4 利用VHDL进行硬件设计的流程?

规格设计——行为级描述——行为级仿真——RTL级描述——RTL级仿真——逻辑综合优化——门及仿真,定时检查——输出门级网络表 5 基本硬件描述语言有哪些?

VHDL和Verilog HDL 及日本电子振兴协会开发的UDL/I语言 6 VHDL所包含库的种类有哪些?

IEEE库

STD库是VHDL的标准配置

ASIC逻辑门库

WORK库现行作业库 7 IEEE库中所包含基本类型转换函数有那些? STD_LOGIC_1164包集合

TO_STDLOGICVECTOR(A)由BIT_VECTOR变换为STD_LOGIC_VECTOR TO_BITVECTOR(A)由STD_LOGIC_VECTOR转换为BIT_VECTOR TO_STDLOGIC(A)由BIT转换为STD_LOGIC TO_BIT(A)由STD_LOGIC转换为BIT STD_LOGIC_ARITH包集合

CONV_STD_LOGIC_VECTOR(A,位长)由INTEGER、UNSIGNED、SIGNED转变为STD_LOGIC_VECTOR CON_INTEGER(A)由UNSIGNED、SIGNED转变为INTEGER STD_LOGIC_UNSIGNED包集合

CONV_INTEGER(A)由STD_LOGIC_VECTOR转变为INTEGER 8 简述基本的VHDL的程序结构有那些?

一个完整的VHDL程序包含实体(ENTITY),构造体(ARCHITECTURE),配置(CONFIGURATION),包集合(PACKAGE),库(LIBRARY)9 VHDL程序包含程序子结构有那些?

子程序是一个VHDL程序模块,这个模块利用顺序语句来定义和完成算法,因此只能使用顺序语句。VHDL子程序与其他软件语言程序中的子程序的应用目的是相似的,能更有效地完成重复性的工作。子程序有两种类型,即过程process和函数function 10 简述when else与if else的差别?

后者只能在进程内部中使用(因为是顺序结构),前者的else一定有,但if可以省略,when语句不可嵌套,而if则不然 什么是ASIC及ASIC的特点?

VHDL编程彩灯控制电路 第3篇

EDA(Electronic Design Automatic)技术是电子设计自动化技术,它以计算机为基本工作平台,以硬件描述语言为系统逻辑描述的主要表达方式,以EDA工具为开发软件,以大规模可编程逻辑器件为设计载体,以ASIC、SOC芯片为目标器件,以电子系统设计为应用方向。随着电子技术的发展,应用系统越来越趋于小型化、快速化、大容量、重量轻,E-DA技术的应用引起电子产品及系统开发的革命性变革。VHDL语言作为一种描述能力很强的可编程逻辑器件的标准语言,在实际应用中越来越广泛。设计者只要进行简练的硬件描述,经过EDA工具综合处理,利用各种规模的可编程逻辑器件,生产对应的电子芯片,以便进一步实现相关的电路功能。整个过程通过EDA工具自动完成。在教学过程中,可以配合EDA实验系统(例GW48-CK),使用和验证芯片的功能。

1 功能实现

变化多样的彩灯总让人目不暇接,下面介绍在MAX+PLUSⅡ平台上使用VHDL实现8路彩灯控制电路。由于CPLD(复杂可编程逻辑器件)/FPGA(现场可编程门阵列)可以重复无数次编程,在不做改动电路的情况下,只需改变程序就可以灵活地调整彩灯图案和变化方式,给灯光的变化带来很大的方便。在电路中,如果以1代表亮灯,以0代表灭灯,由0、1按不同的规律组合代表不同的灯光图案控制。程序可以快捷地控制8路彩灯的变化节拍和花型的变化。

(1)在MAX+PLUSⅡ平台中输入以下程序,则可以使8彩灯电路中彩灯依次闪亮,呈现出流水的效果。

//库的使用

//彩灯的数目通过改变输出

//P1灯闪的速度控制,如果外部时钟固定通过改变信号W的位数即可改变灯闪的速度也可通过外部时钟的改变来改变

//P2彩灯的图案控制,通过改变信号S的位数可以很方便的改变要控制图案的数目

//改变输出变量Q的0、1组合就可得到不同的彩灯图案,该电路能使彩灯从右向左依次闪亮,循环往复,呈现出流水的效果

仿真波形如图一所示:

(2)修改信号S的位数为5,输出变量Q的1、0组合如下改变后就可以使彩灯的花型改变为1~8从右到左逐次点亮,又从左到右逐次点亮,全灭,全亮,循环往复。

仿真波形如图二所示:

(3)修改输出变量Q的0、1组合如下,又可以实现多个花样自动变换,循环往复。

仿真波形如图三所示:

2 结束语

在设计时,可以将主要精力放在如何使彩灯的花型正确地循环,而两种节拍的交替只要将一个时钟脉冲二分频后,将用两个分频得到的时钟脉冲来交替控制花型循环即可。如果灯的颜色多种多样则可以很方便地组成多种漂亮的图案,仿真正确后通过下载电缆将程序下载到CPLD/FPGA芯片上即可。只要拥有计算机,配上相应的软件就可以随心所欲的改变彩灯的图案且不受时间的限制。

参考文献

[1]焦素敏.EDA应用技术[M].北京:清华大学出版社,2005.

[2]潘松,黄继业.EDA技术实用教程[M].北京:科学出版社,2002.

vhdl体会 第4篇

【关键词】PS/2接口;VHDL;FPGA

1.引言

随着社会的发展,嵌入式系统技术越来越多的应用到工业控制、汽车电子、航空航天、环境监测等领域中。键盘作为嵌入式系统中的人机接口设备得到了广泛应用。目前,嵌入式系统中采用的键盘有:独立按键式键盘、简易矩阵键盘。独立按键式键盘有键盘个数少,可靠性低等缺点;而简易矩阵键盘的原理是行、列式的矩阵开关,需要单独设计制作,通用性和可移植性不强,且按键数较多时I/O利用率低,软件上为了提高可靠性还要进行延时去抖动、按键扫描以及与CPU的通信处理等,一方面降低了系统的效率,另一方面增加了系统设计的成本。微机系统中的PS/2键盘,具有内嵌式自动去除按键抖动设计,能自动地识别键的按下与释放,软硬件开发成本低且性能稳定;因此,将PS/2键盘作为嵌入式系统中的输入设备已成为业界研究的热点。目前,关于PS/2键盘控制的应用大部分采用单片机或微机控制;与此相比,FPGA具有灵活性更强,集成度更高,容易移植等特点。

本文在分析PS/2协议、工作原理的基础上,给出了一种基于VHDL硬件描述语言的PS/2键盘接口的设计方法,并实现于Cyclone II EP2C5T144C8芯片上。

2.PS/2键盘接口协议

2.1 物理特性

PS/2设备接口用于许多现代的鼠标和键盘,常用为6脚mini-DIN,其引脚结构和外形如图1所示。

图1 PS/2硬件接口外形图

PS/2设备分主从设备,其物理特性要求保证时钟、数据、电源和地线间的互相连接。PS/2键盘靠PC的PS/2端口提供+5V电源,时钟和数据管脚为集电极开路形式,必须接大阻值的上拉电阻(一般设置在主设备中),主从设备间的数据通信采用双向同步方式传输,时钟信号一般由从设备产生。信号平时保持高电平,有输出时才被拉到低电平,之后自动上浮到高电平。

2.2 数据包结构

键盘码分为通码和断码,键盘的任一按键状态每改变一次,键盘至少会发出三个字节的数据包,在有键按下时会向主机发送该键的通码(Make Code):一般键值为一个数据,扩展键值为两个数据;当键释放时发送断码(Break Code):一般键值为0xF0+一般键值的通码,扩展键值,为0xE0+0xF0+扩展键值的第二个通码。例如:键“A”的通码为0x1C,键“A”的断码为:0xF0,0x1C。因此当要传送键“A”时,键盘发送的数据包的代码是:0x1C,0xF0,0x1C,而扩展按键通常通码与断码均要多一个字节。

2.3 工作时序

PS/2协议是一种双向半双工串行通信协议:数据线上每发送一位数据同时在时钟线上发送一个脉冲,数据就被读入.键盘可以发送数据到主机,数据在时钟下降沿被读取;主机也可以发送数据到键盘,数据在时钟上升沿被读取,但主机在总线上有优先权,只要把时钟拉低即可抑制键盘通讯.时钟信号由键盘产生,最大时钟频率为33kHz,推荐频率在15kHz。通信两端通过Clock同步,通过Data交换数据。其传输时序根据传输的方向不同分为发送和接收两个不同时序逻辑,图2是从键盘到主机的时序图。

图2 键盘发送数据时序图

当键盘要向到主机通信时,它首先检查时钟是否是高电平.如果不是则表明是主机正在通信,必须缓冲要发送的数据直到重新获得总线的控制权(键盘有16个字节的缓冲区),即等到时钟线是高电平才能发送数据。且从键盘到主机的数据只能在时钟的下降沿时才能被读取。

当主设备到键盘进行通信时,主设备会首先把时钟线和数据线设置为“请求发送”状态。具体方式为:首先下拉时钟线至少100us来抑制通信,然后释放时钟。键盘检测到这个状态,开始产生时钟信号,并且时钟脉冲标记下输入八个数据位和一个停止位。在此过程中,设备在不超过10us的间隔内就会检查这个状态。当设备检查到该状态时,即产生时钟。与键盘发送的数据读取方式不同,主机发送的数据必须在时钟的上升沿读取。

3.传统的PS/2键盘接口控制

目前,嵌入式系统中,PS/2键盘的控制设计主要采用单片机来实现,PS/2键盘与单片机的连接有多种方式:(1)时钟与数据线均与单片机的普通I/O口相连,软件设计时采用查询方式检测时钟信号来接收键盘信息,这种方式可以节省单片机的中断资源,但软件设计的查询方式会占用大量CPU时间,适用于对键盘实时性要求不高的情形;(2)主机系统采用中断方式支持键码的随机输入,当主机接收到从键盘发来的时钟信号时,即向中断系统发出键盘中断,CPU响应中断并接收键码,这种方式应用较为广泛,具有实时性较强的特点[1,2,3]。

但是,以上采用单片机对PS/2键盘接口进行控制的技术有可靠性不高,移植性不强等特点,特别是在当今嵌入式系统中广泛使用可编程逻辑器件FPGA、CPLD的基础上,采用硬件描述语言VHDL进行PS/2键盘接口的设计并用FPGA/CPLD来实现具有成本低、移植性强等特点。

4.PS/2接口的VHDL实现

本设计采用VHDL的硬件描述方式,以Altera公司的EP2C5T144C8为目标芯片做电路实现和测试,EDA平台为Quartus II 9.0版本。所设计的接口电路实现了对键码的接收和译码功能,及向键盘发送命令的过程。在实际应用中,随机快速地通过键盘输入,软件控制台上便可输出相应的键值[4,5]。顶层设计如图3所示,主要包括数据格式转换模块、信息提取模块、核心控制模块、数据包发送模块。

数据格式转换模块用于接收数据和发送数据,实现把接收到的串行数据转换成所需要的并行数据进行处理。信息提取模块用于把数据格式转换模块传过来的数据包按一定要求进行处理提取,从而获取有用的信息。核心控制模块是设计的核心,PS/2接口是半双工串行总线,因此其发送和接收不能同时进行,需要对其时序进行严格的设置。核心控制模块负责协调整个系统的运行,在核心控制模块的设计中采用了状态机的设计思路。数据包发送模块负责把要传送的命令数据转变成符合PS/2协议的发送数据包格式。

以硬件描述语言VHDL进行设计,具有较好的通用性与可移植性,其设计流程图如图4所示。

4.1 工作过程

当系统开始工作时,首先由主设备向键盘发送初始化信号,在得到键盘的应答信号后,系统进入总线空闲状态,此时可以进行数据的发送和接收,但主设备拥有更高的优先级,如果系统正处在接收状态而同时得到发送请求,系统将中断数据接收,直接进入数据发送状态。

本文以QuartusⅡ 9.0为设计平台,按照TOP-DOWN的设计思路独立对每个模块进行了仿真。图5为接收数据模块的时序仿真图,可以看出该模块正常工作。

4.2 硬件验证

硬件验证采用北京理工达盛EL教学实验箱EL-EDA-V,以Cyclone II系列FPGA器件EP2C5T144C8为目标芯片,将综合后的配置文件下载后,进行硬件测试。经测试,在PS/2设备完成初始化后,实验箱正确观察到了键盘的输入。

5.结束语

通过硬件测试表明,设计的各个模块成功地实现了复位后的数据传送过程,达到了预期的目标。同时基于VHDL设计决定了本设计具有可靠性高和移植性强的特点,可方便的移植到任一采用了FPGA/CPLD芯片的嵌入式系统设计应用中。

参考文献

[1]李冉琦,白丽媛.基于单片机的PS/2标准键盘接口制作[J].电子制作,2007,11:12-15.

[2]刘好杰,朱晓光,石晶.串口实现PS/2键盘在单片机系统中应用[J].仪器仪表用户,2010,2:43-44.

[3]李伟光,朱金华.PC标准键盘在单片机系统中的应用[J].电测与仪表,2003,8:29-31.

[4]刘勇,王玉晶,曲斌,于洋.一种嵌入式PC非标准键盘的设计[J].微计算机信息,2007,23-1:87-88.

作者简介:时伟(1981—),男,硕士,主要从事电子设计自动化方面的研究和教学工作。

vhdl体会 第5篇

课程设计报告

课程设计题目:用VHDL语言实现数字钟的设计

班 级:电子1001班 学 号:20102594 姓 名:刘云飞

指导老师:李世平、李宁

设计时间:2012年12月

东北大学信息学院

摘要

随着EDA技术的发展,EDA在通信、电子等领域占有十分重要的地位。本设计介绍了基于VHDL语言的数字钟的设计。数字钟的功能是对年、月、日、时、分、秒、星期,以及闹钟时、分的预置;在正常计数时的时、分与闹钟设定的时、分相同时,实现报时,同时以stop和pass键对闹钟进行停止及延迟响铃的控制;在整点的时候led灯闪烁一下。其中,用set脉冲的不同实现对预置,正常计时,闹钟的控制。Set为1~12分别控制显示年月日、预置年月日、时分秒、星期、显示时分秒、预置闹钟时分、显示闹钟预置的时分。预置时用up的高、低电平实现对各预置量的加、减控制。将1KHZ的时钟进行分频为1HZ,实现每次脉冲为1秒。经仿真和验证显示,此数字钟切实可行,可以实现显示时间和闹钟的功能。

关键词:VHDL语言,数字钟,预置

东北大学信息学院

目录

摘 要............................................................2

1、设计目的.........................................................4

2、设计内容和要求...................................................4

3、设计原理.........................................................4

3.1 数字钟功能介绍..........................................................................................................4 3.2 数字钟设计原理..........................................................................................................5

4、VHDL程序设计.....................................................6

4.1 整体设计思路................................................................................................................6 4.2 各模块设计方法............................................................................................................7 4.2.1 顶层模块...............................................................................................................7 4.2.2 其他模块...............................................................................................................8 4.2.3 程序包模块.........................................................................................................13

5、仿真与分析......................................................13

5.1 仿真结果....................................................................................................................13 5.2 仿真分析....................................................................................................................16

6、课程设计总结....................................................16

7、参考文献........................................................17

东北大学信息学院

1、设计目的

掌握利用可编程逻辑器件和EDA设计工具进行电子系统设计的方法。

2、设计内容和要求

用VHDL语言实现数字钟的设计,要求设计实现一个具有带预置数的数字钟,具有显示年月日时分秒的功能。用6个数码管显示时分秒,set按钮产生第一个脉冲时,显示切换年月日,第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,依次第4、5、6、7个脉冲到来时分别可预置日期、时、分、秒,第 8个脉冲到来后预置结束,正常工作,显示的是时分秒。Up为高电平时,upclk有脉冲到达时,预置位加1。否则减1。

3、设计原理 3.1 数字钟功能介绍

数字钟具有计时、预置、报时的功能。以不同的set脉冲控制各个功能。

(1)在计时功能中,数字钟实现对年月日时分秒即星期的计时,并可以通过LED数码管分别显示年月日、或时分秒、或星期、或闹钟的时分。

(2)在预置功能中,可以通过UP键对各需要预置的量进行控制。UP=1时,进行“加”控制,UP=0时,进行“减”控制。

(3)在报时功能中,分为整点报时和设置时间报时。其中整点报时以ce作为使能输入端,在整点时灯进行一秒闪烁;设置时间报时以enable作为使能输入端,enable=1时设置时间报时功能启动,在闹钟预置时间与时钟当前时间相同时报时,若此时按下stop,闹钟立即停止并不再响铃,若按下pass,则闹钟立即停止,但三分钟后再响,如此循环5次后不再响铃,若什么都不按,闹钟响铃持续1分钟。

东北大学信息学院

3.2 数字钟设计原理

本设计功能有8个子模块:分频模块、时分秒模块、日模块、年月模块、闹钟预置模块、星期模块、响铃模块。通过元件例化由顶层文件timekeeper综合。

整体设计框图及外观图如(图 3-1)及(图3-2)

图3-1 数字钟设计整体框图

东北大学信息学院

图3-2 数字钟外观图

4、VHDL程序设计

4.1 整体设计思路

采用自上而下的方法进行整体设计。整个设计共分为8个模块,通过顶

层文件timekeeper元件例化将8个模块各个端口对应相连。在设计各个模块时所用到的其它运算方法等放于work库中,通过程序包及程序包体的方式对所使用函数进行定义。

主要使用的语句有:元件例化语句,过程语句,信号赋值语句,if语句,case语句(在状态机中)。

图(4-1)表示了个模块的连接及连接是所用到的触发器等。

东北大学信息学院

图4-1

整体结构图

4.2 各模块设计方法

4.2.1 顶层模块

顶层模块timekeeper是.对对所有模块的综合。

它包含的功能是:通过元件例化连接各模块;实现对闹钟控制位sp2的控制;实现闹钟的整点报时闪烁。

输入端:up

全局加减选择,控制预置时的加减

setpin 设定选择

东北大学信息学院

upclk 加减触发

f1000 时钟输入

输出端:a0~d1 八位数码管控制引脚的输出

z

整点报时输出 4.2.2 其他模块

1、时分秒模块

时分秒模块h_m_s是对时、分、秒正常计时(set=0 or 1 or 12)和预置时分秒(set=5 or 6 or 7)的实现。

分和秒由两个六十进制实现,时由24进制实现。当时间达到23时59分59秒时,时分秒全部归零,进位位ov由零变为1,通过管脚连接到date模块的时钟计数信号clk0,开启date模块。

2、日的模块

日的模块date实现日子进行正常计时(set=0 or 1 or 12)和预置(set=4)。

由于每月的天数与月份、年份有关,故需判断年月。(1)(2)(3)当1、3、5、7、8、10、12月时,每月31天,使用31进制。当4、6、9、11月时,每月30天,使用30进制。当2月时,分闰年和平年。闰年29天,平年28天。

闰年和平年的判断方法是:由于通过年月模块传输的年份为两位BCD码。若高位信号为“xxx0”且低位信号为“xx00”或高位信号为“xxx1”且低位信号为“xx10”,则可判定为闰年,否则为平年。

以上各月,当日期至月底时返回1,进位位ov变为1通过管脚连接年月模块的时钟计数信号clk0,开启年月模块。

3、年月模块

年月模块year_mon实现年月正常计时(set=0 or 1 or 12)和年、月的预置(set=2 or 3)。

月为12进制,当达到12时变回为1,同时使年份进1。由两位BCD码表示年份,故可以表示100年之年的所有年,为100进制。

东北大学信息学院

图4-2 year_mon和date模块的电路连接图

4、星期模块

星期模块week的功能是实现对星期的计时(set=0 or 1 or 12)和预置(set=8)。为七进制。

图4-3 week模块的RTL

5、闹钟模块

东北大学信息学院

闹钟模块alarm是对闹钟时和分的预置(set=10 or 11)。时为24进制,分为60进制。

图4-3 alarm模块的RTL

另外,在顶层模块timekeeper,当闹钟预置时间与计时时间相同时(仅时、分),闹钟响铃,当不对其进行任何操作时,响铃维持1分钟。响铃方式见4.2.7响铃模块。

6、响铃模块

响铃模块alarm是对闹钟响铃的控制。其中主要包含:

Enable:当enable=1时,闹钟可以工作。

Sp2 :当顶层模块闹钟时间与计时相等时,sp2=1,响铃开启。Stop :闹钟停止并不再响铃。

Pass :闹钟停止但三分钟后再响,循环5次。Sp :响铃输出。Sp=1时响铃,sp=0时不响。本模块主要使用的方法是状态机。相应状态转换图如下:

东北大学信息学院

图 4-4 响铃模块状态转换图

在状态t_pass时,使用计数的方法实现对3分钟,5次循环的计数。

图 4-5 计数的流程图

东北大学信息学院

图4-6 speak模块的RTL

7、分频模块

分频模块fenpin使输入为1KHZ时钟信号时,接入电路经分频后仍能按1HZ即1s计数。

图4-7 fenpin模块的RTL

8、显示模块

显示模块led即七段数码管的显示电路。

东北大学信息学院

图4-8 led模块的RTL 4.2.3 程序包模块

程序模块是对各模块所用到的函数的定义,通过程序包package定义时、日、月、年等的增减函数(procedure),并用程序包体package body具体说明函数的内容。通过use.work.pac.all语句调用程序包,使程序书写更加方便简洁。

5、仿真与分析

5.1 仿真结果

1、h_m_s模块

东北大学信息学院

表示当up=1时,时钟时(set=5)、分(set=6)、秒(set=7)从0开始加。

图 5-1

2、date模块

以下为对应月份截图。另外,当日期由最末变为1时,ov进1以控制year_mon模块。

(1)大月:每月31天。

图5-2-1(2)小月:每月30天。

图5-2-2(3)平年2月:每月28天。

东北大学信息学院

图5-2-3(3)闰年2月:每月29天。

图5-2-4

3、year_mon模块

图5-3

4、week模块

前半部分up=1,为加,1~7,后半部分up=0,为减,6~1

图5-4

5、alarm模块

下图反映对闹钟时(set=10)、分(set=11)的预置,up=1为加。

图 5-5

6、speak模块

(1)按下pass

由下图可见,当时间相同sp为高电平;按下pass后sp变为低电平,三分钟

东北大学信息学院

后sp又为高电平。

图5-6-1(2)按下stop

由下图可见,当时间相同时sp为高电平,按下stop后sp变为低电平。

图 5-6-2

5.2 仿真分析

各模块仿真均可实现,且波形显示可以实现预想的功能。

6、课程设计总结

通过这次的课程设计,我又一次系统的复习了VHDL语言,通过实践对VHDL语言和EDA技术有了更具现实性应用性的了解,并熟练了相关软件的使用方法。

此次课程设计的内容是数字钟,我学会了如何利用元件例化将各个模块结合起来,而不是一味的想起一个功能设计一个功能,而是有一个总体的自上而下的设计,建立基本的设计框图(如图 3-1),再进行具体的设计。

在程序调试的过程中,出现了很多的问题。我发现往往是一行出现了错误导致了接下来一系列错误的出现。

还有在仿真中出现错误的红线,并出现了‘U’字符,全都是未设置初值所致。而在设置初值时仍然出现了问题。最开始我想定义一个clr信号,当clr为高电平时各功能清零,但是在实际仿真时,由于常常要看在月末或类似23时59分59秒这样的时刻是否有进位信号进为高电平,从零开始显然让仿真变的十

东北大学信息学院

分麻烦,如果可以直接赋初值到接近进位的时刻就会让仿真变得简便。即使用信号赋初值的方法对信号进行赋初值,既解决错误又利于仿真。

在最后对顶层仿真时出现了很多的问题,最后发现都是未对应的问题。当然,我的设计还有很多不足的地方。比如有一处的竞争冒险产生的毛刺没有解决。最开始是将speak模块控制信号sp2的相关程序写在了alarm模块,仿真时发现在一处出现了毛刺,在对闹钟进行预置时分时的第一个时间都未足一个时钟周期(如图 5-5)。后来我想是否因为alarm模块有两个process进程,就将sp2的相关程序挪到了顶层模块,但是最后还是没有实现。咨询了一下同学们,他们都说这没有问题,不需要解决,所以就没有解决这个问题。

此次课程设计我学到了很多,但是我觉得应该放在刚刚考完EDA之后,那时候对只是记得比较清楚,不像在这次设计时很多知识都想不起来了。其他的对我帮助都很大。

vhdl体会 第6篇

一、总学时:36(理论学时:20 实验学时:16)学分:2.0

二、教学目的:

现代电子设计技术的核心是EDA(Electronic Design Automation)技术,而EDA的技术基础是PLD(Programmable Logic Device)和EDA软件平台。通过本课程的学习使学生基本掌握在EDA软件平台上,利用硬件描述语言HDL(Hardware Description Language)进行数字系统设计,完成系统的逻辑描述,完成逻辑编译、逻辑化简、逻辑分割、逻辑综合、结构综合以及逻辑优化和仿真测试,下载到PLD中,实现既定的逻辑电子线路系统功能。

通过学习这门课程,使学生掌握利用软件设计开发硬件电路的基本技能,为以后在电子产品设计和科学研究工作中的应用打下良好基础。

三、课程内容及学时分配

第一章 概述(2学时)1.1 EDA技术及其发展 1.2 EDA技术实现目标 1.3 硬件描述语言VHDL 1.4 VHDL综合

1.5 基于VHDL的自顶向下设计方法 1.6 EDA技术与传统电子设计方法的比较 1.7 EDA的未来发展趋势

第二章 EDA设计流程及其工具(2学时)2.1 FPGA/CPLD设计流程 2.2 ASIC设计流程 2.3 常见EDA工具 2.4 Quartus II概述 2.5 IP核

第三章 FPGA/CPLD结构与应用(4学时)3.1 PLD的发展历程及分类 3.2 简单PLD原理 3.3 CPLD结构与工作原理 3.4 FPGA结构与工作原理 3.5 FPGA/CPLD测试技术 3.6 FPGA/CPLD产品介绍 3.7 CPLD/FPGA的编程与配置 第四章 原理图输入设计方法(2学时)4.1 原理图设计输入

4.2 编译设计项目 4.3 设计仿真 4.4 器件编程 4.5 波形输入设计方法 第五章 VHDL语言(10学时)5.1 VHDL源程序的基本结构 5.2 VHDL语言的语法规范 5.3 VHDL语言的主要语句及其应用 5.4 用VHDL语言设计组合电路 5.5 用VHDL语言设计时序电路 第六章 状态机的设计(4学时)6.1 一般有限状态机的设计 6.2 Moore有限状态机的设计 6.3 Mealy有限状态机的设计 6.4 状态编码

6.5 状态机剩余状态处理

第七章 设计优化和设计方法(2学时)7.1 面积优化 7.2 速度优化

7.3 Quartus II的优化设计 7.4 其它设置

第八章 EDA工具软件接口(2学时)8.1 EDA软件接口流程 8.2 Synplify与Quartus II的接口 8.3 ModelSim与Quartus II的接口 第九章 EDA系统设计(2学时)9.1 高速A/D采样控制设计

上机实验(16学时)根据实际情况选做5~6个实验 1.原理图输入方法练习: 1.1 简单电路的设计 1.2 利用宏功能模块的设计 2.VHDL语言练习:

2.1 用VHDL语言设计移位寄存器 2.2 用VHDL语言设计高速A/D采样控制 2.3 用VHDL语言设计实时时钟 2.4 汽车尾灯设计 2.5 序列检测器的设计

2.6 正负脉宽数控调制信号发生器的设计 2.7 数字频率计的设计 2.8 秒表的设计

2.9 MCS–51单片机与FPGA/CPLD总线接口逻辑设计 2.10交通灯信号控制器的设计 2.11语音信箱控制系统的设计 2.12 PID控制器的设计

2.13 空调系统有限状态自动机的设计 2.14 闹钟系统的设计

(注意:上机实验2.1---2.14根据所教专业不同选择不同题目)

四、适用专业

控制理论与控制工程、通信工程、电子信息工程、现代电子技术等专业

五、先修课程

数字电子技术、模拟电子技术、电路

六、教材及主要参考书

1.潘松,黄继业.EDA技术与VHDL(第三版).清华大学出版社,2009.9 2.李景华,杜玉远.可编程逻辑器件与EDA技术.东北大学出版社,2000 3.陈琼,潘礼. FPGA系统设计与实践 电子工业出版社,2005

vhdl体会范文

vhdl体会范文(精选6篇)vhdl体会 第1篇VHDL 编程的一些心得体会(转)http://www.dzjs.net/html/EDAjishu/2007/0131/1504.htmlVHDL 是由...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部