版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.什么是数字系统 数字系统是包括输入、处理、输出,能够独立运行,实现特定功能的电路。 数据处理单元通常由加法器、移位寄存器、计数器等模块组成。 控制器发送控制信号或者命令,指示数据处理部分进行加法、移位、计数或其它操作,并接收反馈信号。8.1 概 述2.数字系统的两种设计方法方法一:传统设计方法(手工设计方法,自底向上设计方法) 采用标准集成电路是实现。设计者+纸+笔。一般凭借设计者的经验。 电路可以精妙简单,电路结构固定,难更改,可读性差。8.1 概 述方法二:现代设计方法(EDA设计方法,自顶向下设计方法)8.1 概 述 “自顶向下”设计方法。何为“顶”?系统的功能。何为“底”?最基本的
2、元器件、甚至是版图。底层模块:可以在库中选择,也可以用VHDL语言编写。控制器用VHDL语言编写。顶层用原理图。8.1 概 述设计流程8.1 概 述自顶向下设计方法 设计者从整个系统逻辑出发,进行最上层的系统设计, 而后按一定的原则将全局系统分成若干子系统,逐级向下 ,再将每个子系统分为若干个功能模块、子模块、基本模块。 8.1 概 述8.2 可编程逻辑器件 可编程逻辑器件(Programmed Logic Device,PLD)是一种由用户通过编程定义其逻辑功能,从而实现各种设计要求的集成电路芯片。什么是可编程逻辑器件? PLD分为简单可编程逻辑器件SPLD、复杂可编程逻辑器件CPLD、现场
3、可编程门阵列FPGA 三种类型8.2.1 可编程逻辑阵列PLA 可编程逻辑阵列(Programmable Logic Array,PLA):与阵列可编程、或阵列可编程。(1)基本结构8.2.1 可编程逻辑阵列PLA(2)3输入2输出PLA的电路图8.2.1 可编程逻辑阵列PLA【例1】 用PLA实现组合逻辑函数:8.2.2 可编程阵列逻辑PAL PAL(Programmable Array Logic):与阵列可编程、或阵列固定。8.2.2 可编程阵列逻辑PAL【例2】 用PAL实现1位全加器。08.2.2 可编程阵列逻辑PAL带异或门的PAL结构m2m3m7F(A,B,C)F(A,B,C)=
4、10 当EN为0时,三态缓冲器输出为高阻态,对应的IO引脚作为输入使用; 当EN为1时,三态缓冲器处于工作状态,对应的IO引脚作为输出使用。EN 8.2.2 可编程阵列逻辑PAL寄存器型输出结构PAL适合于实现计数器、移位寄存器等时序逻辑电路。8.2.2 可编程阵列逻辑PAL 阵列容量较小, 片内触发器资源不足,不能适用于规模较大的数字电路。 输入、输出控制不够完善,限制了芯片硬件资源的利用率和它与外部电路连接的灵活性。 编程下载必须将芯片插入专用设备,使得编程不够方便。SPLD存在的问题8.2.2 可编程阵列逻辑PAL8.2.3 复杂可编程逻辑器件CPLD 复杂可编程逻辑器件CPLD(Com
5、plex Programmable Logic Device):基于乘积项技术、E2PROM工艺的可编程逻辑器件; 现场可编程门阵列FPGA(Field Programmable Gate Array):基于查找表技术、SRAM工艺,要外挂配置用的FlashROM的可编程逻辑器件。 高密度可编程逻辑器件主要有两类:8.2.3 复杂可编程逻辑器件CPLDCPLD由逻辑阵列块LAB,可编程内连阵列,I/O单元组成。8.2.3 复杂可编程逻辑器件CPLD宏单元和I/O单元思考:需要几个宏单元?8.2.3 复杂可编程逻辑器件CPLD【例3】串行数据检测电路的CPLD实现 CPLD的多电压(Multiv
6、olt)I/O接口 VCCINT接3.3V、2.5V、1.8V电源 当VCCIO接3.3V电源,输出电平与3.3V系统兼容8.2.3 复杂可编程逻辑器件CPLD8.2.3 复杂可编程逻辑器件CPLD ISP技术用编程器直接在用户的目标系统或印制板上对PLD芯片下载。 具有ISP性能的器件是E2CMOS工艺制造,其编程信息存储于E2PROM内,可以随时进行电编程和电擦除,且掉电时其编程信息不会丢失。 CPLD的在系统编程技术(In System Programmable,ISP)8.2.3 复杂可编程逻辑器件 CPLD下载电路8.2.4 现场可编程门阵列FPGAFPGA的通用结构8.2.4 现场
7、可编程门阵列FPGA 逻辑单元LE是FPGA实现有效逻辑功能的最小单元,用于实现组合逻辑电路和时序逻辑电路。查找表(Look up table)8.2.4 现场可编程门阵列FPGA 2输入LUT结构,它具有两个输入A1和A0,以及一个输出F,能够实现任意二变量逻辑函数。8.2.4 现场可编程门阵列FPGA 【例4】采用2输入LUT实现逻辑函数 。8.2.4 现场可编程门阵列FPGA FPGA中的可编程开关8.2.4 现场可编程门阵列FPGA4输入LUT【例5】用4变量LUT实现如图所示的组合逻辑电路。ABCDFABCDF0000010000000101001000100101000011110
8、1110100011001010101101101100111010111111111将真值表的输出0、0、0、1、0、0、0、1、0、0、0、1、1、1、1、1依次存入SRAM中的存储单元. 8.2.4 现场可编程门阵列FPGA8.2.4 现场可编程门阵列FPGAFPGA在正常模式(Normal Mode)LE逻辑图8.2.4 现场可编程门阵列FPGA一个LE可以同时实现组合和时序电路【例6】 如果要实现一个3线-8线译码器,需要多少个逻辑单元。 3线-8线译码器有3个输入和8个输出,含有8个逻辑表达式。每个逻辑函数表达式需要一个LUT,因此,实现一个3线-8线译码器需要8个LUT。每个逻辑
9、单元只含有一个LUT,所以,总共需要8个逻辑单元。 如果用门电路实现,3线-8线译码器只需要8个与非门和3个反相器,可见,用基于LUT的FPGA来实现3线-8线译码器代价是很高的。8.2.4 现场可编程门阵列FPGA8.2.4 现场可编程门阵列FPGA【例7】某函数对应的VHDL代码如下所示。分别考虑在CPLD和FPGA中实现该函数。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; - 库说明ENTITY com1 IS - 实体说明 PORT (A,B,C,D,E,F,G:IN STD_LOGIC; Y:OUT STD_LOGIC ); END com1;A
10、RCHITECTURE one OF com1 IS - 结构体说明 BEGINY=(NOT A AND NOT B AND E AND NOT F)OR(NOT A AND NOT B AND G)OR(C AND D AND E AND NOT F)OR(C AND D AND G)END;8.2.4 现场可编程门阵列FPGACPLD实现只需一个宏单元8.2.4 现场可编程门阵列FPGA8.2.4 现场可编程门阵列FPGA可编程I/O单元(I/O Element) 8.2.4 现场可编程门阵列FPGA8.2.4 现场可编程门阵列FPGA2.FPGA器件在电路配置技术 配置模式说 明AS配置
11、模式采用串行配置器件(EPCS1、EPCS4、EPCS16和EPCS64)配置PS配置模式采用下载电缆配置,也可采用MCU配置JTAG配置模式采用下载电缆配置8.2.4 现场可编程门阵列FPGAFPGA器件在电路配置技术 JTAG 配置模式8.2.4 现场可编程门阵列FPGAFPGA器件在电路配置技术 AS配置模式8.2.4 现场可编程门阵列FPGAFPGA 与CPLD比较 集成度:FPGA可以达到比 CPLD更高的集成度 ,同时也具有更复杂的布线结构和逻辑实现。 适合结构:FPGA更适合于触发器丰富的结构 ,而 CPLD更适合于触发器有限而积项丰富的结构。 编程:CPLD通过修改具有固定内连
12、电路的逻辑功能来编程 ,FPGA主要通过改变内部连线的布线来编程 ;FPGA可在逻辑门下编程 ,而 CPLD是在逻辑块下编程 ,在编程上 FPGA比 CPLD具有更大的灵活性8.2.4 现场可编程门阵列FPGAFPGA 与CPLD比较 功率消耗:CPLD的缺点比较突出。一般情况下 ,CPLD功耗要比 FPGA大 ,且集成度越高越明显;速度: CPLD优于 FPGA。由于 FPGA是门级编程,且 CLB之间是采用分布式互连;而 CPLD是逻辑块级编程 ,且其逻辑块互连是集总式的。因此,CPLD比 FPGA有较高的速度和较大的时间可预测性,产品可以给出引脚到引脚的最大延迟时间。8.2.4 现场可编
13、程门阵列FPGAFPGA 与CPLD比较编程方式:CPLD主要是基于E2PROM或FLASH存储器编程 ,编程次数达 1万次。其优点是在系统断电后,编程信息不丢失。FPGA大部分是基于 SRAM编程 ,其缺点是编程数据信息在系统断电时丢失 ,每次上电时 ,需从器件的外部存储器或计算机中将编程数据写入 SRAM中。其优点是可进行任意次数的编程 ,并可在工作中快速编程 ,实现板级和系统级的动态配置 ,因此可称为在线重配置的 PLD或可重配置硬件8.2.4 现场可编程门阵列FPGAFPGA 与CPLD比较使用方便性:CPLD比 FPGA要好。 CPLD的编程工艺采用 E2 CPLD的编程工艺,无需外
14、部存储器芯片,使用简单,保密性好。而基于 SRAM编程的FPGA,其编程信息需存放在外部存储器上,需外部存储器芯片 ,且使用方法复杂,保密性差。8.2.4 现场可编程门阵列FPGA世界主要PLD厂商/8.3.1 概述8.3.2 VHDL的语言要素8.3.3 VHDL的基本结构8.3.6 常见模块的VHDL程序8.3.4 VHDL的句法8.3.5 常量、变量和信号8.3 VHDL语言简介 VHSIC (Very High Speed Integrated Circuit) Hardware Description Language8.3.1 概 述1987年,VHDL被IEEE和美国国防部确认为
15、标准硬件描述语言1982年, 诞生于美国国防部赞助的VHSIC项目VHDL是一种用来描述数字电路和系统的语言。8.3.1 概 述VHDL主要有三大用途: 用于建立描述数字系统的标准文档 用于数字系统的仿真 用于逻辑综合(Synthesis) 综合:将VHDL代码转化为电路并对该电路进行一定的优化。8.3.1 概 述计算机程序的编译流程HDL语言综合流程8.3.1 概 述 process(clk) begin if (clkevent and clk=1) then if (qq=9) then qq=0000; else qq=qq+1; end if; end if; end process
16、; process(qq) begin if (qq=9) then co=0; else co=1; end if; end process;VHDL特点(1)目前大多数EDA工具都在不同程度上支持VHDL语言;(2)有高层次的行为描述方法,低层次的结构描述方法;8.3.1 概 述(3)具有与器件无关的特性;(4)使设计易于共享和复用。8.3.1 概 述 VHDL行为描述“告诉我你想要电路做什么,我给你提供能实现这个功能的硬件电路”结构描述法AeqB = NOT( (a(0) XOR b(0) OR (a(1) XOR b(1) OR (a(2) XOR b(2) OR (a(3) XOR
17、b(3);AeqB = 1 WHEN a = b ELSE 0;行为描述法VHDL语言的两种描述法学习VHDL应注意的问题 (2)语法掌握贵在精,不在多。30%的基本VHDL语句就可以完成95%以上的电路设计 。8.3.1 概 述 (1)用硬件设计思想来编写VHDL。“眼中有代码,心中有电路”。多实践,多思考,多总结 。 (3)VHDL描述和传统原理图的关系。适合用原理图的地方就用原理图,适合用VHDL的地方就用VHDL 。 (4)VHDL的可综合性问题。(1)标识符 标识符用来定义常数、变量、信号、端口、子程序或参数的名字。VHDL标识符的命名规则有以下两点:(1)有效字符是26个英文字母(
18、不区分大小写)、10个数字符号09、下划线“_”(下划线“_”不能用于标识符的开头或结尾)。 (2)每个标识符必须以英文字母开头,字符串中不能有空格。8.3.2 VHDL的语言要素2.数据类型BIT :位类型,其值只能为 0或 18.3.2 VHDL的语言要素Std_Logic数据类型:U未初始化用于仿真X强未知用于仿真0强0用于综合与仿真1强1用于综合与仿真Z高阻用于综合与仿真W 弱未知 用于仿真L弱0用于综合与仿真H 弱1用于综合与仿真_忽略用于综合与仿真Std_Logic数据类型使用要点: (2)若电路中有三态逻辑必须用STD_LOGIC 和 STD_LOGIC _VECTOR (3)必
19、须申明库和程序包说明语句 LIBRARY ieee;USE ieee.std_logic_1164.ALL;(1)可以代替BIT 和 BIT_VECTOR 。8.3.2 VHDL的语言要素3.算术运算符运算符功能运算符功能+加SLL逻辑左移-减SRL逻辑右移*乘SLA算术左移/除SRA算术右移*乘方ROL逻辑循环左移MOD取模ROR逻辑循环右移REM取余ABS取绝对值8.3.2 VHDL的语言要素4.关系运算符运算符功能=等 于/=不等于小 于大 于=小于等于=大于等于8.3.2 VHDL的语言要素5.逻辑运算符运算符功能AND与OR或NAND与非NOR或非XOR异或XNOR异或非NOT非8.
20、3.2 VHDL的语言要素6.其他运算符运算符功能+正-负&并置8.3.2 VHDL的语言要素7.运算优先级*ABS NOT*/ MOD REM+ 正- 负+-&SLLSLASRLSRAROLROR=AND ORNAND NOR XOR XNOR高低8.3.2 VHDL的语言要素【例1】 设A=“101”,B=“011”,C=“111000”,D=“101010”,试求取下述表达式的结果:Y=A& NOT B OR C ROR 2 AND D。解:根据表5.2-1所示的运算符操作优先级,该表达式的运算过程为: NOT B =“100” (按位取反) A& NOT B=“101100”(拼接)
21、C ROR 2= “001110”(循环右移2位)(A& NOT B)OR(C ROR 2)=“101110”(逻辑或)(A& NOT B OR C ROR 2)AND D=“101010”运算结果为101010。8.3.2 VHDL的语言要素8.3.3 VHDL程序的基本结构LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; - 库说明ENTITY mux21 IS - 实体说明 PORT (A,B,SEL:IN STD_LOGIC; Y:OUT STD_LOGIC ); END mux21;ARCHITECTURE one OF mux21 IS - 结构体
22、说明 BEGINY=(A AND NOT SEL) OR (B AND SEL);END;8.3.3 VHDL程序的基本结构Entity(实体) 用来说明模型的外部输入输出特征Architecture(结构体) 用来定义模型的内容和功能。每一个结构体必须有一个实体与它相对应,所以两者一般成对出现。Library(库) VHDL库存储和放置了可被其它VHDL程序调用的数据定义、器件说明、程序包(Package)等资源。 实 体 类似于原理图中的一个器件符号(Symbol),用来描述的该器件的输入输出端口特征,但并不涉及器件的具体逻辑功能和内部电路结构。 8.3.3 VHDL程序的基本结构ENTI
23、TY black_box IS PORT (clk, rst: in std_logic;d: in std_logic_vector(7 DOWNTO 0);q: out std_logic_vector(7 DOWNTO 0);co: out std_logic);END black_box;PORTS 端口(PORT)是实体的一部分,PORT 类似于器件的管脚。 端口说明格式PORT( 端口名 模式 数据类型; 端口名 模式 数据类型 );8.3.3 VHDL程序的基本结构【例2】试写出4位加法器add4b的实体描述。解:add4b实体描述如下:ENTITY add4b ISPORT (
24、A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); B:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CIN:IN STD_LOGIC; S:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT:OUT STD_LOGIC ); END add4b;8.3.3 VHDL程序的基本结构【例3】简单组合逻辑电路如图所示,试给出其实体描述。解: 根据图所示电路,很容易采用以下描述: D:BUFFER STD_LOGIC; E:OUT STD_LOGICENTITY GATE ISPORT(A,B,C:IN STD_LOGIC; D,E:O
25、UT STD_LOGIC );END GATE;应改成:8.3.3 VHDL程序的基本结构必须和实体(ENTITY)相联系一个实体(ENTITY)可以有多个结构体8.3.3 VHDL程序的基本结构结构体:用来描述实体的内部结构和逻辑功能结构体8.3.3 VHDL程序的基本结构 并行语句在结构体中的执行是同步进行的,或者说是并行运行的,其执行方式与书写的顺序无关。 这是VHDL语言与传统软件描述语言最大的不同;1.并行语句(1)简单赋值语句布尔表达式 下列逻辑函数表达式的布尔表达式为:Y(A AND(NOT S ) OR (B AND S);8.3.4 VHDL程序的句法(2)条件信号赋值语句赋
26、值目标信号 = 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式; x = a when (s = “00”) else b when (s = “01”) else c when (s = “10”) else d ;隐含了所有未列出条件8.3.4 VHDL程序的句法(3)选择信号赋值语句WITH 选择表达式 SELECT 赋值信号目标 = 表达式 WHEN 选择值, . 表达式 WHEN 选择值, 表达式 WHEN OTHERS;WITH s SELECT x =a WHEN “00”, b WHEN “01”, c WHEN “10”, d WHEN O
27、THERS;8.3.4 VHDL程序的句法 每个WHEN子句可以包含多个条件:WITH s SELECT x = a WHEN “000” | “001” | “010”, b WHEN “101” | “111”, c WHEN OTHERS;表示或逻辑所有的“WHEN”子句必须是互斥的每一子句结尾是逗号,最后一句是分号用 “When Others”来处理未考虑到的情况8.3.4 VHDL程序的句法(4)进程语句基本格式:PROCESS (信号敏感表) 说明区BEGIN顺序语句END PROCESS ; 进程语句是VHDL中最重要的语句,具有并行和顺序行为的双重性:进程和进程语句之间是并行关
28、系,进程内部是一组连续执行的顺序语句8.3.4 VHDL程序的句法ARCHITECTURE one OF dff IS BEGIN PROCESS (clk) BEGIN IF clkevent AND clk = 1 THEN q = d; END IF; END PROCESS;END;信号敏感表用进程语句描述的D触发器CP脉冲的上升沿8.3.4 VHDL程序的句法PROCESS(oe)BEGINIF oe=1 THEN y = a; END IF;END PROCESS;仿真结果错误思考:如何用进程语句描述的D锁存器?8.3.4 VHDL程序的句法PROCESS(oe,a)BEGINIF
29、 oe=1 THEN y = a; END IF;END PROCESS ;仿真结果正确8.3.4 VHDL程序的句法2.顺序语句 每一条顺序语句的执行(指仿真执行)顺序是与它们的书写顺序基本一致的; 顺序语句只能出现在进程(Process) 、函数(Funcation)和过程(Procedure)中; 顺序语句包括:赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句。8.3.4 VHDL程序的句法(1)顺序赋值语句变量赋值目标:=赋值源;信号赋值目标=赋值源;8.3.4 VHDL程序的句法(2)IF语句IF 条件句 THEN 顺序语句END IFIF 条件句 THEN 顺
30、序语句ELSE 顺序语句END IFIF 条件句 THEN 顺序语句 ELSIF 条件句 THEN 顺序语句 ELSE 顺序语句END IF只能在进程内使用; 至少应有一个条件句,条件句必须由布尔表达式构成; 根据条件句产生的判断结果TRUE或FALSE,有条件地选择执行其后的顺序语句。8.3.4 VHDL程序的句法ARCHITECTURE one OF encode IS BEGIN PROCESS(I0,I1,I2,I3) BEGIN IF (I0=0) THEN y=“00”; ELSIF (I1=0) THEN y=“01”; ELSIF (I2=0) THEN y=“10”; ELS
31、E y x x x x = d;END CASE;END PROCESS mux4_1;8.3.4 VHDL程序的句法8.3.5 常量、变量和信号例:CONSTANTWidth : Integer := 8 常量指在设计中不会变的值,改善代码可读性,便于代码修改。必须在程序包、实体、构造体或进程的说明区域加以说明。一般要赋一初始值。保留字CONSTANT(1)常量例:VARIABLE tmp : Bit;tmp:=1;保留字VARIABLE(2)变量 变量对暂时数据进行局部存储,是一个局部量。仅用于进程和子程序。必须在进程和子程序的说明性区域说明。不能表达连线和存储元件。8.3.5 常量、变量
32、和信号变量赋值整体赋值:temp := “10101010”;temp := x “ AA” ; 逐位赋值:temp(7) := 1;多位赋值temp (7 downto 4) := “1010”;8.3.5 常量、变量和信号可代表连线、内连元件、或端口;用“=”来给信号赋值;信号在程序包、实体、构造体中声明;(3)信号通过信号来连接不同电路。8.3.5 常量、变量和信号LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY zuhe IS PORT(a, b, c, d : IN Std_Logic; g : OUT Std_Logic);END zu
33、he;ARCHITECTURE one OF zuhe IS SIGNAL e,f : Std_Logic; BEGIN e = a OR b; f=NOT (c OR d); g =e AND f; END ;在结构体内声明内部连接信号8.3.5 常量、变量和信号SIGNAL temp : Std_Logic_Vector (7 downto 0);整体赋值:temp = “10101010”;temp = x “ AA” ; 逐位赋值:temp(7) = 1;多位赋值: temp (7 downto 4) = “1010”;多位赋值用双引号逐位赋值用单引号8.3.5 常量、变量和信号信号变
34、量赋值符号=:=功能电路的内部连接内部数据交换作用范围全局,进程和进程之间的通信进程的内部行为延迟一定时间后才赋值立即赋值(4)变量和信号的区别8.3.5 常量、变量和信号信号和变量的作用范围不同ARCHITECTURESIGNAL 描述label1: PROCESS1VARIABLE 描述label2: PROCESS2VARIABLE 描述在进程的外面声明作用范围为全局在进程的内部说明作用范围为进程内8.3.5 常量、变量和信号ARCHITECTURE reg1 OF reg1 ISSIGNAL a, b : BIT;BEGINPROCESS (clk)BEGINIF clkEVENT A
35、ND clk=1 THENa = d;b = a;q = b;END IF;END PROCESS;END reg1;顺序信号赋值语句8.3.5 常量、变量和信号ARCHITECTURE reg1 OF reg1 ISSIGNAL a, b : BIT;BEGINPROCESS (clk)BEGINIF clkEVENT AND clk=1THENa = d;b = a;END IF;END PROCESS;q = b;END reg1;ENTITY reg1 IS PORT ( d : in BIT; clk : in BIT; q : out BIT );END reg1;并行赋值语句8.
36、3.5 常量、变量和信号ENTITY reg1 IS PORT ( d : in BIT; clk : in BIT; q : out BIT);END reg1;ARCHITECTURE reg1 OF reg1 ISBEGINPROCESS (clk)VARIABLE a, b : BIT; BEGINIF clkEVENT AND clk=1 THENa := d;b := a;q = b;END IF;END PROCESS;END reg1;变量定义 变量在IF语句中被赋值,不会产生触发器;8.3.5 常量、变量和信号LIBRARY ieee;USE ieee.std_logic_1
37、164.ALL;ENTITY compare IS PORT (a, b: IN std_logic_vector(0 to 3);AeqB: OUT std_logic);END compare;ARCHITECTURE one OF compare ISBEGINAeqB = NOT( (a(0) XOR b(0) OR (a(1) XOR b(1) OR (a(2) XOR b(2) OR (a(3) XOR b(3);END;1.数值比较器8.3.6 常用模块的VHDL代码LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY compare I
38、S PORT (a, b: in std_logic_vector(0 TO 3);AeqB: out std_logic);END compare;ARCHITECTURE one OF compare ISBEGINAeqB = 1 WHEN a = b ELSE 0;END;方法二:并行选择信号赋值语句描述并行选择信号赋值语句8.3.6 常用模块的VHDL代码ARCHITECTURE one OF compare ISBEGINcomp: PROCESS (a, b)BEGIN IF a = b THENaeqb = 1; ELSEaeqb = 0; END IF;END PROCESS
39、 comp;END;方法三:用完整条件语句描述8.3.6 常用模块的VHDL代码ARCHITECTURE one OF incomplete IS BEGINim_mem: PROCESS (a,b)BEGINIF a = 1 THEN c = b;END IF;END PROCESS im_mem;END;注意:用不完整条件语句将引入锁存效应8.3.6 常用模块的VHDL代码ARCHITECTURE one OF complete IS BEGINPROCESS (a, b)BEGIN IF a = 1 THEN c = b; ELSE c = 0; END IF;END PROCESS;E
40、ND;bca如何避免引入锁存效应?采用完整条件语句。8.3.6 常用模块的VHDL代码PORT ( d : in std_logic;clk : in std_logic; q : out std_logic);END dff_a;ARCHITECTURE behavior OF dff_a IS BEGIN PROCESS (clk) BEGIN IF clkevent and clk = 1 THEN q = d; END IF; END PROCESS;END;CLK置于敏感信号表内没有ELSE语句2.D触发器8.3.6 常用模块的VHDL代码ARCHITECTURE one OF df
41、f_clr ISBEGINPROCESS(clk, clr) BEGIN IF clr = 0 THEN q = 0; ELSIF clkevent and clk = 1 THEN q = d; END IF; END PROCESS;END behavior;异步清零3.具有异步清零的D触发器8.3.6 常用模块的VHDL代码LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all; PROCESS (clk, rst)BEGINIF rst = 1 THEN count = 0000 ;ELSIF c
42、lkevent and clk = 1 THENIF load = 1 THEN count = data;ELSE count = count + 1;END IF;END IF;END PROCESS;“+”重载同步置数4.具有异步清零和同步置数的计数器8.3.6 常用模块的VHDL代码RCHITECTURE one OF count IS BEGIN PROCESS(rst, clk) BEGIN IF rst = 0 THEN q = “0000”; ELSIF clkevent and clk = 1 THEN IF updn = 1 THEN q= q + 1; ELSE q= q
43、 1; END IF; END IF; END PROCESS;END;5.可逆计数器8.3.6 常用模块的VHDL代码5.三态电路的VHDL描述ENTITY tri IS PORT(X:IN STD_LOGIC_VECTOR(7 DOWNTO 0) OE:IN STD_LOGIC; F:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END tri;ARCHITECTURE one OF tri ISBEGIN FZ) WHEN OE=0 ELSE X; END; 8.3.6 常用模块的VHDL代码6.双向口的VHDL描述8.3.6 常用模块的VHDL代码ENTITY ld
44、cnt IS PORT (clk, ld,oe:IN STD_LOGIC; count:INOUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ldcnt; ARCHITECTURE one OF ldcnt ISSIGNAL int_count:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS (clk)BEGIN IF clkevent and clk = 1 THENIF ld=1 THEN int_count = count; ELSE int_count =int_count + 1;END IF; END IF; END
45、PROCESS;8.3.6 常用模块的VHDL代码PROCESS (oe, int_count) BEGIN IF oe = 1 THEN count = int_count ; ELSE count Z) ; END IF; END PROCESS;END; 8.3.6 常用模块的VHDL代码设计题目一:四位数字频率计设计设计题目二:四位数字乘法器设计设计题目三:信号发生器设计设计选题8.4.1 4位数字频率计设计频率就是周期性信号在单位时间(1S)内的变化次数。 若在一定1S的时间间隔内测得这个周期性信号的重复变化次数为N,则其频率可表示为:f=N 1 基本原理 8.4.1 4位数字频率计
46、设计2 顶层原理图8.4.1 4位数字频率计设计(1)十进制加法计数器CNT10的VHDL语言描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 ISPORT(clk:IN STD_LOGIC; clr:IN STD_LOGIC; cs:IN STD_LOGIC; qq:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); co:OUT STD_LOGIC );END cnt10;3 底层模块设计 8.4.1 4位数字频率计设计ARCHITECTURE
47、 one OF cnt10 ISBEGIN PROCESS(clk,clr,cs) BEGIN IF (clr=1) THEN qq=“0000”; ELSIF (clkEVENT AND clk=1) THEN IF (cs=1) THEN IF (qq=9) THEN qq=“0000”; ELSE qq=qq+1; END IF; END IF; END IF; END PROCESS; PROCESS(qq) BEGIN IF (qq=9) THEN co=0; ELSE co=1; END IF; END PROCESS;END one;8.4.1 4位数字频率计设计(2)LATCH
48、4模块的设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY LATCH4 ISPORT(le:IN STD_LOGIC; dd:IN STD_LOGIC_VECTOR(3 DOWNTO 0); qq:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END LATCH4;8.4.1 4位数字频率计设计ARCHITECTURE one OF LATCH4 ISBEGIN PROCESS(le,dd) BEGIN IF (le=1) THEN qqled7sled7sle
49、d7sled7sled7sled7sled7sled7sled7sled7sled7sled7sled7sled7sled7sled7sled7snext_state=st1;clr=1;cs=0;lenext_state=st2;clr=0;cs=1;lenext_state=st3;clr=0;cs=1;lenext_state=st4;clr=0;cs=1;lenext_state=st5;clr=0;cs=1;lenext_state=st6;clr=0;cs=1;lenext_state=st7;clr=0;cs=1;lenext_state=st8;clr=0;cs=1;lenex
50、t_state=st9;clr=0;cs=1;lenext_state=st0;clr=0;cs=0;lenext_state=st0;clr=0;cs=0;le=0;endcase;8.4.1 4位数字频率计设计reg:process(clk) beginif (clkevent and clk=1) thencurrent_state=next_state;end if;end process reg;end behav;8.4.1 4位数字频率计设计4 底层模块的仿真 (1)CNT10模块的仿真结果 (2)LATCH4模块的仿真结果8.4.1 4位数字频率计设计(4)CONTROL模块的
51、仿真结果 (3)DECODER模块的仿真结果8.4.1 4位数字频率计设计5 频率计顶层原理图的输入 8.4.1 4位数字频率计设计6 频率计仿真结果 8.4.1 4位数字频率计设计1.算法设计 2.电路划分 3.数据处理单元的设计 4.控制单元的设计 8.4.2 相加-移位乘法器设计设计步骤:设A=1011,B=1101,则乘法运算过程和运算结果为:乘法运算可分解为加法和移位两种操作。 部分积P右移1位后与A相加。最终的部分积P即为A与B的乘积。在运算过程中,若某一位 Bi=0,则只移位不累加。1.算法设计 8.4.2 相加-移位乘法器设计8.4.2 相加-移位乘法器设计乘法器的算法流程 8
52、.4.2 相加-移位乘法器设计电路划分:数据处理单元+控制单元 8.4.2 相加-移位乘法器设计(1)REGA模块的设计 REGA模块为4位并行寄存器。当LD=0时,处于保持状态;当LD=1时,处于并行置数状态。library IEEE;use IEEE.std_logic_1164.all;entity REGA is port(CP,LD:in std_logic; D:in std_logic_vector(3 downto 0); Q:out std_logic_vector(3 downto 0);end REGA;8.4.2 相加-移位乘法器设计architecture one o
53、f REGA is begin process(CP,LD,D) begin if(CPevent and CP=1)then if LD=1 then Q NULL; when 01= Q Q NULL; end case; end if; end process;end;8.4.2 相加-移位乘法器设计(3)REGC模块的设计 REGC模块为5位多功能移位寄存器。当S1S0=00时,寄存器处于保持状态;当S1S0=01时,寄存器处于右移状态;当S1S0=11时,寄存器处于并行置数状态;当RD=1时,寄存器处于异步清零功能。library IEEE;use IEEE.std_logic_11
54、64.all;entity REGC is port(CP,RD,DIR:in std_logic; S:in std_logic_vector(1 downto 0); D:in std_logic_vector(4 downto 0); Q:buffer std_logic_vector(4 downto 0);end REGC;8.4.2 相加-移位乘法器设计architecture one of REGC is begin process(CP,D,S,RD) begin if(RD=1)then Q0); elsif (CPevent and CP=1) then case S is
55、 when 00 = NULL; when 01 =Q Q NULL; end case; end if; end process;end;8.4.2 相加-移位乘法器设计(4)CNT模块的设计 CNT模块为5进制加法计数器模块,其逻辑功能为:当RD=1时,处于异步清零功能;当ET=1时,允许计数。library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity CNT isport(CP,RD,ET:in std_logic; CO:out std_logic);end CNT;8.4.2 相加-移位乘法器设计architecture one of CNT issignal Q:std_logic_vector(2 downto 0);begin process(CP,RD,ET) begin if(RD=1)then Q=000; elsif(CPevent and CP=1)then if ET=1 then if (Q=4)then Q=000; else Q=Q+1; end if; end if; end if; end process; process(Q) begin if(Q=4)then CO=1; els
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力工程电缆施工安全技术方案
- 中小学实验室建设施工方案
- 宁夏大附中2027届七年级数学第一学期期末质量跟踪监视模拟试题含解析
- 新建县2026年数学三上期末考试试题含解析
- 中小学实验室环境改造设计
- 职工疗休养组织实施工作方案
- 1.4地球的圈层结构 第一课时 教案-2022-2023学年高中地理人教版(2019)必修第一册
- 2026四川长虹新能源科技股份有限公司招聘投资管理主办1人笔试模拟试题及答案详解
- 2026重庆城投基础设施建设有限公司博士后研究人员招聘1人考试模拟试题及答案详解
- 保险AI客服系统交互优化
- 2026年共产党党章知识竞赛试题库(附答案)
- 2025年乌鲁木齐市法院系统招聘聘用制书记员笔试真题
- 《无人机应用技术概论》单元5 无人机低空交通法规与管理体系
- 幼儿园班会感恩课件
- 2026年湖南长沙市社区工作者考试真题及答案
- 银行网点装修工程施工组织设计
- 2026年党员引领生态环境保护制度建设方案
- 施工现场临时排水施工方案
- 2026年医疗护理员职业技能竞赛重点培训试题及答案
- 2026年公共交通安全问题案例分享
- ISO9000-2026 质量管理基础与术语(中文版)
评论
0/150
提交评论