EDA总结知识点:
第一章
1.1.1EDA的定义: 是电子设计自动化(Electrion Design Automation)的缩写,是90年代初,从计算机计算机辅助设计CAD,计算机辅助制造CAM,计算机辅助测试CAT和计算机辅助工程(CAE)的概念发展起来的。
狭义EDA和广义EDA,本书我们主要研究的是狭义的EDA。
狭义EDA:以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真等等一系列的工作,最终形成集成电子系统或专用集成芯片的新技术。也称为:IES/ASIC自动设计技术。
广义的EDA:包括狭义的EDA,还包括计算机辅助分析CAA技术(PSPICE, EWB,MATLAB),印刷电路版计算机辅助设计pcb-cad技术(例如:protel,orcad),因为广义的EDA技术中,CAA技术和pcb-cad技术不具备逻辑综合和逻辑适配等功能,因此我们不能称之为真正意义上的EDA技术,称为现代电子设计技术更好。
利用EDA技术进行电子系统的设计,具有以下特点:
(1)用软件的方式设计硬件
(2)用软件方式设计的系统到硬件系统的转换是由有关的开发软件完成
(3)设计过程中可用有关软件进行各种仿真;
(4)系统可现场编程,在线升级;
(5)整个系统可集成在一个芯片上,体积小、功耗低、可靠性高;
EDA技术进入21世纪后得到了更大的发展,主要表现在:
1)使得电子设计成果以自主知识产权的方式得以明确表达和确认成为可能;
2)在仿真和设计两个方面支持标准语言的功能强大的EDA软件不断推出;
3)电子技术领域全方位融入EDA领域,例如:软件无线电的迅速崛起,模拟电路系统硬件描述语言的表达和设计的标准化,系统可编程模拟器件的出现等
4)电子领域各学科的界限更加模糊,互为包容:模拟与数字,软件与硬件、系统与器件、ASIC与FPGA、行为与结构等。
5)更大规模的FPGA/CPLD器件的不断推出;
6)用于ASIC设计的标准单元的推出,该标准单元已涵盖大规模电子系统以及复杂IP模块(硬件设计包)。
7)软硬件IP核在电子行业的产业领域得到进一步的确认。
8)soc高效低成本设计技术的成熟;
9)系统级行为验证硬件描述语言的出现,使得复杂电子系统的设计和验证变简单。
10)在FPGA上实现DSP的应用;
11)嵌入式处理器软核的成熟;
1、3 硬件描述语言:主要包括:VHDL
Verilog HDL
System Verilog
System C
VHDl语言具有很强的电路描述和建模能力
VHDl语言具有与具体硬件电路无关和与设计平台无关的优点
主要的描述设计方法:
1)自顶向下
2)自底向上
3)混合方法。
综合器在接受VHDL程序并准备对其综合前,必须获得与最终实现设计电路硬件特征相关的工艺库的信息,以及获得优化综合的约束条件。主要的约束条件有:
设计规则
时间约束
面积约束
通常我们要求时间约束的优先级高于面积约束。
本图可能出简答题:
传统的电子设计方法主要采用手工设计,主要缺点:
1)复杂电路的设计调试困难
2)查找和修改错误不便
3)不易管理设计过程中的大量文档
4)设计实现过程与具体的生产工艺直接相关,可移植性差;
5)只有设计出样机和‘生产出芯片才可以实测
EDA技术的优点:
1)采用硬件描述语言作为设计输入,具有保证设计过程中的正确性,可以降低设计成本,缩短设计周期。
2)库的引入
3)设计文档的管理
4)强大的系统建模、电路仿真功能。
5)具有自主知识产权
6)开发技术的标准化
6)开发技术的标准化,规范化和IP核的可重用性。设计语言的标准化,不会由于设计对象的不同而改变;EDA软件平台支持任何标准化的设计语言;设计成果的通用性,良好的可移植性和可测性。
7)适用于高效率大规模系统设计的自顶向下设计方案
8)全方位利用计算机自动设计仿真和测试
9)对于设计者的硬件知识和硬件经验要求较低
10)与以CPU为主的电路系统相比较,EDA技术具有更好的高速性能。
11)纯硬件系统的高可靠性
1.7 EDA设计流程
图形输入通常包括原理图输入、状态图输入和波形图输入三种常用方法。
适配所选定的目标器件(FPGA/CPLD芯片)必须属于原综合器指定的目标器件系列。通常,EDA软件中的综合器可由专业的第三方EDA公司提供,而适配器则需由PPGA/CPLD供应商提供。因为适配器的适配对象直接与器件的结构细节相对应。
时序仿真的仿真文件必须来自针对具体器件的综合器与适配器。
功能仿真过程不涉及任何具体器件的硬件特性
FPGA与CPLD的辨别和分类主要是根据其结构特点和工作原理。通常的分类方法是:
(1)以乘积项结构方式构成逻辑行为的器件称为CPLD,如LATTICE ISPLSI的系列、XILINX的XC9500系列、ALTERA的MAX7000S系列和LATTICE的MACH系列等。
以查表法结构方式构成逻辑行为器件称为FPGA,XILINX的SPARTAN、ALTERA的FLEX10K、ACEXIK或CYCLONE系列等。
EDA工具大致可以分为如下五个模块:设计输入编辑器。HDL综合器。仿真器。适配器(或布局布线器)。下载器。
IP:知识产权核或者知识产权模块。
IP分为软IP,固IP和硬IP
软IP--用VHDL等硬件描述语言描述的功能块,但是并不涉及用什么具体电路元件实现这些功能。
固IP--完成了综合的功能块。
硬IP--供设计的最终阶段产品--掩膜
第二章
可编程逻辑器件 (PLD-programmable Logic devices) :是一
种由用户编程以实现某种逻辑功能的新型逻辑器件。
PLD经历了从PROM,PLA,PAL,GAL,FPGA,ispLSI的过程。
Xilinx公司1985年推出了第一块现场可编程门阵列器件,最初3个完整的系列产品被命名为XC2000,XC3000和XC4000 XC5000,XC6200和XC8100,而后又推出了spartan和virture系列。Xilinx还有3种EPLD:XC7200,XC7300和XC9500
Lattice成立于1983年,为EEPROM的创立者,发明了GAL器件,是低密度PLD的最大供应商。20世纪90年代推出了ispLSI器件,实现了在系统可编程技术(ISP),有6个系列:ispLSI1000、2000、3000、5000、6000和8000系列
Xilinx:SRAM工艺 叫FPGA; FLASH工艺叫CPLD; ALTERA: MAX(基于EEROM), FLEX/APEX/ACEX /STRATIX 系列 (基于SRAM)均叫PLD。
Sram:大部分FPGA器件都采用此种编程工艺。该编程方式在编程速度快,编程要求上优越,但是编程信息存在RAM中后,掉电后信息丢失,再次上电需要再次配置,因而需要专门的器件来完成配置工作。
GAL,PLA,PAL,PMROM区别:PROM只能用于组合逻辑电路的可编程,;PLA的与或阵列均可编程,因此使得器件的运行速度下降;可编程PAL器件,主要区别是或阵列固定,只有与阵列可编程;GAL的输出部分增加了输出逻辑宏单元OLMC。
.逻辑阵列块LAB:
一个LAB由16个宏单元组成。Max7000结构主要是由多个LAB组成的阵列以及它们之间的连线构成。多个LAB通过可编程连线阵PIA和全局信号连接在一起,全局总线从所有的专用输入、I/O引脚和宏单元馈入信号。
CPLD(Complex Programmable Logic Device)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。
FPGA(Field-Programmable Gate Array),即现场可编程门阵列它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
以下是了解内容:①CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。
②CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。
③在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。
④FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。
⑤CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。
⑥CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。
⑦在编程方式上,CPLD主要是基于E2PROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编 程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其 优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。
⑧CPLD保密性好,FPGA保密性差。
⑨一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。
FPGA,使用了另一种可编程逻辑的形成方法,即可编程的查找表(Look Up Table,LUT)结构, LUT是可编程的最小逻辑构成单元。大部分FPGA采用基于SRAM(静态随机存储器)的查找表逻辑形成结构,就是用SRAM来构成逻辑函数发生器。
JTAG:JTAG是英文“Joint Test Action Group(联合测试行为组织)”的词头字母的简写,该组织成立于1985 年,是由几家主要的电子制造商发起制订的PCB 和IC 测试标准。JTAG 主要应用于:电路的边界扫描测试和可编程芯片的在线系统编程。
Lattice公司CPLD器件系列ispLSI器件系列ispLSI1000E系列pLSI2000E/2000VL/200VE系列ispLSI5000V系列 ispLSI 8000/8000V系列
- . Xilinx公司的FPGA和CPLD器件系列 Virtex-4系列FPGA . 面向逻辑密集的设计:Virtex-4 LX面向高性能信号处理应用:Virtex-4 SX面向高速串行连接和嵌入式处理应用:Virtex-4 FX,XC9500系列CPLD .. Xilinx FPGA配置器件SPROM,SpartanⅡ器件系列
Altera公司FPGA和CPLD器件系列1. Stratix II 系列FPGA 2. Stratix系列FPGA 3. ACEX系列FPGA 4. FLEX系列FPGA 5. MAX系列CPLD 6. Cyclone系列FPGA低成本FPGA 7. Cyclone II系列FPGA 8. Altera宏功能块及IP核
上年考试内容:
第三章:器件特点与选择
Stratix高端FPGA系列
—————————— |
—————————— |
Cyclone系列器件的结构与原理
补充知识:
1、DPA电路:在FPGA中,动态相位调整(DPA)主要是实现LVDS接口接收时对时钟和数据通道的相位补偿,以达到正确接收的目的。ALTERA的高端FPGA,如STRATIX(r) 系列中自带有DPA电路,但低端的FPGA,如CYCLONE(r)系列中是没有的。在LVDS输入接收时,时钟和数据的相位可能是不确定的,因此我们需要将时钟的相位作出调整,使得时钟能稳定的采集到输入数据。工作的核心就是用锁相环PLL的相位调整功能,产生若干个时钟的不同相位,看哪些相位能准确的采集到输入数据,然后取窗口中间的一个时钟相位,作为正常工作时的采样时钟。比如通过PLL产生0,45,90,135,……,315度8个相移的时钟,如果0,45,90度相移的时钟能正确采样到输入,那么最后选取中间相位,即45度的时钟作为采样时钟。这样接口上具有最大的时序裕量,从而保证链路的可靠性。2、HT技术: HyperTransport是AMD在1999年提出的一种总线技术,随着AMD64位平台的发布和推广,HyperTransport应用越来越广泛,也越来越被人们所熟知。
3、电平TTL与LVDS的区别:
(1). TTL是单端电平标准;LVDS是差分电平标准;(2). TTL接口受到其摆幅、功耗的限制,应用场合是速度较低,很少见到TTL有应用于200MHz以上的场景;LVDS摆幅小,信号跳变快,恒流源式结构决定其功耗随操作频率变化不明显,且差分信号的噪声容限更大,因此LVDS更适合于高速应用(1.5GHz甚至更高);
4、HSTL电平 HSTL(High Speed Transceiver Logic)是由JEDEC(Joint Electron Device Engineering Council,属于电子工业协会EIA)在1995年正式制定的一种电路逻辑标准。
常用的电平标准有TTL:5v、CMOS:5V、LVTTL:3,3V和2,5V、LVCMOS:3,3V、ECL:0V、PECL:5V、LVPECL:3,3V、RS232±12-15V、RS485等,还有一些速度比较高的LVDS、GTL:1,2V、PGTL:1,5V、CML是内部做好匹配的一种电路,不需再进行匹配。、HSTL、SSTL等。
- 存储单元的介绍
(1)RLDRAM II( 缩短读潜伏时间的动态随机存取器)
(2)DDR2 SDRAM(第二代双倍率同步动态随机存取器)
(3)QDRII SRAM 四位数据率静态随机存取存储器
CPLD编程下载连接图
第七章LPM:7位地址位宽深度为128(2的7次方),当数据位宽为8时指定单元的取值范围为128*8(=1024个单元)。
第三章VHDL设计初步
1、标识符(mux21a,one,a,b,)和关键字(IN,ELSE,END)不区分大小写。
2、调用底层文件必须放在同一个文件夹中。
U:未初始化;X:强未知;Z:高阻态;W:弱未知;
L:弱逻辑0; H:弱逻辑1;-:忽略
选择的条件值不能完全覆盖case语句中的表达式的值,最后最末一个条件语句用关键词others来表示,otehrs只能出现一次,必须在最后;使用others避免综合器插入不必要的锁存器;
- 并置操作符&主要是将操作数或者是数组组合起来形成新的数组。例如”AB”&”CD”就表示“ABCD”;‘0’&’1’&’1’的结果是“011”因此我们可以利用&来组成新的数组,可以将一个单元素并置于一个数的左端或者右端形成更长的数组;或者将两个数组并置成一个新的数组;
完整的条件语句只能构成组合逻辑电路;
利用不完整的条件语句的描述引进寄存器元件,从而构成时序电路的方式是vhdl描述时序电路最重要的途径。
4位二进制加法计数器设计
异步复位同步加载及时钟使能十进制加法计数器:
第五章 VHDL设计进阶
- 变量的赋值符号是:=
- 注意在进程和子程序的顺序语句中不允许定义信号。进程中可以将信号列入敏感信号表,而不能将变量列入敏感信号表;信号的赋值语句:目标信号名<=表达式;目标信号获得的新的数据不是即时的,与变量不同。有一个特定的延时。
- 信号与变量的区别主要表现在接受与保持信号的方式和信息保持与传递的区域大小
- 1)信号可以设置传输延时量,而变量不可以
- 2)变量作为局部信息载体,只能在所定义进程中有效;信号可作为模块间信息载体
- 3)变量的设置有时候只是过渡,最后的信息传输和通信还是依靠信号;
- 5.2.1 含同步并行预置功能的8位移位寄存器设计
位矢中‘1’码个数统计电路设计
三态门的设计
Z在综合时属于一个不确定的值,不同的综合器可能会给出不同的结果;Z必须大写,这是因为在IEEE库中对数据类型STD_LOGIC的预定义已经将高阻态确定为大写‘Z’。
3-8线译码器(要求会写)
【例5-20】
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY coder IS
PORT ( din : IN STD_LOGIC_VECTOR(0 TO 7);
output : OUT STD_LOGIC_VECTOR(0 TO 2) );
END coder;
ARCHITECTURE behav OF coder IS
SIGNAL SINT : STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
PROCESS (din)
BEGIN
IF (din(7)='0') THEN output <= "000" ;
ELSIF (din(6)='0') THEN output <= "100" ;
ELSIF (din(5)='0') THEN output <= "010" ;
ELSIF (din(4)='0') THEN output <= "110" ;
ELSIF (din(3)='0') THEN output <= "001" ;
ELSIF (din(2)='0') THEN output <= "101" ;
ELSIF (din(1)='0') THEN output <= "011" ;
ELSE output <= "111" ;
END IF ;
END PROCESS ;
END behav;
分频器只看偶分频。
第九章VHDL结构与要素
端口名是设计者为实体的每一个对外通道所取的名字,端口模式是指这些通道上的数据流动方式。数据类型是指端口上流动的数据的表达格式或取值类型,VHDL要求只有相同数据类型的端口信号和操作数才能相互作用。
函数的语言表达格式如下:
FUNCTION 函数名(参数表) RETURN 数据类型; --函数首
FUNCTION 函数名(参数表) RETURN 数据类型IS --函数体开始
- [说明部分;]
- BEGIN
- 顺序语句;
- END FUNCTION 函数名; --函数体结束
调用程序包:
- USE 库名.程序包名.项目名;
- USE 库名.程序包名.ALL;
- 第一语句格式的作用是,向本设计实体开放指定库中的特定程序包内所选定的项目。第二语句格式的作用是,向本设计实体开放指定库中的特定程序包内所有的内容。
- 定义程序包的一般语句结构如下:
- --程序包首
- PACKAGE 程序包名 IS --程序包首开始
- 程序包首说明部分;
- END [PACKAGE][程序包名]; --程序包首结束
- --程序包体
- PACKAGE BODY 程序包名 IS --程序包体开始
- 程序包体说明部分以及包体内容;
- END [PACKAGE BODY][程序包名]; --程序包体结束
常用的四种库:1、 IEEE库2、 STD库3、 WORK库4、 VITAL库
数码管的写法:
常用的预定义程序包:1) STD_LOGIC_1164程序包2) STD_LOGIC_ARITH程序包3) STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包4) STANDARD和TEXTIO程序包
文字规则:
字符是用单引号引起来的ASCII字符,可以是数值,也可以是符号或字母,如:‘R’,‘A’,‘*’,‘Z’。而字符串则是一维的字符数组,须放在双引号中。VHDL中有两种类型的字符串:文字字符串和数位字符串。
X:十六进制基数符号(0~F) O:八进制基数符号
data1 <= B"1_1101_1110" -- 二进制数数组,位矢数组长度是9
data2 <= O"15" -- 八进制数数组,位矢数组长度是6
data3 <= X"AD0" -- 十六进制数数组,位矢数组长度是12
data4 <= B"101_010_101_010" -- 二进制数数组,位矢数组长度是12
data5 <= "101_010_101_010" --表达错误,缺B。
data6 <= "0AD0" --表达错误,缺X。
VHDL的基本标识符就是以英文字母开头,不连续使用下划线“_”,不以下划线“_”结尾的,由26个大小写英文字母、数字0~9以及下划线“_”组成的字符串。
合法的标识符:Decoder_1 , FFT , Sig_N , Not_Ack , State0 , Idle
字符类型通常用单引号引起来,如‘A’。字符类型区分大小写,如‘B’不同于‘b’。字符类型已在STANDARD程序包中作了定义。
时间只用于仿真不用于综合。
第十章:VHDL基本语句
CASE sel IS
WHEN 0 => z1<='1' ; -- 当sel=0时选中
WHEN 1½3 => z2<='1' ; -- 当sel为1或3时选中
WHEN 4 To 7½2 => z3<='1'; -- 当sel为2、4、5、6或7时选中
WHEN OTHERS => z4<='1' ; -- 当sel为8~15中任一值时选中
END CASE ;
变量赋值符号:“:=”,信号赋值符号:“<=”.
PACKAGE data_types IS -- 定义程序包
SUBTYPE data_element IS INTEGER RANGE 0 TO 3 ;-- 定义数据类型
TYPE data_array IS ARRAY (1 TO 3) OF data_element;
END data_types;
USE WORK.data_types.ALL; --打开以上建立在当前工作库的程序包data_types
ENTITY sort IS
PORT ( in_array : IN data_array ;
out_array : OUT data_array);
END sort;
ARCHITECTURE exmp OF sort IS
BEGIN
PROCESS (in_array) -- 进程开始,设data_types为敏感信号
PROCEDURE swap(data : INOUT data_array;
-- swap的形参名为data、low、high
low, high : IN INTEGER ) IS
VARIABLE temp : data_element ;
BEGIN -- 开始描述本过程的逻辑功能
IF (data(low) > data(high)) THEN -- 检测数据
temp := data(low) ;
data(low) := data(high);
data(high) := temp ;
END IF ;
END swap ; -- 过程swap定义结束
VARIABLE my_array : data_array ; -- 在本进程中定义变量my_array
BEGIN -- 进程开始
my_array := in_array ; -- 将输入值读入变量
swap(my_array, 1, 2);
-- my_array、1、2是对应于data、low、high的实参
swap(my_array, 2, 3); -- 位置关联法调用, 第2、第3元素交换
swap(my_array, 1, 2); -- 位置关联法调用, 第1、第2元素再次交换
out_array <= my_array ;
END Process ;
END exmp ;
要求会写程序:序列检测器,7位数码管,3-8线译码器,选择器(4选1或8选1),减法器,会真值表,奇偶校验程序,双向分频器(极分频不考),计数器。
生成语句(for)不考。
ARCHITECTURE behv OF cnt_bin_n IS
COMPONENT d_ff
PORT(d, clk_s : IN STD_LOGIC;
Q, NQ : OUT STD_LOGIC);
END COMPONENT d_ff;
SIGNAL s : STD_LOGIC_VECTOR(0 TO n);
BEGIN
s(0) <= in_1;
q_1 : FOR i IN 0 TO n-1 GENERATE
dff : d_ff PORT MAP (s(i+1), s(I), q(i), s(i+1));
END GENERATE;
END ARCHITECTURE behv;
第十一章
常用的4种设计技巧
-
- 乒乓操作
- 串并转换
- 流水线操作
- 数据接口同步
- 常用的3种面积优化方法
- 资源共享 2、逻辑优化3、串行化
- 速度优化:1、流水线设计2、寄存器配平 3、关键路径法
第七章:有限状态机设计
- moore型状态机属于同步输出状态机
因为moore型状态机的输出则仅为当前状态的函数,这类状态机在输入变化还必须等待时钟的到来,时钟的状态变化才导致输出的变化
mealy属于异步输出状态机;
Mealy型状态机的输出是当前状态和所有输入信号的函数,它的输出是在变化后立即发生的,不依赖于时钟的同步; 因此mealy型状态机要少等待一个时钟信号
同步置位,异步复位。
去毛刺方法:1、延时方式2、逻辑方式3、定时方式。
例4.3序列检测器 (实验书)
LIBRARY IEEE; --11100101
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY LI42 IS
PORT (DIN,CLK,CLR:IN STD_LOGIC;
AB :OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END;
ARCHITECTURE behav OF LI42 IS
SIGNAL Q:INTEGER RANGE 0 TO 8;
SIGNAL D:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
D<="11100101";
PROCESS(CLK,CLR)
BEGIN
IF CLR='1' THEN Q <=0;
ELSIF CLK'EVENT AND CLK='1' THEN
CASE Q IS
WHEN 0=> IF DIN =D(7) THEN Q<=1;ELSE Q<=0;END IF;
WHEN 1=> IF DIN =D(6) THEN Q<=2;ELSE Q<=0;END IF;
WHEN 2=> IF DIN =D(5) THEN Q<=3;ELSE Q<=0;END IF;
WHEN 3=> IF DIN =D(4) THEN Q<=4;ELSE Q<=0;END IF;
WHEN 4=> IF DIN =D(3) THEN Q<=5;ELSE Q<=0;END IF;
WHEN 5=> IF DIN =D(2) THEN Q<=6;ELSE Q<=0;END IF;
WHEN 6=> IF DIN =D(1) THEN Q<=7;ELSE Q<=0;END IF;
WHEN 7=> IF DIN =D(0) THEN Q<=8;ELSE Q<=0;END IF;
WHEN OTHERS => Q <=0;
END CASE ;
END IF;
END PROCESS;
PROCESS(Q)
BEGIN
IF Q=8 THEN AB <="1010";
ELSE AB <="1011";
END IF;
END PROCESS;
END behav;
Moore型序列检测器例7-4课本246页
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SCHK IS
PORT(DIN,CLK,RST : IN STD_LOGIC; --串行输入
SOUT : OUT STD_LOGIC);
END SCHK;
ARCHITECTURE behav OF SCHK IS
TYPE states IS (s0,s1,s2,s3,s4,s5,s6,s7,s8);
SIGNAL ST,NST: states :=s0; --设定现态变量和次态变量
BEGIN
COM: PROCESS(ST, DIN) BEGIN --组合进程,规定各状态转换方式
CASE ST IS --11010011
WHEN s0=> IF DIN =’1’ THEN NST <=s1;ELSE NST <=s0;END IF;
WHEN s1=> IF DIN =’1’ THEN NST <=s2;ELSE NST <=s0;END IF;
WHEN s2=> IF DIN =’0’ THEN NST <=s3;ELSE NST <=s0;END IF;
WHEN s3=> IF DIN =’1’ THEN NST <=s4;ELSE NST <=s0;END IF;
WHEN s4=> IF DIN =’0’ THEN NST <=s5;ELSE NST <=s0;END IF;
WHEN s5=> IF DIN =’0’ THEN NST <=s6;ELSE NST <=s0;END IF;
WHEN s6=> IF DIN =’1’ THEN NST <=s7;ELSE NST <=s0;END IF;
WHEN s7=> IF DIN =’1’ THEN NST <=s8;ELSE NST <=s0;END IF;
WHEN s8=> IF DIN =’0’ THEN NST <=s3;ELSE NST <=s0;END IF;
WHEN OTHERS => NST <=s0;
END CASE ;
END PROCESS;
REG: PROCESS (CLK,RST) BEGIN ---时序进程
IF RST=’1’ THEN ST <=s0;
ELSIF CLK’EVENT AND CLK=’1’ THEN ST <= NST;
END IF ;
END PROCESS REG;
SOUT <= ‘1’ WHEN ST=s8 ELSE ‘0’;
END behav;
Mealy型序列检测器例7-7课本250页
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SCHK IS
PORT(DIN,CLK,RST : IN STD_LOGIC; --串行输入
SOUT : OUT STD_LOGIC);
END SCHK;
ARCHITECTURE behav OF SCHK IS
TYPE states IS (s0,s1,s2,s3,s4,s5,s6,s7,s8);
SIGNAL ST: states :=s0; --设定现态变量和次态变量
BEGIN
PROCESS(ST, DIN) BEGIN --组合进程,规定各状态转换方式
IF RST =’1’ THEN ST <= s0; ELSIF CLK’EVENT AND CLK=’1’ THEN
CASE ST IS --11010011
WHEN s0=> IF DIN =’1’ THEN ST <=s1;ELSE ST <=s0;END IF;
WHEN s1=> IF DIN =’1’ THEN ST <=s2;ELSE ST <=s0;END IF;
WHEN s2=> IF DIN =’0’ THEN ST <=s3;ELSE ST <=s0;END IF;
WHEN s3=> IF DIN =’1’ THEN ST <=s4;ELSE ST <=s0;END IF;
WHEN s4=> IF DIN =’0’ THEN ST <=s5;ELSE ST <=s0;END IF;
WHEN s5=> IF DIN =’0’ THEN ST <=s6;ELSE ST <=s0;END IF;
WHEN s6=> IF DIN =’1’ THEN ST <=s7;ELSEST <=s0;END IF;
WHEN s7=> IF DIN =’1’ THEN ST <=s8;ELSE ST <=s0;END IF;
WHEN s8=> IF DIN =’0’ THEN ST <=s3;ELSE ST <=s0;END IF;
WHEN OTHERS => ST <=s0;
END CASE ;
IF (ST=s8) THEN SOUT <=’1’ ; ELSE SOUT <=’0’ ; END IF; END IF ;
END PROCESS;
END behav;
3-6数控分频器的设计(实验书)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY LI36 IS
PORT (CLK:IN STD_LOGIC;
D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
FOUT:OUT STD_LOGIC);
END;
ARCHITECTURE one OF LI36 IS
SIGNAL FULL:STD_LOGIC;
BEGIN
P_REG:PROCESS(CLK)
VARIABLE CNT8:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF CNT8="11111111" THEN
CNT8:=D;
FULL<='1';
ELSE CNT8:=CNT8+1;
FULL<='0';
END IF;
END IF;
END PROCESS P_REG;
P_DIV:PROCESS(FULL)
VARIABLE CNT2:STD_LOGIC;
BEGIN
IF FULL'EVENT AND FULL='1' THEN
CNT2 :=NOT CNT2;
IF CNT2='1' THEN FOUT <='1' ;ELSE FOUT<='0';
END IF;
END IF;
END PROCESS P_DIV;
END;
例3-3设计含异步清零和同步时钟使能的加法计数器(实验书)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY Vhdl1 IS
PORT (CLK,RST,EN : IN STD_LOGIC;
CQ: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT: OUT STD_LOGIC );
END Vhdl1;
ARCHITECTURE behav OF Vhdl1 IS
BEGIN
PRCCESS(CLK,RST,EN)
VARIABLE CQI: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST = '1' THEN CQI := (OTHERS =>'0');
ELSIF CLK'EVENT AND CLK='1' THEN
IF EN='1' THEN
IF CQI<9 THEN CQI := CQI+1;
ELSE CQI := (OTHERS =>'0');
END IF;
END IF;
END IF;
IF CQI=9 THEN COUT <= '1';
ELSE COUT <= '0';
END IF;
CQ <= CQI;
END PROCESS;
END behav;
例3-4七段数码显示译码器设计(实验书)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY Vhdl1 IS
PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED7S: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END ;
ARCHITECTURE one OF Vhdl1 IS
BEGIN
PRCCESS(A)
BEGIN
CASE A IS
WHEN "0000"=> LED7S <="0111111";
WHEN "0001"=> LED7S <="0000110";
WHEN "0010"=> LED7S <="1011011";
WHEN "0011"=> LED7S <="1001111";
WHEN "0100"=> LED7S <="1100110";
WHEN "0101"=> LED7S <="1101101";
WHEN "0110"=> LED7S <="1111101";
WHEN "0111"=> LED7S <="0000111";
WHEN "1000"=> LED7S <="1111111";
WHEN "1001"=> LED7S <="1101111";
WHEN "1010"=> LED7S <="1110111";
WHEN "1011"=> LED7S <="1111100";
WHEN "1100"=> LED7S <="0111001";
WHEN "1101"=> LED7S <="1011110";
WHEN "1110"=> LED7S <="1111001";
WHEN "1111"=> LED7S <="1110001";
WHEN OTHERS => NULL;
END CASE ;
END PROCESS;
END ;
四选一选择器:【例5-7】(课本上的例子)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux4 IS
PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC;
q : OUT STD_LOGIC);
END mux4;
ARCHITECTURE body_mux4 OF mux4 IS
BEGIN
process(i0,i1,i2,i3,a,b)
variable muxval : integer range 7 downto 0;
begin
muxval := 0;
if (a = '1') then muxval := muxval + 1; end if;
if (b = '1') then muxval := muxval + 2; end if;
case muxval is
when 0 => q <= i0;
when 1 => q <= i1;
when 2 => q <= i2;
when 3 => q <= i3;
when others => null;
end case;
end process;
END body_mux4;
半减器(两种方式): (双向分频器没找到,减法器没找到)