版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于CPLD的逻辑电路设计方法o逻辑电路在电子信息系统中的作用和地位oEDA(电子设计自动化)改变了逻辑电路的设计方法o基于CPLD的逻辑电路的设计平台和流程oVHDL学习1、逻辑电路在电子信息系统中的作用o 简单的数字信号变换和逻辑控制电路(计数器、编译码、多路选择、有限状态机)o 嵌入式系统的外围电路(为单片机扩展性能)(地址译码、中断控制、接口电路)o 利用FPGA内核嵌入式系统,可构成SOC(system on chip) o 实现高性能的数字信号处理 (FFT、滤波、复杂编码、数据压缩)简单复杂2、EDA改变了逻辑电路的设计方法 自动化改变了工业、农业的生产方式,同样也促进了电子设计
2、的方式o 传统的逻辑电路设计方式o 基于行为描述的逻辑电路设计方式和描述工具2.2 传统的逻辑电路设计方式o 设计方式1:数字逻辑法(门电路和触发器)逻辑代数卡诺图组合电路时序电路输出方程和驱动方程简化的布尔表达式2.2 传统的逻辑电路设计方式o 结构化设计方式元件连线电路系统原理图传统的逻辑电路设计方法的 优缺点和局限性o 有完整的理论基础和设计经验(数字逻辑和电路)o 电路直观、形象,层次分明,易于理解o 有大量的元件可供应用o 需要熟知大量的元器件功能和性能o 难以设计大型电路,不利于交流和共享o 调试困难,设计风险大,周期长,成本高2.3 EDA的设计方法o EDA提供了专用的设计平台
3、o HDL使原理图形成=文字形式 设计电路,实现了交流和共享o 在兼容传统设计方法的基础上, HDL提供了新设计方法“行为描述” ,提高了设计效率o EDA提供了电路仿真功能,降低了设计风险o 可编程器件还方便了系统升级和改进EDA(Electronic Design Automation:电子设计自动化)HDL(Hardware Description Language:硬件描述语言)3 基于CPLD的逻辑电路的设计平台和流程3.1 基于CPLD的逻辑电路的设计平台o 计算机o CPLD开发专用软件o 下载线o CPLD芯片o 目标电路板(PCB)1.将将CPLD焊在焊在PCB板上板上 2.
4、接好编程电缆接好编程电缆 3.现场烧写现场烧写CPLD芯片芯片ALTERA,XILINX,Lattice, 计算机+软件下载电缆焊在目标板上CPLD3.2 设计平台学习要点o 安装软件o 了解和选择CPLD芯片o 掌握开发流程1. 原理图输入法、VHDL输入法;2. 编译、综合;3. 管脚配置;4. 仿真o 了解JATG接口和下载方法 3.3、基于CPLD的逻辑电路的设计流程3.4、器件介绍XC9572XL High Performance CPLDo Featureso 5 ns pin-to-pin logic delayso System frequency up to 178 MHzo
5、 72 macrocells with 1,600 usable gateso Available in small footprint packages - 44-pin PLCC (34 user I/O pins) - 44-pin VQFP (34 user I/O pins) - 48-pin CSP (38 user I/O pins) - 64-pin VQFP (52 user I/O pins) - 100-pin TQFP (72 user I/O pins)o Optimized for high-performance 3.3V systems - Low power
6、operation - 5V tolerant I/O pins accept 5V, 3.3V, and 2.5V signals - 3.3V or 2.5V output capabilityo In-system programmableo 芯片订货:边界扫描端口:VCC:GND:TCK:TDI:TDO:TMS:连接下载线,用于下载I/O:普通输入、输出、双向端口。全局信号:具有更高的速度,也可作为普通的IOI/O/GSR I/O/GTS2I/O/GCK3I 用作信号输入:3.3V 兼容 5VO用作信号输出:3.3VVIL Low-level input voltage 0 0.80
7、VVIH High-level input voltage 2.0 5.5 VVO Output voltage 0 VCCIO V 电源信号主电源: VCCINT 3.3V接口电源:VCCIO 2.5V/3.3V电源地:GND每个电源信号用0.1uF电容退耦,稳定电路引脚用法o 电源引脚全部连接:3.3V或5V o GND 全部连接电源地o 边界扫描信号:全部引出到插头o I/O 用到的信号 要在UCF文件中配置信号o I/O 配置的原则: 方便连线。 开发软件o WebPACK ISEXilinx公司的免费PLD开发软件o 支持XC9500,coolrunner,Spartan/II,部分
8、Virtex/E/II器件4 VHDL入门知识要点 以语言的形式设计硬件(数字逻辑电路);语言是形式,硬件设计是内容。o 实体设计 (端口说明+结构体)o 数据对象、数据类型及其运算符号 (信号、变量)o 三种描述方式(数据流+结构化+行为描述)o 电路描述的手段并行语句和顺序语句o 进程语句的概念和运行机理o 典型电路模块的设计4.1 实体设计结构快速入门掌握部分定义输入输出管脚信号定义用到的内部信号和元件描述电路功能的语句主体部分 加法器的例子加法器的例子 LIBRARY IEEE IEEE; USE IEEEIEEE.STD_LOGICSTD_LOGIC_1164.all; ENTITY
9、 jiafaqi IS PORT(a : IN STD_LOGIC; - 加数加数 b : IN STD_LOGIC; -被加数被加数 ci: IN STD_LOGIC; -相邻低位来的进位数相邻低位来的进位数 s : OUT STD_LOGIC; -全加器的和全加器的和 co : OUT STD_LOGIC); -向相邻高位的进位数向相邻高位的进位数 END jiafaqi; ARCHITECTURE one OF jiafaqi IS BEGIN s = a XOR b XOR ci; co = (a AND b)or (a XOR b)AND ci); END one ;一个一个RS触发
10、器的例子触发器的例子LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY ffrs ffrs IS PORT(r,sr,s :IN STD_LOGIC; q q,qnqn:OUT STD_LOGIC);END ffrsffrs;ARCHITECTURE beh OF ffrs ffrs IS SIGNAL rs:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN PROCESS(r, s) BEGIN rsq=1;qnq=0;qnq=X;qnnull; END CASE; END PROCESS;END beh;END beh;4
11、.2 数据对象、数据类型及其运算符号2) 端口模式端口模式也称端口方向,用来定义外部引脚上的数据的流动方向和方式,即定义外部引脚是输入还是输出。表表3-1 端口模式的功能端口模式的功能端口模式端口模式端口模式说明端口模式说明IN输入模式,仅允许信号经端口从实体外部输入到实体内输入模式,仅允许信号经端口从实体外部输入到实体内部。部。OUT输出模式,仅允许信号从实体内部输出。输出模式,仅允许信号从实体内部输出。INOUT输入输入/输出双向模式,信号即可以进入实体内部,也可以输出双向模式,信号即可以进入实体内部,也可以从实体内部输出。该模式的输出缓冲器是三态控制的,从实体内部输出。该模式的输出缓冲器
12、是三态控制的,输入输出分时使用的。输入输出分时使用的。BUFFER缓冲模式,与缓冲模式,与OUT类似可作为输出使用,但也可把输出类似可作为输出使用,但也可把输出的信号作为输入使用。比如计数器和累加器的信号作为输入使用。比如计数器和累加器 ARCHITECTURE rtl of ex2 is-ai, bi为结构体内的连接信号为结构体内的连接信号BEGINai = a; bi = b;y = (ai AND bi);z = (ai OR bi);x = 1END rtl;【例【例3.2.2】 结构体说明语句的举例结构体说明语句的举例表表3-2 VHDL中常用的库和包中常用的库和包库名库名程序包名程
13、序包名定义内容定义内容STDSTANDARD定义定义BIT、BIT_VECTOR、INTEGER等数据类等数据类型型TEXTIO对文本文件进行读写操作的过程和函数对文本文件进行读写操作的过程和函数IEEESTD_LOGIC_1164定义定义STD_LOGIC、STD_LOGIC_VECTOR数数据类型据类型ST_LOGIC_SIGNED定义定义STD_LOGIC、STD_LOGIC_VECTOR数数据类型的有符号的算术运算(如据类型的有符号的算术运算(如+、-、*等)等)STD_LOGIC_UNSIGNED定义定义STD_LOGIC、STD_LOGIC_VECTOR数数据类型的无符号的算术运算
14、(如据类型的无符号的算术运算(如+、-、*等)等)STD_LOGIC_ARITH定义了定义了UNSIGNED 、SIGNED、SMALL_INT三种数据类型,并定义了上述类型及三种数据类型,并定义了上述类型及STD_LOGIC的混合算术运算、比较操作函数、的混合算术运算、比较操作函数、数据类型转换函数。数据类型转换函数。 VHDL语言要素1. 常量常量是指在设计实体中不会发生变化的值,一旦定义赋值,程序中不能修改。常量定义的语法格式为:常量定义的语法格式为:CONSTANT 常量名:数据类型常量名:数据类型 := 表达式表达式 ;例如:例如: CONSTANT width: POSITIVE:
15、 = 8; CONSTANT vcc : REAL := 5.0; CONSTANT delay : TIME := 10ns; 2. 信号 信号是电子电路内部连接和电路的表述,也是描述电路的最基本方式。 信号通常在构造体说明语句、程序包首和实体说明语句中定义,不能在进程的说明语句和子程序(包括函数和过程)的说明语句中定义。信号定义的语法结构为:信号定义的语法结构为:SIGNAL 信号名:数据类型信号名:数据类型 约束条件约束条件 := 表达式表达式;信号赋值语句的语法结构为:目标信号名 =表达式AFTER 时间表达式 ;理解要点: 信号具有明显的物理特性,表现在信号的传导延迟和滤波性质【例【
16、例3.3.1】 信号定义语句和赋值语句的举例信号定义语句和赋值语句的举例ARCHITECTURE m1 OF or_1 IS SIGNAL c, d: BIT ; -信号可以在结构体说明语句中定信号可以在结构体说明语句中定 -义,而变量不行义,而变量不行 BEGIN PROCESS(a,b,d ) -其中其中a,b为输入端口,端口类型为输入端口,端口类型BIT BEGIN c = a; -信号赋值部分信号赋值部分d = b AFTER 20ns ; -信号延时信号延时20ns后再赋值后再赋值END;3. 变量 变量常用来表示临时存储的中间数据,以便于实现程序的算法,如门与门间的连线及其连线上的
17、信号值。 变量定义的语法结构为:变量定义的语法结构为:VARIABLE 变量名变量名, ,变量名,变量名 约束条件约束条件 : 数据类型数据类型 :=表达式表达式 ; VARIABLE a :INTEGER RANGE 0 TO 15;变量赋值语句的语法结构为:变量赋值语句的语法结构为:目标变量名目标变量名 :=表达式;表达式; 个人看法:变量是一种基于数变量是一种基于数学模型的电路抽象的表述方式,学模型的电路抽象的表述方式,具有明显的抽象特性具有明显的抽象特性【例【例3.3.2】 变量定义语句和赋值语句的举例变量定义语句和赋值语句的举例PROCESS( )VARIABLE a :INTEGE
18、R RANGE 0 TO 15; -在在PROCESS后定义变量后定义变量VARIABLE b, c : INTEGER :=2; -说明部分说明部分,BEGIN之前之前VARIABLE d :STD_LOGIC; BEGIN a :=13; -变量赋值部分变量赋值部分b:=a+1; c:=15; d:=1;END;表表3-3 信号和变量的区别信号和变量的区别信号信号变量变量赋值符赋值符号号=:=基本用基本用法法用于作为电路中的信号连接,表用于作为电路中的信号连接,表示硬件连线和存储元件示硬件连线和存储元件用于作为进程中临时存储的中间数用于作为进程中临时存储的中间数据,据,行为特行为特性性信号
19、赋值有延迟时间,并且在进信号赋值有延迟时间,并且在进程结束时才对信号赋值程结束时才对信号赋值立即赋值,无时间延迟立即赋值,无时间延迟适用范适用范围围在整个结构体内的任何地方都适在整个结构体内的任何地方都适用用只能在顺序语句中使用,不能在并只能在顺序语句中使用,不能在并行语句中使用行语句中使用对进程对进程影响影响进程对信号敏感进程对信号敏感进程对变量不敏感进程对变量不敏感用途用途用于程序包、实体说明或结构体用于程序包、实体说明或结构体中。中。仅用于进程、函数或过程中仅用于进程、函数或过程中含有的含有的信息信息可以容纳当前值,也可以保持历可以容纳当前值,也可以保持历史值。史值。 变量只有当前值。变
20、量只有当前值。 数据类型1.VHDL的预定义数据类型表表3-4 预定义数据类型预定义数据类型数据类型数据类型含含 义义整数(整数(INTEGER)代表代表32位的正整数、负整数和零,使用时用位的正整数、负整数和零,使用时用RANGE字句字句限定范围限定范围实数(实数(REAL)类似数学中的实数,书写时一定要有小数点类似数学中的实数,书写时一定要有小数点位(位(BIT)用字符用字符1和和0来表示来表示位矢(位矢(BIT_VECTOR)双引号括起来的一组位数据双引号括起来的一组位数据布尔量布尔量(BOOLERN)只有只有真真和和假假2个状态,可以进行关系运算个状态,可以进行关系运算字符字符(CHA
21、RACTER)字符通常用单引号括起来,对大小写敏感字符通常用单引号括起来,对大小写敏感字符串字符串(STRING)双引号括起来的一串字符双引号括起来的一串字符时间时间(TIME)时间类型包括整数和物理量单位两部分时间类型包括整数和物理量单位两部分自然数、正整数自然数、正整数两类数据是整数的子类两类数据是整数的子类错误等级错误等级(SEVERITYLEVEL)用来表征系统的状态,它共有用来表征系统的状态,它共有4种:种:NOTE、WARNING、ERROR、FAILURE2. 其他预定义的标准数据类型标准逻辑位 (STD_LOGIC)数据类型;标准逻辑矢量 (STD_LOGIC_VECTOR);
22、无符号数据类型(UNSIGNED );有符号数据类型(SIGNED)。 1) 标准逻辑位(STD_LOGIC)数据类型TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-);U -Uninitialized(未初始化的) X - Forcing Unknown(强未知的)0 - Forcing 0 ( 强0) 1 - Forcing 1 (强1) Z - High Impedance (高阻态)W - Weak Unknown (弱未知的)L - Weak 0 (弱0)H - Weak 1(弱1) - - Dont care(可忽略的)2) 标准逻辑矢量(STD_LOGIC
23、_VECTOR)标准逻辑矢量STD_LOGIC_VECTOR是定义在STD_LOGIC_1164程序包中的标准一维数组,数组中每个元素的数据类型都是以上定义的标准逻辑位STD_LOGIC。 IEEE库程序包 STD_LOGIC_1164中STD_LOGIC_VECTOR的定义如下: TYPE STD_LOGIC_VECTOR IS ARRAY (NATURAL RANGE) OF STD_LOGIC;注意:在程序中使用STD_LOGIC和STD_LOGIC_VECTOR数据类型前,需加入下面的库说明语句和程序包说明语句: LIBRARY IEEE; USE IEEE.STD_LOGIC_116
24、4.ALL;3)无有符号数据类型UNSIGNED和SIGNED是用来设计可综合的数学运算程序的重要数据类型,UNSIGNED用于无符号数的运算,SIGNED用于有符号数的运算。在IEEE库程序包 STD_LOGIC_ARITH中UNSIGNED的定义如下:TYPE UNSIGNED IS ARRAY (NATURAL RANGE) OF STD_LOGIC; STD_LOGIC_ARITH中SIGNED的定义如下:TYPE SIGNED IS ARRAY (NATURAL RANGE) OF STD_LOGIC;在程序中使用UNSIGNED和SIGNED数据类型前,需加入下面的库说明语句和程序
25、包说明语句: LIBRARY IEEE; USE IEEE. STD_LOGIC_ARITH;3. 用户自定义数据类型 用户自定义数据类型的语法结构为:用户自定义数据类型的语法结构为: TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 OF 基本数据类型基本数据类型;1) 枚举类型枚举类型枚举类型定义的语法结构为:枚举类型定义的语法结构为:TYPE 数据类型名数据类型名 IS (元素(元素1,元素,元素2,););在枚举的数据类型的定义中列举出所有可能的取值,被说明为在枚举的数据类型的定义中列举出所有可能的取值,被说明为该枚举类型的变量取值不能超出所定义的范围,该枚举类型的变量取
26、值不能超出所定义的范围,TYPE meal IS (breakfast, lunch, dinner);2) 数组类型数组类型数组类型定义的语法结构为:数组类型定义的语法结构为: TYPE 数组类型名数组类型名 IS ARRAY 约束范围约束范围 OF 元素类型;元素类型;例如:例如:TYPE a IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; 这是一个限定性一维数组,数组类型的名称是这是一个限定性一维数组,数组类型的名称是a,它有,它有8个元素,个元素,数组元素的数据类型是数组元素的数据类型是STD_LOGIC,各元素的排序是,各元素的排序是a(7)、a(6)、a(0
27、)。4. 数据类型的转换有三种常见的方法可以实现数据类型转换:类型标记转换法、函数转换法和常数转换法。1)用类型标记实现类型转换所谓类型标记实现类型转换,就是将欲转换的目的类型直接标出,后面紧跟用括号括起来的源数据。2)用转换函数实现类型转换3)用常数实现类型转换 基本运算符1. 逻辑运算符 2. 关系运算符 3. 算术运算符 4. 移位运算符5. 并置运算符6. 符号运算符 属性属性是指实体、结构体、类型及信号的一些表现特征。1. 值类属性2. 信号类属性只有两个信号类属性(EVENT和STABLE)是可以综合的,其中EVENT最常用,主要用于时钟边沿的描述。下降沿可以简写为:clkEVEN
28、T AND clk=0。3. 数据范围类属性4.4 VHDL语言的结构体描述方式4.4.1 行为(BEHAVEIOR)描述方式 类似于高级编程语言,其特点如下: (1) 行为描述采用顺序语句,通过语句的组合顺序来表达电路功能,从形式上类似计算机语言;(2)行为描述具有很高的抽象程度,远高于数据流描述和结构描述;(3)行为描述只需描述清楚输入与输出间转换关系,不需要关注设计功能的门级实现;(4)其描述能力十分强大,成为VHDL结构体描述最重要的方式; (5) 行为描述主要使用函数、过程、进程语句的形式来表示的。4.4.1 行为(BEHAVEIOR)描述方式 行为=行动+作为 也就是处理事情的步骤
29、或具体过程。 行为描述方式也就是通过一系列的步骤或具体工作过程来设计电路。一个用于控制教室灯开关电路的行为一个用于控制教室灯开关电路的行为.ARCHITECTURE beh OF dff1 IS BEGIN signal cnt: integer range 0 to 300; PROCESS (a, b, cnt) BEGIN IF (aEVENT AND a=1) THEN IF(b=0) THEN cnt= cnt +1; ELSE cnt= cnt -1; END IF; END IF; IF cnt 10 THEN y=“0001” ; ELSIF cnt 20 THEN y=“00
30、11” ; ELSIF cnt 30 THEN y=“0111” ; ELSE y=“1111” ; END IF; END PROCESS;END beh;前后2个激光器2个传感器ab.ARCHITECTURE beh OF dff1 IS BEGIN PROCESS (d, cp, r) BEGIN IF(r=0) THEN q=0; ELSIF (cpEVENT AND cp=1) THEN q=d; END IF;END PROCESS;END beh;【例【例3.4.1】 利用行为描述方式实现的利用行为描述方式实现的D触发器触发器4.4.2 数据流描述方式 数据流描述方式源于传统的布
31、尔表达式设计思想, 通过逻辑或算术等表达式对信号赋值, 表示信号在电路(或寄存器)中的传递方向。BAYBAY01BAYABY23LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY yima24_2 IS PORT (a, b: IN STD_LOGIC; y3,y2,y1,y0:OUT STD_LOGIC);END yima24_2;ARCHITECTURE rtl OF yima24_2 ISBEGIN y3=NOT(a AND b); y2=NOT(a AND (NOT b); y1=NOT(NOT a) AND b); y0=NOT(NOT a
32、) AND (NOT b); END rtl;4.4.3 结构化描述方式 利用元件例化语句, 实现高层次的模块调用低层次的模块, 来构成一个复杂的电路. 可以理解为原理图方式4.5 VHDL典型语句5.1 VHDL顺序语句5.2 VHDL并行语句5.3子程序5.4程序包、配置4.5.1 VHDL顺序语句o 顺序语句用于进程或函数或过程中,若干条顺序语句整体地描述一个电路或一种电路的行为模型或一个数学函数。描述的效果与语句的执行顺序有关;o 在结构上类似于C语言。1 赋值语句(1)信号代入语句信号代入语句的语法结构为:信号代入语句的语法结构为:信号信号= inertial 表达式表达式after
33、 时间表达式时间表达式;信号信号= transport 表达式表达式after 时间表达式时间表达式; 表达式中可以出现变量,该语句可根据不表达式中可以出现变量,该语句可根据不同情况可生成多种不同性质的电路模块。同情况可生成多种不同性质的电路模块。如门电路,加法器等,也如门电路,加法器等,也 可以和其他语句可以和其他语句结合起来生成其它模块,是最基本的语句。结合起来生成其它模块,是最基本的语句。信号代入语句解释信号代入语句解释o1:inertial 可省略不写;模拟一个信可省略不写;模拟一个信号经过容性或抗性电路造成的相位延迟号经过容性或抗性电路造成的相位延迟特性,具有滤波性质。宽度小于特性,
34、具有滤波性质。宽度小于after指定的时间时,脉冲被滤掉。指定的时间时,脉冲被滤掉。o 2: transport 模拟一个信号经过理想模拟一个信号经过理想传输线或阻性电路延迟特性,不具有传输线或阻性电路延迟特性,不具有滤波性质。宽度小于滤波性质。宽度小于after指定的时间指定的时间时,脉冲也不被滤掉。时,脉冲也不被滤掉。o3: after 中时间表达式省略时默认中时间表达式省略时默认延迟无穷小延迟无穷小;o 4: 在同一个进程或过程或函数中, AFTER子句省略时,所有的信号赋值都是在程序的最后一条语句实行完后,一起生效; 这一点可理解为有限个无穷小的和还是无穷小。PROCESS (b,c,
35、d)beginc=b;a=c and d;END PROCESS;A,b,c,d分别为1,1,1,1B变为0后;分析进程的执行过程:2次o 5:延迟子句:延迟子句 在综合时被忽略,仅用于仿真;在综合时被忽略,仅用于仿真;o 6:赋值号前后的类型应一致;:赋值号前后的类型应一致;2、变量赋值语句变量赋值语句的语法结构为:变量赋值语句的语法结构为: 变量:表达式变量:表达式 ;1:在进程中使用:在进程中使用 ;2:具有立即性(没有延迟特性);:具有立即性(没有延迟特性);3;由于变量具有局部性,值必须通过信号输出到其他模块;由于变量具有局部性,值必须通过信号输出到其他模块;例如例如4-1【例4.1
36、.2】 比较N1、N2进程的执行结果N1:Process(c,d) 自己理解自己理解 书中解释书中解释Begina=2; b=a+c; a=d+1; e=a*2;END PROCESS;N2:Process(c, d,) Variable av, bv, ev integer:=0; -变量在这里说明变量在这里说明Beginav:=2; bv:=av+c; -变量赋值后,变量赋值后, 当前值立即被新结果替代当前值立即被新结果替代av:=d+1; ev:=av*2;a=av; b=bv;e=ev; End PROCESS;3条件控制语句1. IF语句IF语句的语法结构为:语句的语法结构为:IF
37、条件 THEN 顺序语句;ELSIF 条件 THEN顺序语句;ELSIF 条件 THEN顺序语句;ELSE顺序语句;END IF; 具有优先级的电路3条件控制语句IF 条件 THEN 顺序语句;END IF;o 引入寄存器IF 条件 THEN 顺序语句;ELSE 顺序语句;END IF;o 不引入寄存器IF 信号的边沿属性 THEN 顺序语句;END IF;o 形成时序逻辑电路IF 条件 THEN if 语句;ELSE 顺序语句;End IF;o 嵌套语句【例4.1.3】IF语句举例-门闩锁存器门闩锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTI
38、TY latch ISPORT (d, c: IN BIT;y : OUT BIT);END latch ;ARCHITECTURE beh OF latch ISBEGINPROCESS(c, d)BEGINIF(c=1) THENy=d;END IF;END PROCESS;END beh;-二选一数据选择器二选一数据选择器 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux21 ISPORT (a,b, c: IN BIT;y : OUT BIT);END mux21 ;ARCHITECTURE beh OF mux21 ISBEGIN
39、PROCESS(a, b, c)BEGINIF(c=1) THEN y=a;else y 顺序语句;顺序语句; 顺序语句;顺序语句; WHEN 选择值选择值 = 顺序语句;顺序语句; 顺序语句;顺序语句; WHEN OTHERS =顺序语句;顺序语句;END CASE;o 选择值选择值不能重复;不能重复;o 表达式表达式的所有取值必须全部罗列,否则要用的所有取值必须全部罗列,否则要用: : WHEN OTHERS =顺序语句;顺序语句;o 没有优先级顺序;没有优先级顺序;o 适合生成编解码电路,也常用于有限状态机电路描适合生成编解码电路,也常用于有限状态机电路描述。述。【例4.1.6】 实现7
40、段显示译码器LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY yima2 IS PORT(a :IN STD_LOGIC_VECTOR(3 DOWNTO 0); y : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); END yima2;ARCHITECTURE beh OF yima2 ISBEGIN PROCESS(a) BEGIN CASE a is WHEN0000=yyyyyyyyyyy=0000000; END CASE; END PROCESS; END beh; 5、 循环语句1). FORLOOP语句FORL
41、OOP循环语句主要用于循环次数已知的循环程序设计,可以使其所包含的顺序语句被循环执行FORLOOP语句的语法结构为:语句的语法结构为:循环标号:循环标号: FOR 循环变量循环变量 IN 循环次数范围循环次数范围 LOOP 顺序语句顺序语句END LOOP 循环标号循环标号;循环变量在使用前不需声明循环变量在使用前不需声明(1)FOR循环变量 IN 初值 TO 终值 LOOP 顺序语句; END LOOP;(2)FOR 循环变量 IN 初值 DOWNTO 终值 LOOP 顺序语句;END LOOP;(3)FOR 循环变量 IN xRANGE LOOP顺序语句;END LOOP;【例4.1.7】
42、 用FORLOOP语句来实现的数码中1的个数的检测器。理解变量的价值LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ceshi1 ISPORT (data:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-输入的数据输入的数据 y : OUT INTEGER RANGE 8 DOWNTO 0); -输出的输出的1个数个数END ceshi1 ;ARCHITECTURE beh OF ceshi1 IS BEGIN PROCESS(data) VARIABLE count :INTEGER RANGE 8 DOWNTO 0; -定义
43、一个中间变量定义一个中间变量 BEGIN count:=0; -中间变量赋初值中间变量赋初值 FOR i IN dataRANGE LOOP -循环变量循环变量i在使用前不需声明在使用前不需声明 IF data( i )=1 THEN count:=count+1; END IF; END LOOP; y=count;END PROCESS; END beh;2). WHILELOOP语句WHILELOOP语句的语法结构为:语句的语法结构为:循环标号:循环标号:WHILE 条件条件 LOOP 顺序语句顺序语句;END LOOP循环标号循环标号; 例如:例如:WHILE i 10 LOOP -这
44、里利用了这里利用了i 10的条件使程序结束循环的条件使程序结束循环 sum :=i+sum; -sum初始值为初始值为0 i:=i+1; -循环控制变量循环控制变量i的递增是通过算式的递增是通过算式i:=i+1来来实现的实现的 END LOOP; WHILELOOP语句没有自动递增循环变量的功能,语句没有自动递增循环变量的功能,而是在顺序处理语句中增加了一条循环次数计算语句,而是在顺序处理语句中增加了一条循环次数计算语句,用于循环语句的控制。用于循环语句的控制。o Loop 无限循环语句,需要其他控制语句exit next配合o LOOP 顺序语句; END LOOP;o EXIT 语句 忽略
45、后面语句,直接退出循环; o NEXT 语句 忽略后面语句,直接进入下一次循环。 o 可用于上述三种循环语句中。6、 其他顺序语句1). 等待语句等待语句语语法结构为:法结构为:WAIT ON 敏感信号表敏感信号表 UNTIL 条件表达式条件表达式 FOR 时间表达式时间表达式;当进程执行到当进程执行到WAIT语句,就被挂起,语句,就被挂起,直到满足此语句设置的结束挂起条件后,直到满足此语句设置的结束挂起条件后,将重新开始执行进程或过程中的程序。将重新开始执行进程或过程中的程序。WAIT ON 敏感信号表敏感信号表 UNTIL 条件表达式条件表达式 FOR 时间表达式时间表达式;其中的条件可以
46、组合,也可以单独出其中的条件可以组合,也可以单独出现。现。ON子句子句 敏感信号表敏感信号表 信号之间用逗号分开。信号之间用逗号分开。这些信号的值有一个变化,则这些信号的值有一个变化,则ON子句条件成立。子句条件成立。 如如 wait on a,b,c,d;UNTIL 子句子句o 一直等待直到条件成立一直等待直到条件成立 条件表达式类似于条件表达式类似于C语言中。语言中。如:如: a=1 ; (a and b)=c ; aevent and a=1;WAIT UNTIL aevent and a=1;FOR 子句子句o 表示等待有限的一段时间后,继续执行后续表示等待有限的一段时间后,继续执行后
47、续的语句,而具体时间由的语句,而具体时间由时间表达式给出。时间表达式给出。o 时间表达式中要给出时间单位。时间表达式中要给出时间单位。o 该子句只用于仿真,不能综合。一般用于在该子句只用于仿真,不能综合。一般用于在电路仿真中模拟一个信号源。电路仿真中模拟一个信号源。Process ()begina=1; wait for 100ns;a=0; wait for 100ns*2;end process;2). 空操作语句空操作语句语法结构为:语法结构为: NULL; 执行该语句时不进行任何操作,只是执行该语句时不进行任何操作,只是使程序去执行下一个语句,以满足特定情使程序去执行下一个语句,以满足
48、特定情况下的语法需要。况下的语法需要。4.5.2 VHDL并行语句o在VHDL程序中,每个并行语句用来表示一个功能模块,各个功能模块组织在一起便组成了一个结构体。o 结构体中的所有并行语句的执行都是同时行进的,与书写顺序没有关系。并且认为执行速度无穷快。并行语句主要有: 进程语句、并行信号赋值语句、块语句、元件例化语句、生成语句和并行过程调用语句。2. 进程的概念及执行机制 进程是行为描述的主要手段,通过进程语句可以生成电路模块,也可以产生用于电路仿真的激励信号。进程语句本身是一种并行语句,但它要使用一系列顺序语句来描述电路的行为。进程标号:PROCESS(敏感信号) 进程说明部分 BEGIN
49、 顺序语句1; 顺序语句2; 顺序语句n; END PROCESS 进程标号;3 再讲进程语句语语法结构为:法结构为:进程标号:进程标号:PROCESS (敏感信号表)(敏感信号表) IS 进程说明部分进程说明部分 BEGIN 顺序语句顺序语句; END PROCESS 进程标号;进程标号;进程语句本身是并行的,它可以生成一个独立的电路模块功能,或仿真产生一个电路的信号。有时候多个进程共同生成一个电路模块。在方法上,它利用顺序语句从电路的行为角度描述电路,而不是从电路结构上描述。要从逻辑合理性和物理上的可实现性去理解进程。ENTITY mul21 ISPORT (a, b,c, s1,s2 :
50、 IN BIT; x,y : OUT BIT );END mul21;ARCHITECTURE one OF mul21 IS BEGIN u1: PROCESS (a, b, s1) -输出为输出为x的二选一数据选择器的二选一数据选择器 BEGIN IF (s1 = 0) THEN x = a; ELSE x= b; END IF;END PROCESS u1; u2: PROCESS(a, c, s2) -输出为输出为y的二选一数据选择器的二选一数据选择器BEGIN IF (s2 = 0) THEN y = a; ELSE y = c;END IF; END PROCESS u2;END
51、one;【例4.2.1】 两个二选一数据选择器该进程用于模拟一个信号源Process () begin a=1; wait for 100ns; a=0; wait for 100ns*2; end process;不可综合成电路的进程,但可从行为上仿真一个信号源,用于对其它电路测试仿真。不合逻辑的描述Process (a,b) begin a=a+b; end process;Process (a,b,clk) begin if (clkevent and clk=1) then a=a+b; end if; end process;不合实际正确的描述方式进程使用要点:进程使用要点:1)敏感
52、信号表敏感信号表 同同WAIT on 中敏感量表。中敏感量表。o 敏感信号的变化认为是进程启动的条件,敏感信敏感信号的变化认为是进程启动的条件,敏感信号表可省略;号表可省略;o 若敏感信号省略时,进程中应插入等待语句,并若敏感信号省略时,进程中应插入等待语句,并认为进程中语句是无限循环执行的。认为进程中语句是无限循环执行的。o 进程中所有的被读信号,均应列入到敏感信号表进程中所有的被读信号,均应列入到敏感信号表中,否则可能造成综合结果和仿真结果的不一致。中,否则可能造成综合结果和仿真结果的不一致。o 当敏感信号被赋值时,则可能再次启动进程当敏感信号被赋值时,则可能再次启动进程被读信号:赋值号右
53、端的信号,各种条件表达式中被读信号:赋值号右端的信号,各种条件表达式中的信号的信号2) 一个进程中只允许描述对应于一个时钟信号的同步时序逻辑。同步电路也可由结构体中的多个进程描述。【例4.2.2】 多进程语句实现16进制加法计数器的举例LIBRARY IEEE; -16进制加法计数器进制加法计数器USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter_16 ISPORT(clk:IN STD_LOGIC; q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); co:OUT STD_
54、LOGIC);END counter_16;ARCHITECTURE beh OF counter_16 IS SIGNAL qn: STD_LOGIC_VECTOR(3 DOWNTO 0);-因为因为q只能输出,只能输出,所所 -以在结构体建立一个新的信号以在结构体建立一个新的信号BEGIN P1:PROCESS(clk) BEGIN IF (clkEVENT AND clk=1) THEN IF qn=1111 THEN qn=”0000” ; ELSE qn=qn+1; END IF; END IF; q=qn; END PROCESS P1;P2:PROCESS(clk) BEGIN
55、IF (clkEVENT AND clk=1) THEN IF qn=1111 THEN co=1; ELSE co=0; END IF; END IF; END PROCESS P2; END beh; o 3)在同一个进程中,可以多次对同一个信号赋值,但在不同进程中,对同一个信号赋值则产生多驱动源电路。在一般情况中应避免这种情况,但在描述具有高阻输入的分时驱动电路时会用这样的描述方式。 决断函数是解决这种问题的常用方法,但也可以采用IF ELSIF 语句或CASE语句替代。o 4)变量也是在进程中常用的数据对象,变量的说明应在所用的进程中说明,所以变量作用范围是局部的。o 变量的值如果在其
56、他进程中使用时,则需要通过信号输出。4. 并行信号赋值语句1. 简单信号赋值语句 可认为是进程的简写LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY and_gate IS PORT (a,b: IN STD_LOGIC; y: OUT STD_LOGIC);ENG and_gate;ARCHITECTURE rtl OF and_gate ISBEGINP1: PROCESS(a,b) BEGINy=a AND b;END PROCESS P1;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;EN
57、TITY and_gate ISPORT (a,b: IN STD_LOGIC; y: OUT STD_LOGIC);ENG and_gate;ARCHITECTURE rtl OF and_gate ISBEGIN y=a AND b;END rtl;2. 条件信号赋值语句 IF 语句演化而来,但只用于组合电路描述目的信号量目的信号量=表达式表达式1 WHEN 条件条件1,ELSE 表达式表达式2 WHEN 条件条件2,ELSE 表达式表达式3 WHEN 条件条件3,ELSE 表达式表达式n; -ELSE -ELSE是必须的。是必须的。3.选择信号赋值语句选择信号赋值语句WITH 选择条件表
58、达式选择条件表达式 SELECT 目标信号量目标信号量=表达式表达式1 WHEN 选择条件选择条件1, 表达式表达式2 WHEN 选择条件选择条件2, 表达式表达式n WHEN 选择条件选择条件n;【例【例4.2.4】 用赋值语句来实现数据选择器的举例用赋值语句来实现数据选择器的举例-用条件信号赋值语句实现用条件信号赋值语句实现LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux42 ISPORT (a, b, c,d:IN STD_LOGIC;sel: IN STD_LOGIC_VECTOR(1 DOWNTO 0);y : OUT STD_
59、LOGIC);END mux42 ;ARCHITECTURE beh OF mux42 ISBEGIN y=a WHEN sel=00 ELSE b WHEN sel=01 ELSE c WHEN sel=10 ELSE d; END beh;-用选择信号赋值语句实现用选择信号赋值语句实现LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux43 ISPORT (a, b, c, d: IN STD_LOGIC;sel: IN STD_LOGIC_VECTOR(1 DOWNTO 0);y : OUT STD_LOGIC);END mux43 ;
60、ARCHITECTURE beh OF mux43 ISBEGIN WITH sel SELECT y=a WHEN 00 , b WHEN 01 , c WHEN 10 , d WHEN OTHERS;END beh;省略赋值操作符是为了简化表达才使用的短语,它可以在较多省略赋值操作符是为了简化表达才使用的短语,它可以在较多位的位矢量赋值中作省略化的赋值,如:位的位矢量赋值中作省略化的赋值,如:doutZ); 该语句等价于该语句等价于dout=”ZZZ.ZZ”;利用省略赋值操作符还可以给位矢量的某一部分位赋值以后再利用省略赋值操作符还可以给位矢量的某一部分位赋值以后再给剩下的位赋值,给剩下的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026秋新教材统编版四年级上册语文 第五单元 习作 生活万花筒 教案
- 长沙市开福区2025年三年级数学第二学期期末教学质量检测模拟试题(含解析)
- (2026年)律师事务所的实习总结
- 发展乡村旅游资源的调研报告
- 房产咨询公司行政总监述职报告
- 医保内控制度工作计划
- 2025年重庆市彭水苗族土家族自治县数学中考冲刺卷
- 某家具厂油漆车间安全制度
- 医院停氧试题及答案
- 家电维修工试题及答案
- 2026年社区网格员公共基础笔试考试题库及参考答案
- 2026辽控集团所属辽宁九夷能源科技有限公司招聘12人笔试参考题库及答案详解
- 大学数学教学中数学建模的应用与教学实践课题报告教学研究课题报告
- 外科引流管护理技术
- (期末复习)2025-2026学年人教版七年级生物上下册期末核心知识点填空版清单
- 专家传承工作室工作制度
- 消防主机操作使用规程
- 合肥幼儿师范高等专科学校《小学科学课程与教学》2025-2026学年期末试卷
- 2026 年浙江省初中学业水平考试社会试题卷
- 校长在家长会上的讲话:家校共育的真谛就藏在这五个词里
- 雨课堂学堂在线学堂云《人工智能安全与伦理(北京航空航天)》单元测试考核答案
评论
0/150
提交评论