基于FPGA的时序逻辑电路设计
更新时间:2024-04-21 15:18:01 阅读量: 综合文库 文档下载
淮北师范大学
2011届学士学位论文
基于VHDL的时序逻辑电路设计
学院、专业 物理与电子信息学院
电子信息工程
研 究 方 向 电路与系统 学 生 姓 名 龙 芳 学 号 20071342066 指导教师姓名 姜 恩 华 指导教师职称 副 教 授
2011年 4月 27日
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
基于VHDL的时序逻辑电路设计
龙 芳
淮北师范大学 物理与电子信息学院 235000
摘要 本文主要介绍了时序逻辑电路通过EDA软件Quartus II平台进行设计的方法及流程。首先介绍了时序逻辑电路的相关知识,包括时序逻辑电路的特点以及分析和设计过程。其次,文章对Quartus II软件的使用作了一定的介绍,同时阐述了VHDL语言的基本构造和语法特点。最后,本文重点介绍了用VHDL语言来设计时序逻辑电路的具体流程。文中选取了计数器,移位寄存器和序列信号发生器三个设计实例对这一设计过程加以说明。详细介绍了用软件实现时序逻辑电路的设计,从电路的分析到程序的编写,并仿真验证了结果的正确性, 具有较强的通用性。
关键词 时序逻辑电路;EDA;Quartus II软件;VHDL语言
II
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
Sequential Logic Circuit Design Based on VHDL
Long Fang
School of Physics and Electronic Information, HuaiBei Normal University, 235000
Abstract This paper mainly introduces the methods and processes of sequential logic
circuit design by EDA software at Quartus II platform. Firstly, it introduces some related
knowledge about sequential logic ciucuit, including its characteristic, analysis and design. Then, to some extant, the paper illustrates the application of Quartus II software.
Meanwhile, it gives a introduction of VHDL language, as its basic structure and grammatical trait.
Finally, it emphases great attention over this design process. This paper selects three design
examples to illustrate this design process. Respectively, they are counter ,shift register and sequence producer. It introduces the design of sequential logic circuit with software in
detail from the analysis of circuit to programming. And it simulates to verify the correctness of the result with great commonality.
Keywords Sequential logic circuit; EDA; Quartus II; VHDL language
III
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
目 次
引言.............................................................................................1 1 时序逻辑电路的相关知识…………………………………..2 1.1时序逻辑电路概述...........................................................2 1.2时序逻辑电路的分析与设计...........................................3 2 QuartusII 软件介绍.................................................................6 2.1 QuartusII 软件的概述....................................................7 2.2 QuartusII 软件的设计流程.............................................7 2.3 硬件描述语言VHDL......................................................9 3 时序逻辑电路基于VHDL的设计实例.................................12 3.1 同步计数器的设计与实现.............................................12 3.2 移位寄存器的设计与实现.............................................16 3.3 序列信号发生器的设计与实现.....................................19 结论............................................................................................24 参考文献....................................................................................25 致谢............................................................................................26
IV
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
引言
电子科技飞速发展,现代电子技术的核心已日趋转向基于计算机的电子设计
自动化技术,即EDA(Electronic Design Automation) 技术。
随着半导体技术的发展,数字电路已经由中小规模的集成电路向可编程逻辑器件(PLD)及专用集成电路(ASIC)转变。数字电路的设计手段也发生了变化,由传统的手工方式逐渐转变为以EDA工具作为设计平台的工作方式。EDA技术就是依赖功能强大的计算机,在EDA 工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件自动完成逻辑编译、化简、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。通过对电路结构或功能行为的描述,可以在不同的抽象层次对电路进行逐层描述,用一系列分层次的模块来表示极其复杂的数字电路系统。
目前数字技术已渗透到科研、生产和人们日常生活的各个领域。从计算机到家用电器,从手机到数字电话,以及绝大部分新研制的医用、军用设备等,无不尽可能地采用了数字技术。数字技术的发展使得电路越来越集成化、小型化、规模化,这给人们的生活带来了许多的便利。
1
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
1 时序逻辑路的相关知识
1.1 时序逻辑电路概述
根据逻辑功能的不同特点,可以将数字电路分为两大类,一类为组合逻辑电路(简称组合电路),另一类为时序逻辑电路(简称时序电路)。
1. 时序逻辑电路的特点
在时序逻辑电路中,任意时刻的输出不但和当前输入有关,还与系统的原先状态有关,即时序电路的当前输出由输入变量与电路原先的状态共同决定。
而在组合逻辑电路中,任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。因此为实现时序逻辑电路的设计目的,时序逻辑电路从某一状态进入下一状态时,必须首先设法“记住”原先的状态。故作为时序逻辑电路的基本特征,时序逻辑电路应具有“记忆”功能。
因此在电路结构上,时序逻辑电路包含组合电路和存储电路两个组成部分,而存储电路必不可少。并且,在数字电路和计算机系统中,常用时序逻辑电路组成各种寄存器、存储器、计数器等,而触发器则是时序电路最常用的记忆元件。下图是时序逻辑电路的基本框图。
输入X(X1,X2..) 组 合 逻 辑 电 路 输出Z(Z1,Z2…) Y(Y1,Y2…) W(W1,W2…) 存 储 电 路 图1 时序电路方框图
其中:
X (X1,X2,……,Xn)为外部输入信号; Z (Z1,Z2,..….,Zj)为电路的输出信号; W (W1,W2, …...,Wk)为存储电路的输入;
2
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
Y (Y1, Y2,……,Yl) 为存储电路的输出,也就是组合电路的部分输入。 信号之间的关系如下:
Z(tn)=F[X(tn),Y(tn)] 为电路输出函数表达式; W(tn)=G[X(tn),Y(v)] 为存储电路的激励函数; Y(tn?1)=H[W(tn),Y(tn)] 为存储电路的状态方程。
由上可以看出tn?1时刻的输出不仅取决于tn?1时的输入X(tn?1),而且还取决于
tn时刻存储电路的输入W(tn)及存储电路在tn时刻的状态 Y(tn)。这些都体现了时
序逻辑电路的特点。
2. 时序逻辑电路的分类
时序逻辑电路一般有两大类,一种是同步时序逻辑电路,这种电路只有在时钟脉冲上升沿或下降沿到达时刻才能同时更新所有存储电路器件的状态,另一种是异步时序逻辑电路,在这种电路中,存储电路器件的状态的更新与时钟脉冲的到达不是同步的,而是异步进行的。
此外,有时还根据输出信号的特点将时序电路划分为米利(Mealy)型和穆尔(Moore)型两种。在米利型电路中,输出信号仅仅取决于存储电路的状态。可见,穆尔型电路只不过是米利型电路的一种特例而已。还有一些具体的时序电路中并不具备图1所示的完整形式。例如,有的不具备组合电路部分,有的有可能没有输入变量,但它在逻辑功能上仍具备时序逻辑电路的基本特征。
1.2 时序逻辑电路的分析与设计
1. 时序逻辑电路的分析
分析一个时序电路,就是要找出给定时序电路的逻辑功能。具体的说,就是要求找出电路的状态和输出的状态在输入变量和时钟信号作用下的变化规律。
时序电路的逻辑功能可以用输出方程,驱动方程和状态方程全面描述。因此,只要写出给定逻辑电路的这三个方程,那么它的逻辑功能也就表示清楚了。根据这三个方程,就能够求得在任何输入变量状态和电路状态下的电路的输出和次态。
分析同步时序逻辑电路[1~3]时一般按如方法进行:
(1) 从给定的逻辑图中写出每个触发器的驱动方程(亦即存储电路中每个触发器输入信号的逻辑函数式)
(2) 将得到的这些驱动方程代入相应触发器的特性方程,得到每个触发器的状态方程,从而得到由这些状态方程组成的整个时序电路的状态方程组
(3) 根据逻辑图写出电路的输出方程
3
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
2. 时序逻辑电路的数字设计
时序逻辑电路的设计是时序逻辑电路分析方法的逆过程,是根据给定的状态图或通过对设计要求的分析得到状态图,进而设计出时序逻辑电路的过程,采用传统的时序电路的设计方法时,时序逻辑电路的设计过程需要七个步骤,需要进行复杂的计算来确定状态方程,驱动方程,既繁琐又容易出错;尤其对异步时序逻辑电路的设计就显得更为复杂了[4]。
而利用控制卡诺图的特点和性质,提出了一种新的时序逻辑电路的设计方法:控制卡诺图法,该方法是由待设计系统的要求说明或系统的状态图,根据所选用的触发器,得到该触发器相应的状态变化条件,从而确定触发器的驱动条件和时钟脉冲条件,设计出所需要的时序逻辑电路,这种方法不仅适用于设计同步时序逻辑电路,而且还适用于设计异步时序逻辑电路[5]。
控制卡诺图就是用规定的触发器状态变化时的符号填写的卡诺图,由控制卡诺图求出组成时序逻辑电路各触发器输入端及脉冲输入端的逻辑表达式。当触发器状态发生变化时,作如下符号规定:触发器状态由0变到0,记作0;触发器状态由0变到1,记作?;触发器状态由1变到0,记作?;触发器状态由1变到1,记作1;无关状态和多余状态记作?。
控制卡诺图法是通过先填写出控制卡诺图,然后选取最合适的触发器,将时序逻辑电路设计出来,经过研究可得以下结论:
J-K触发器,J端必须包含“?”;必须避免“0”;状态信号,“?”、“1”、“?”为无关项,K端必须包含“?”;必须避免“1”;状态信号,“0” 、“?” 、“?”为无关项。其它触发器可总结如下表1,输入控制端必须包含的信息为“1”,必须避免的信息为“0”,多余的信息“?”。
表1 各触发状态转换表
0?0 0?1 1?0 1?1 0 J 0 1 K T 0 1 1 0 D 0 1 0 1 R S 0 1 0 ? ? 1 0 ? 0 1 0 ? ? 1 ? ? ? ? ? ? ? ? ? ? 4
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
控制卡诺图法设计时序逻辑电路的设计过程
给定逻辑功能 建立原始状态图原始状态表 状态简化求最小化状态表 状态编码 选触发器类型,求驱动方程、输出方程 画逻辑电路图
画出全状态图并检查,如不符重新设计 图2 同步时序逻辑电路的设计过程
设计过程中的具体过程如下:
① 逻辑抽象,得出电路的状态转换图和状态转换表
就是分析给定的逻辑问题,确定输入变量、输出变量和电路的状态量,定义输入、输出逻辑状态和每个电路状态的含义并将电路状态编号,按照题意列出电路状态转换表或画出电路的转换顺序编号。 ② 状态化简
去掉多余的无用状态或将两结果相同的状态合并为同一个状态。 ③ 状态分配
时序逻辑电路的状态是用触发器状态的不同组合来表示的。首先,需要确定触发器的数目,其次要给每个电路状态规定对应的触发器状态组合。 ④ 选定触发器的类型,求出电路的状态方程、驱动方程和输出方 ⑤ 根据得到的方程式画出逻辑图
5
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
⑥ 检查设计的电路能否自启动
在异步时序逻辑电路[1~3]中,每次电路状态发生转换时并不是所有触发器都有时钟信号。只有那些有时钟信号的触发器才需要用特性方程去计算次态,而没有时钟信号的触发器将保持原来的状态不变。
6
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
2 QuartusII软件介绍
2.1 Quartus II软件的概述
Quartus II是21世纪初推出的Altera前一代FPGA/CPLD集成开发环境MAX+plus II的更新换代产品,其界面友好,使用便捷。Quartus II还具备仿真功能,同时也支持第三方的仿真工具,如ModelSim,利用Quartus II能良好的实现VHDL时序逻辑电路的仿真。特点如下[6]:
① Quartus II软件提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统的设计综合环境和开发的基本设计工具并为DSP开发包进行系统模型设计提供了集成综合环境。同时Quartus II软件能够利用第三方的综合工具,如;Leonardo Spectrum 、Synplify Pro、 FPGA Compiler II,并能直接调用这些工具。此外,Quartus II软件还可以与MATLAB和DSP Builder综合进行基于FPGA的DSP系统开发,是DSP硬件系统实现的关键EDA工具。
② Quartus II软件具有模块化的编译器。编译器包括的功能模块有分析、综合器、适配器、装配器、时序分析器、设计辅助模块、EDA网表文件生成器和编辑数据接口等,可以通过选择Start Compilation来运行所有的编译器模块,也可以通过选择Start单独运行各个模块,还可以在Compiler Tool窗口中运行该模块来启动编译器模块。
③ Quartus II软件还包含许多十分有用的LMP(Library of Parameterized Modules)模块,它们是复杂或高级系统构建的重要组成部分。
④ Quartus II软件支持硬件语言VHDL、Verilog HDL 及AHDL(Altera HDL). ⑤ Quartus II软件允许来自第三方的EDIF文件输入,并提供了很多EDA软件接口,它还支持层次化设计,可以在一个新的编辑输入环境中对使用不同输入设计方式完成的模块进行调用,从而解决了原理图和HDL混合输入设计的问题。在设计输入之后,Quartus II软件的编译器将给出设计输入的错误报告。Quartus II软件拥有性能良好的设计错误定位器,用于确定文本或图形设计中的错误。对于使用HDL的设计可以使用RTL Viewer 观察综合后的RTL 图形。还可以对设计进行时序仿真。
2.2 Quartus II软件的设计流程
Quartus II软件自动设计的主要处理环节和设计流程包括设计输入编译、设计分析与综合、适配、编程文件汇编(装配)、时序参数提取以及编程下载几个步
7
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
骤。
具体实现步骤如下: (1) 建立新文件
选取窗口菜单File→New,出现对话框,选择VHDL file选项,单击OK按钮,进入文本编辑画面。 (2) 输入VHDL源程序 (3) 保存
选取窗口菜单File→Save, 出现对话框,键入文件名,单击OK按钮。 (4) 建立工程文件,指定项目名称,要求与文件名相同
选取窗口菜单File→New Project Wizard→Next,在工程名中键入文件名,单击Next按钮。
(5) 选择实际编程器件型号
在接下来的窗口菜单中Family中选Cyclone系列, 在Package中选PQFP,在Pin count中选240,在Speed grade中选8,在Available devices选择EP1C12Q240C8系列,再点击Next→Finish。
图形或 HDL 编译
Analysis Synthesis 分析与综合 Assemble 编程文件汇编 编Filter 适配器 程器 Timing Analyzer 时序分析器 设计 综合与 输入编译
适配 器件 下载 仿真 图3 Quartus II软件设计的流程图
8
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
(6) 保存并查错
选取窗口菜单File→Save,再选取窗口菜单Processing→Start Compilation即可对电路文件保存并进行检查。 (7) 修改错误
针对Message窗口所提供的信息修改电路文件,直到没有错误为止。 (8)时序仿真
进入波形编辑窗口:选取窗口菜单File→New→Vector Waveform File, 进入仿真波形编辑器,将波形文件存盘。接下来引入输入和输出脚:选取窗口菜单View→Utility windows→Node Finder,出现对话框,选择Pins: all,单击list按钮,用鼠标托动所有端口移至右边的波形仿真窗口。编辑输入波形,设置总线数据格式,仿真器参数设置,最后启动仿真器观察仿真结果。 (9) 应用RTL电路图观察器可以看到工程的硬件电路图
2.3 硬件描述语言VHDL
VHDL的英文全名是VHSIC(Very High Speed Integrated CircuitHardware Description Language),于1983年由美国国防部(DOD)发起创建,由IEEE(The Institute of Electrical and Engineers)进一步发展,并在1987年作为“IEEE标准1076”发布。从此,VHDL成为硬件描述语言的业界标准之一。此后VHDL在电子设计领域得到了广泛应用,并逐步取代了原有的非标准硬件描述语言。
VHDL作为一个规范语言和建模语言,随着它的标准化,出现了一些支持该语言的行为仿真器。到了20世纪90年代初,人们发现,VHDL不仅可以作为系统模拟的建模工具,而且可以作为电路系统的设计工具;可以利用软件工具将VHDL源码自动地转化为文本方式表达的基本逻辑元件连接图,即网表文件。这种方法显然对于电路设计是一个极大的推动。很快,电子设计领域出现了第一个软件设计工具,即VHDL逻辑综合器,它可以标准地将VHDL的部分语句描述转化为具体电路实现的网表文件。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展了VHDL的内容,公布了新版的VHDL,即IEEE标准的1076-1993版本。现在,VHDL和Vetilog作为IEEE的工业标准硬件描述语言,得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。现在公布的最新VHDL标准版本是IEEE1076-2002[7]。
1. VHDL的特点
9
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
VHDL是一种面向设计的多领域、多层次的IEEE标准硬件描述语言,是目前十分流行的硬件描述工具,并且被大多数EDA工具支持,其特点是[8]: (一)技术齐全,方法灵活,支持广泛,如支持自顶向下(top down)和基于库(library-based)的设计方法等,早在1987年就已作为IEEE的标准;
(二)系统硬件描述能力强,具有多层次描述系统硬件的能力,可以从系统的数学模型直到门级电路,并且高层次的行为描述可以与低层次的RTL描述、门级描述混合使用;
(三)可以实现与工艺无关的编程,工艺更新时,无需修改原设计,只要改变相应的工艺映射工具即可;
(四) VHDL语言标准规范,易于移植、共享和重用。 2.利用VHDL语言的优点
VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。应用VHDL进行工程设计的优点是多方面的[9]。
⑴ 与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
⑵ VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
⑶ VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
⑷ 对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
⑸ VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计
3.利用VHDL语言来描述时钟脉冲的变化
在QUARTUS II中编写程序时最重要的是进程的编写,而进程的触发常选用一个时钟脉冲作为判断标准。
PROCESS ( CLK )
如果时钟脉冲突然发生变化,即在它的上升沿或下降沿来临时,进程就会启动,此时进程中的程序才会执行。对于时钟脉冲是上升沿或是下降沿,这一点可
10
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
以通过使用时钟信号的属性描述达到。也就是说,要指定时钟的值是从“0”到“1”变化。
(1) 时钟脉冲上升沿描述
时钟脉冲上升沿波形与时钟信号属性描述关系如图4所示。从图4中可以看到,时钟信号的起始电平值为“0” ,当上升沿到来时,表示发生了一个时钟事件,故用CLK’EVENT描述;上升沿之后,时钟信号电平维持高电平,故当前值描述为CLK=’1’。这样,表示上升沿到来的条件可写为:
If (clk’event and clk=’1’)
(2) 时钟脉冲下降沿描述
时钟脉冲下降沿波形与时钟信号属性描述关系如图5所示,其关系与图4类同。一开始时钟信号值为“1”,当下降沿到来时,事件发生,描述为clk’event;下降沿结束之后时钟信号维持为低电平,描述为clk=’0’。这样,下降沿到来的条件可写为:
If (clk’event and clk=’0’)
clk’event clk=’1’ clk=’1’ clk’event clk=’0’ CLK clk clk=’0’ 图4时钟脉冲上升沿波形与时钟信号属性描述的关系 图5时钟脉冲下降沿波形与时钟信号属性描述的关系
11
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
3 时序逻辑电路基于VHDL的设计实例
3.1 同步计数器的设计与实现
数字系统经常需要对脉冲的个数进行计数,以实现数字测量、状态控制和数据运算等,计数器就是完成这一功能的逻辑器件。计数器是数字系统的一种基本部件,是典型的时序电路。计数器的应用十分广泛,常用于数/模转换、计时、频率测量等,几乎每一种数字设备中都有计数器。
根据计数脉冲引入方式不同,计数器可分为同步计数器和异步计数器两大类。根据计数器在计数过程中数字的增减趋势,又分为加法计数器、减法计数器及可逆计数器。根据计数器计数摸值(数制)不同,计数器又可分为二进制计数器和非二进制计数器。以下就同步计数器的设计举例来说明。
1.四位二进制同步加法计数器的分析
四位二进制同步加法计数器具有的不同状态数为16个,即从0000到1111,每输入16个计数脉冲计数器工作一个循环,每当计数到1111时,下一时刻就会归零,只有此时的进位为1。
计数器中能计到的最大数称为计数的容量,它等于计数器所有各位全为1时的数值。n位二进制计数器的容量等于2-1。
也就是说,四位二进制同步加法计数器等同于一个16进制计数器。下图就是一个四位二进制计数器的状态转换图。
n
图6 电路的状态转换图
12
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
表2 电路的状态转换表
计数 顺序 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 电路状态 Q0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 等效 Q3 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 进位 输出C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 Q1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 Q2 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 十进制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 2. 四位二进制同步加法计数器的数字逻辑设计 图7所示电路是4位二进制同步加法计数器
因为每个状态有四位,故需选用四个触发器,每个触发器的输出都是状态中的一位。本文给出的是用JK触发器进行的设计。因为重点讨论的是基于QUARTUS II的设计,故这里对数字电路的设计过程不做详细说明。
由图可见,各触发器的驱动方程为 T0=1 T1=Q0
T2=Q0Q1 T3=Q0Q1Q2
将上式代入T触发器的特性方程式得到电路的状态方程 Q0n?1=Q0
Q1n?1=Q0Q1+Q0Q1
Q2n?1=Q0Q1Q2+Q0Q1Q2
13
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
Q3n?1=Q0Q1Q2Q3+Q0Q1Q2Q3
图7 4位二进制同步加法计数器
3. 四位二进制同步加法计数器的VHDL的实现
从状态图可以看出,计数器设计的核心是在时钟脉冲CLK的上升沿到来时触发进程,电路的次态就会在现态的基础上实施加1的操作。注意用VHDL语言实行赋值操作要选用<=符号。
process(clk) begin
if clk'event and clk='1' then --------上升沿到来,进程触发 q1<=q1+1; -------------程序设计的核心 end if ; end process;
同理如果要设计的是减法计数器,只需将程序设计的核心句改为:
q1<=q1-1;
对于整个程序而言,一个同步计数器应具有的两个基本引脚位:
同步脉冲输入端:clk: in std_logic;
14
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
4位的数据输出端:q:out std_logic_vector(3 downto 0);
与上面的数字电路设计方式比较起来,同步计数器用VHDL设计比用原理图方式输入一组寄存器更加方便,这也从某种程度体现了用VHDL进行设计的优势。以下是此设计的整个程序。
library ieee ;
use ieee.std_logic_1164.all ; use ieee.std_logic_unsigned.all; entity cnt4 is
port (clk:in std_logic;q:out std_logic_vector(3 downto 0)); end ;
architecture bhv of cnt4 is
signal q1:std_logic_vector(3 downto 0); begin process(clk) begin
if clk'event and clk='1' then q1<=q1+1; end if ; end process; q<=q1; end bhv ; 4. 软件仿真
图8 同步4位二进制计数器的仿真结果
15
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
这个程序中只需对输入信号CLK进行设定单击选中clk,在左方选择真后输出Q的结果
按钮,
弹出对话框,选择周期,可设定为20 ns,单击OK按钮。然后进行仿真,检查仿
从以上仿真结果可以看出,在CLK的上升沿每次到来时,输出便会在原先的基础上加1,满足加法计数器的要求,故此设计成功。
3.2 移位寄存器的设计与实现
移位寄存器除了具有存储代码的功能外,还具有移位功能。所谓移位功能,是指寄存器里存储的代码能在移位脉冲的作用下依次左移或右移。因此,移位寄存器不单可以用来寄存代码,还可以用来实现串行-并行转换,数值的运算以及数据处理等。
1. 4位左移寄存器的数字逻辑设计
图9所示的电路图是由边沿触发结构的D触发器组成的4位移位寄存器,其中第一个触发器FF0的输入端接受输入信号,其余的每个触发器输入端均与前面触发器的Q端相连。
并Q0串行输入行Q1DSET输Q2DSET出Q3DSETD1DSETQQQQD0串行输出ClCLRClQCLRClQCLRClQCLRQ移位脉冲cpFF0FF1FF2FF3
图9 用D触发器构成的移位寄存器
因为从CP上升沿到达开始到输出端新状态的建立需要经过一段传输延迟时间,所以当CP的上升沿同时作用于所有的触发器时,它们输入端的状态还没有改变。于是FF1按Q0原来的状态翻转,FF2按Q1原来的状态翻转,FF3按Q2原来的状态翻转。同时,加到寄存器输入端D1的代码存入FF0。总的效果相当于移位寄存器里原有的代码依次右移了一位。
例如,在4个时钟周期内输入代码为10110 (从右到左输入),而移位寄存器的初始状态为Q0Q1Q2Q3=0000,那么在移位脉冲的作用下,移位寄存器里代码的移动情况如下表3所示。
16
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
表3 移位寄存器中代码的移动状况
CP的 顺序 0 1 2 3 4 输入 D1 Q0 Q1 Q2 Q3 0 1 1 0 1 0 1 1 0 1 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 可以看到经过4个CP信号以后,串行输入的4位代码全部移入了移位寄存器中,同时,在4个触发器的输出端得到了并行输出的代码。因此,利用移位寄存器可以实现串行-并行转换。
2. 4位右移寄存器的VHDL的实现
从表3可以看出,一个右移的4位移位寄存器,在每一次时钟的上升沿来临时,输出端的最低位总是和输入端相同,而高三位就是低三位右移后的状态。
设定时钟脉冲CLK,程序中的进程如下: PROCESS(clk) BEGIN
IF clk'event AND clk='1' THEN FOR I IN 3 DOWNTO 1 LOOP
Q(I)<=Q(I-1); --------程序核心,右移 END LOOP; Q(0)<=din;
同理如果需要设计的是左移的移位寄存器,在每一次时钟上升沿来临时,输出端的最高位总是和输入端相同,而低三位就是高三位左移后的转态。
PROCESS(clk) BEGIN
IF clk'event AND clk='1' THEN FOR I IN 2 DOWNTO 0 LOOP
Q(I)<=Q(I+1); --------程序核心,左移 END LOOP;
17
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
Q(3)<=din;
对于整个程序而言,一个4位左移寄存器应具有的三个基本引脚位:
同步脉冲输入端:clk: in std_logic; 数据输入端:din: IN STD_LOGIC;
数据输出端:dout : OUT STD_LOGIC;---就是左移后的最高位 以下是此设计的整个程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY shift1 IS
PORT( clk,din: IN STD_LOGIC;
dout : OUT STD_LOGIC);
END shift1;
ARCHITECTURE a OF shift1 IS
SIGNAL Q: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(clk) BEGIN
IF clk'event AND clk='1' THEN FOR I IN 3 DOWNTO 1 LOOP Q(I)<=Q(I-1); END LOOP; Q(0)<=din; END IF; END PROCESS; dout<=Q(0); END a; 3. 软件仿真
这个程序中需对输入信号CLK和DIN进行设定。单击选中clk,在左方选择按钮,弹出对话框,选择周期,可设定为20 ns,单击OK按钮。对于DIN,将其设定为预先分析时选用的数据01101.然后进行仿真,检查仿真后输出DOUT的结果。
18
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
图10 4位右移寄存器的仿真结果
由于DOUT在程序编写时设定的是左移后的最高位,故应该与输入信号保持同步。由仿真的结果可以看出,每次时钟上升沿来临后,输出DOUT与输入相同,只是输出有一定的延时。但整体DOUT与DIN的整体走势依然相同,故此设计成功。
3.3 序列信号发生器的设计与实现
在数字信号的传输和数字系统的测试中,有时需要用到一组特定的串行数字信号。通常把这种串行数字信号叫做序列信号。产生序列信号的电路称为序列信号发生器。
1. 序列信号发生器的数字逻辑设计
序列信号发生器的构成方法有多种,一种比较简单,直观的方法是用计数器和数据选择器组成。
图11 用计数器和数据选择器组成的序列信号发生器
序列信号发生器通常用于通信编码电路中,例如设计一个能产生00010111的序列信号的发生器[7] 可用一个八进制计数器和一个8选1数据选择器组成,如图11所示。
19
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
当CP信号连续不断的加到计数器上时,Q2Q1Q0的状态便按表4的顺序不断循环。D0-D7的状态就不断的依次出现在Y端。只要令D0=D1=D2=D4=1,
D3=D5=D6=D7=0,便可在Y端得到不断循环的序列信号00010111。只要修改加
到D0-D7的高低电平即可改变序列信号,而不需要对电路结构做任何更动。
表4 电路的状态转换表
CP Q2 Q1 Q0 (A2 A1 A0) Y 0 1 2 3 4 5 6 7 8 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 0 0 0 D0(0) D1(0) D2(0) D3(1) D4(0) D5(1) D6(1) D7(1) D0(0) 为了产生8位串行序列信号,序列信号发生器应具有8种状态。3位二进制可产生八种状态。这8中状态由分析序列得到如下。
图12 序列分析图
20
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
每种状态产生时,将其最高位作为输出信号,则可以得到连续的序列信号。故可得到如下的状态转换图:
图13 状态转换图
2. 序列信号发生器的VHDL的实现
从状态图可以看出,序列信号发生器(00010111)设计的核心是在时钟脉冲CLK的上升沿到来时触发进程,电路的次态代替现态,输出为次态的最高位。
进程设计如下:
定义了一个复位信号RESET,在它保持高电平有效转态时,所有状态归零。 PROCESS(CLK) BEGIN
IF (CLK'EVENT AND CLK='1')THEN IF (RESET='1') THEN Q_S<=\ ELSE
CASE Q_S IS ---------程序设计核心,用CASE语句进行状态赋值操作 WHEN\ -----若此时Q-S的状态为000,在CLK上升
沿到来时对Q-S赋值001
WHEN\WHEN\WHEN\WHEN\WHEN\WHEN\WHEN\WHEN OTHERS=>Q_S<=\
21
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
END CASE; END IF;
一个序列信号发生器应具有三个引脚位:
输入端复位健:RESET : IN STD_LOGIC; 脉冲输入端CLK : IN STD_LOGIC; 输出端:Q8_OUT : OUT STD_LOGIC; 以下是此设计的整个程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY Q8 IS
PORT ( CLK,RESET : IN STD_LOGIC;
Q8_OUT : OUT STD_LOGIC );
END Q8;
ARCHITECTURE RTL OF Q8 IS
SIGNAL Q_S :STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN
Q8_OUT <=Q_S(2); ------输出为状态的最高位 PROCESS(CLK) BEGIN
IF (CLK'EVENT AND CLK='1')THEN IF (RESET='1') THEN Q_S<=\ ELSE CASE Q_S IS
WHEN\WHEN\WHEN\WHEN\WHEN\WHEN\WHEN\WHEN\
22
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
WHEN OTHERS=>Q_S<=\ END CASE; END IF; END IF; END PROCESS; END RTL;
3. 序列信号发生器的仿真
对输入信号CLK进行设定单击选中clk,在左方选择
按钮,弹出对话框,
选择周期,可设定为20 ns,单击OK按钮。对于RESET,主要让其保持低电平无效状态。然后进行仿真,检查仿真后输出Q8_OUT 的结果。
图13 序列信号发生器的仿真结果
由仿真图可以看出,在RESET无效期间,输出Q8_OUT为:00010111,完全符合设计,此设计成功。
23
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
结 论
本文在EDA软件Quartus II平台下用VHDL 语言进行时序逻辑电路设计,并用设计实例(四位二进制同步计数器,移位寄存器,序列信号发生器)阐述了设计过程。设计过程中充分发挥了VHDL语言编程效率高的特点以及QUARTUS II软件的优势,使得时序逻辑电路的设计变得简便快捷。实践证明,Quartus II软件是一个功能强大的EDA工具,它提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC)的设计综合环境和开发的基本设计工具并为DSP开发包进行系统模型设计提供了集成综合环境。在该软件平台上用VHDL语言进行数字电路设计方便灵巧,其模块化设计可读性强,易于共享、复用。
24
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
参考文献
[1] 阎石.字电路技术基础[M].北京:高等教育出版社[M],1998 ,132-159,224-270 [2] 刘必虎,沈建国.数字逻辑电路[M].北京:科学出版社,1999.8
[3] 王毓银.数字电路逻辑设计[M].北京:高等教育出版社,1999,106-149,178-240 [4] 谢自美.电子线路设计.试验.测试[M].武汉:华中科技大学出版时,2000.7 [5]康华光.电子技术基础数字部分[M].北京:高等教育出版社 2000
[6] 潘松,黄继.EDA技术与VHDL[M].北京:清华大学出版社.2005.7,1-27,71-171,269-350,409-430
[7] 侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,2004
[8] 金凤莲.VHDL语言在EDA仿真中的应用[J].现代电子技术,2005,(No.6):115 [9] 樊国梁.VHDL语言设计数字电路[J].软件应用,2005,(No.2):46~48 [10]徐君国,刘高平.等,现代数字系统设计[M]. 西安:西安电子科技大学出版社,2004,1-17,53-168,323-324
25
淮北师范大学2011届学士毕业论文 基于VHDL的时序逻辑电路设计
致 谢
通过这一阶段的努力,我的毕业论文《基于VHDL的时序逻辑电路设计》终于完成了。本论文是在导师姜恩华硕士的悉心指导和热情关怀下完成的。感谢姜恩华导师对我的热心帮助,他的治学严谨、勤奋务实的工作态度和深厚的学术造诣令我深表敬佩, 值此论文完成之际,再次向姜恩华老师表示我衷心的感谢和深深的敬意!
同时我还要感谢在我学习期间给我极大关心和支持的各位老师以及关心我的同学和朋友。写作毕业论文是一次再系统学习的过程,毕业论文的完成,同样也意味着新的学习生活的开始。我将铭记我曾是一名淮北师范大学的学子,在今后的工作中把淮北师范大学的优良传统发扬光大。
感谢各位评委老师的批评指导!
26
正在阅读:
基于FPGA的时序逻辑电路设计04-21
上海的夜晚作文500字07-15
witness基本操作11-15
基于LPC2124的直流电机调速系统12-27
民国时期警察与保甲之间的关系研究06-05
浅谈如何转化后进生02-27
部编版三年级语文下册全册一课一练09-23
2014-2015人教版小学六年级上册数学期末测试题及答案解析10-07
用战无不胜怎么造句02-09
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 时序
- 电路设计
- 逻辑
- 基于
- FPGA
- 小学生表彰大会主持词
- 实验一工业弹簧管压力表的校验2003
- 国际贸易理论与实务 考试资料学习笔记
- 临床输血技术规范培训复习题
- 常用珠宝文案,描写钻石的句子
- 在Windows 10 中真正能调用kx3552 64位驱动中ASIO的安装方法
- 2010考研英语(二)真题及答案解析
- 雅思阅读机经真题解析-The History of Automobiles
- 2016年咨询工程师继续教育考试BIM考题
- 《忠诚与背叛》观后感
- 新视野大学英语第一册Unit 2教案
- CvvImage类以及在MFC中显示IplImage图像的方法
- 辐照灭菌委托加工协议
- 思修课的收获与感悟--谭雯莉
- 总简要面试名单
- 会计英语课本翻译
- 微分几何练习题库及答案
- 全市办税服务厅管理制度汇总--(试行稿)
- 太能净空气净化器品牌推广策划方案
- 楷书的主笔规律与结构规律 - 图文