VHDL语言与数字集成电路设计.ppt_第1页
VHDL语言与数字集成电路设计.ppt_第2页
VHDL语言与数字集成电路设计.ppt_第3页
VHDL语言与数字集成电路设计.ppt_第4页
VHDL语言与数字集成电路设计.ppt_第5页
已阅读5页,还剩663页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VHDL语言与数字集成电路设计,电子科技有限公司教程,第一章 概述,VHDL Very high speed integration circuits Hardware Description Language,一种集成电路的硬件描述语言; 用于进行数字集成电路的设计;,数字集成电路,数字逻辑电路,通常由基本门电路构成;在一块半导体芯片上设计制作; 目前以CMOS工艺为主进行制备; 在信息技术领域得到广泛的应用。,从上世纪60年代开始发展,每3年集成度与速度提高2倍。 从简单的门电路到复杂的数字系统,系统复杂程度急剧提高。,数字集成电路的发展,SSI (120gates) 基本单元组合 (P.

2、13)MSI(20200) 简单功能电路: 译码器、数据选择器、寄存器、计数器 LSI(20020万) 小规模系统组件: 存储器、微处理器、可编程逻辑器件 VLSI(可达上亿) 大型系统组件或小型系统 SOC:Systems on chip !,数字集成电路的发展,数字集成电路的设计,电路复杂程度高,开发时间长; 目标:短周期、低成本、高性能 方案:层次化、模块化、标准化 自顶至下的多层次设计:TOP-DOWN,数字集成电路的设计特点,系统设计 系统描述:芯片功能、性能、 成本、尺寸等 功能设计 功能级描述:功能框图、时序 图等 逻辑设计 逻辑描述:逻辑电路图 电路设计 电路描述:电路图、门级

3、网表 版图设计 版图网表,数字集成电路的设计层次,采用文本形式进行程序设计,便于编写和修改; 具有硬件特征的语句,可以描述数字系统的结构、功能、行为和接口; 全面支持电路硬件的设计、验证、综合和测试;设计与具体工艺无关,适合于多层次设计; 具有良好的开放性和并行设计能力、便于交流保存共享。,设计交流的语言:HDL,一个简单数字电路的设计描述,4位加法器标准模块:a+b+ci=s 3组输入,1组输出;,4位加法的实现过程,可以采用4个全加器模块(FA)连接实现; 每个模块有3个输入,2个输出;,VHDL对电路模块的描述,entity add4 is port (a,b: in bit_vecto

4、r( 3 downto 0 ); ci : in bit; s : out bit_vector(4 downto 0); end add4;,采用实体(entity)描述模块的外部端口,VHDL对电路内部结构的描述,architecture str of add4 is signal c: bit_vector(2 downto 0); component fa is port (a,b,ci: in bit; s,co : out bit); end component; begin u1:fa port map (a(0),b(0),ci,s(0),c(0); u2:fa port ma

5、p (a(1),b(1),c(0),s(1),c(1); u3:fa port map (a(2),b(2),c(1),s(2),c(2); u4:fa port map (a(3),b(3),c(2),s(3),s(4); end str;,采用结构体(archtecture)描述模块的内部连接关系,对上述描述程序的电路综合,程序准确体现了希望实现的电路结构,全加器的设计,VHDL不仅可以通过连线描述进行电路设计,也可以通过运算关系或电路的行为特征进行电路设计。 根据数字电路的基本知识,全加器的功能可以由下列逻辑运算描述:,全加器的VHDL程序,entity fa is port (a,b,

6、ci: in bit; s,co : out bit); end fa; architecture rtl of fa is begin s=a xor b xor ci; co=(a and b) or (a and ci) or (b and ci); end rtl;,全加器VHDL程序的综合结果,对全加器电路描述的修改,在CMOS电路结构中,3输入异或门不是一个基本单元器件,为了使设计能够更直接地反映晶体管电路的构成,可以将该计算采用两输入逻辑替代,设置一个中间信号表达2个输入量的异或,然后再将其与第3个变量进行异或;,对全加器电路描述的修改,architecture rtl of f

7、a is signal s1:bit; Begin - s=a xor b xor ci; s1=a xor b;s=s1 xor ci co=(a and b) or (a and ci) or (b and ci); end rtl;,只是改变结构体中的相应描述语句,修改后电路的综合结果,通过简单改变VHDL的语句,就可以改变电路中使用的逻辑单元和连接方式。,电路基本单元的结构,考虑到晶体管级和版图级的性能优化问题,异或门可以采用传输门结构实现,而“与-或”结构则通常采用与非门实现。,数字集成电路的优化设计,在系统一级,需要考虑使功能模块的数量最小化,减少相互连线; 在功能模块一级,需要考

8、虑逻辑单元的使用量和运算速度问题; 对于逻辑单元,则需要考虑基本单元的使用及其连接方式; 晶体管级和版图的优化则限制着基本逻辑单元的规模。,数字集成电路设计的基本条件,熟悉电路的基本结构,设计方法和设计流程; 掌握硬件描述语言的特点和描述方法; 掌握相关综合工具和仿真工具的应用。,本课程内容安排,了解数字集成电路的结构特点 了解数字集成系统的基本设计方法 掌握常用EDA工具的基本使用方法 掌握VHDL的基本语法和主要编程要点 掌握常用数字单元电路的VHDL设计特点,教材,Digital Design Principles co,s: OUT bit); END fa; ARCHITECTURE

9、 rtl OF fa IS BEGIN s=a xor b xor ci; co=(a and b) or (a and ci) or (b and ci); end rtl;,Modelsim SE 5.5e使用要点,进行编辑,保存文件:命名/指定路径; 在源程序编辑窗口中对已保存的文件进行编译,结果可以在项目窗口中看到; 编译完成后,在项目窗口中将文件添加到项目中:Project/Add File to Project; 在其他工具中编译的文件也可以直接添加到项目中。,Modelsim SE 5.5e使用要点,进行编辑,保存文件:命名/指定路径;,对已保存的文件进行编译,在项目窗口中看到,

10、在项目窗口中,装载设计项目:vsim fa; 打开仿真波形窗口:add wave *; 对各输入信号进行设置: force -repeat 20 ns a 0 0 ns, 1 10 ns force -repeat 40 ns b 0 0 ns, 1 20 ns force -repeat 80 ns ci 0 0 ns, 1 40 ns,Modelsim SE 5.5e使用要点,在项目窗口中,装载设计项目:vsim fa;,打开仿真波形窗口:add wave *;,设置完毕后,在波形窗口中进行仿真并观察结果; 仿真完毕后,可以执行quit sim 命令退出仿真;,Modelsim SE 5.

11、5e使用要点,Modelsim SE 5.5e使用要点,在上述仿真中,没有考虑延迟时间,输入变化与输出变化发生在同一时刻,这属于逻辑仿真。 如果考虑器件的时间延迟,可以将源程序中的信号赋值语句改为如下形式: s=a xor b xor ci after 7 ns; co=(a and b) or (a and ci) or (b and ci) after 4 ns;,Modelsim SE 5.5e使用要点,Modelsim SE 5.5e使用要点,仿真测试文件:testbench,testbench相当于一块电路板,将HDL程序描述的电路块安装在上面; 该电路块与外界没有任何接口,其功能仅

12、仅是对电路块进行仿真测试,将各种驱动信号和输出信号在波形窗口中表达出来; HDL程序以元件例化的形式被testbench程序调用;,仿真测试文件:testbench,library ieee; use ieee.std_logic_1164.all; entity fa_testbench is end fa_testbench; architecture beh of fa_testbench is component fa port (a,b,ci: in std_logic; s,co : out std_logic); end component; signal xt,yt,zt,st

13、,cot:std_logic; begin u1: fa port map (xt,yt,zt,st,cot);,process begin xt=0;yt=0;zt=0; wait for 10 ns; xt=0;yt=0;zt=1; wait for 10 ns; xt=0;yt=1;zt=0; wait for 10 ns; xt=0;yt=1;zt=1; wait for 10 ns; xt=1;yt=0;zt=0; wait for 10 ns; xt=1;yt=0;zt=1; wait for 10 ns; xt=1;yt=1;zt=0; wait for 10 ns; xt=1;

14、yt=1;zt=1; wait for 10 ns; xt=0;yt=0;zt=0; wait for 10 ns; end process; end beh;,仿真测试文件:testbench,先分别将源程序和testbench程序添加到项目中; 先编辑编译源程序,再编辑编译testbench程序; 装载已编译的testbench程序: vsim mytestbench 将设计的信号添加到波形窗口中: add wave * 直接在波形窗口中执行“run”命令进行仿真;,逻辑综合,逻辑综合将HDL语言编写的行为模型转换为电路结构模型(网表)。 这种转换类似于C语言的编译器将C语言转换为机器语言

15、(二进制语言);,逻辑综合,综合过程从原文出发或原始电路图出发,经过逻辑分析,首先得出电路的详细描述,然后再进行逻辑优化,得到简化的逻辑表达,通过逻辑映射产生于实际电路单元的对应关系,最后基于这种映射关系给出电路的时间分析。,逻辑综合,综合过程一定要基于指定的单元库(或PLD器件)进行,选择不同的单元库会得出不同的电路结构; 在对HDL语句的综合时,只有具备硬件对应关系的语句才能被综合;不同的综合工具或单元库对语言的支持能力不同。,HDL综合工具:Synplify,一种专用的综合工具,可以支持较大范围HDL语句的综合; 带有较全面的PLD器件库,支持采用多家公司的各种CPLD或FPGA器件;

16、可以给出电路的RTL实现方式,为电路的进一步优化设计提供参考。,Synplify Pro 7.6基本使用流程,点击图标、打开程序; 建立约束和选项: 点击Impl Option按钮,打开约束和选项窗口;器件选择: 选择技术(公司型号)、器件类别、封装形式、速度级别;对布局选项进行设置(对于不同的技术,选项不同);,Synplify Pro 7.6基本使用流程,点击图标、打开程序;,Synplify Pro 7.6基本使用流程,约束选择: 通常采用自动约束方式,以评估设计可能实现的最快速度;自动约束只能对Atera和Xilinx的部分器件实行。要想对IO端口进行自动约束,应该在约束选项中,选择U

17、se clock period for unconstrained IO;否则系统只对触发器之间的通道进行约束。,Synplify Pro 7.6基本使用流程,打开或新建一个项目 (Open ProjectNew Project); 添加文件(Add File); 点击文件名,打开文本窗口,进行文件的输入编辑; 保存编辑完成的文件后,回到项目窗口,运行综合程序(Run);,对综合结果的分析,通过对综合文件进行分析(View Log),可以得到器件综合的各种信息: 时间特性(TIMING REPORT): 最长延迟时间/最高频率;各端口的时间信息; 面积特性(AREA REPORT): 器件使用

18、量(IO单元、LUT单元、DSP块),门输入数量,节点数量;,设计优化程度的衡量,通过对综合结果的分析比较,可以在一定程度上判断设计的优劣程度。在此阶段,设计的目标应该是使电路的频率最高,面积最小。需要注意的是,由于各公司的各种等级的器件性能不同,对设计优劣程度的比较应该在同一型号的器件上进行。,电路的结构视图,综合后的电路结构可以通过电路视图分析综合的效果,电路视图可以给出电路中所有基本器件的种类和数量,也给出端口和节点的数量;每个器件、端口、节点都给予了相应的命名;在电路视图中双击任何器件,可以显示程序中与之相关的语句;,RTL视图,由基本电路单元连接成的电路,与综合器件无关,由于不同语句

19、不同方法会导致不同的RTL电路,因此RTL电路可以用于客观地评价电路的设计效果;根据该电路使用的逻辑单元,可以估计电路中各路径的延迟时间,为前仿真提供支持。,技术视图,与综合器件相关的电路图; 选择不同的器件可以综合出不同的技术视图;分为单元电路图和门级电路图两种形式;,单元电路图,显示电路使用的PLD单元块的使用量和相应的连接关系,可以用于评价该电路采用PLD设计时在特定器件中的使用情况;,门级电路图,将电路在器件中的实现情况分解为基本逻辑单元的连接方式,可以用于分析电路的逻辑关系,便于电路优化时进行修改。,PLD设计的时间特性分析,在技术视图中,可以查看各器件的时间特性(HDL Analy

20、stShow Timing Information),选择这一操作后,每个器件上用红色数字标明该器件的信号到达时间和时间容限;可以通过显示关键路径(Show Critical Path)选出最长延迟路径;对关键路径的分析有利于对电路结构进行优化。,设计工具:MAX+PLUS ,PLD主要厂商Altera公司设计的EDA工具; 可采用原理图输入和文本输入等多种设计输入方式; 可支持VHDL、Verilog HDL、AHDL等多种硬件设计语言; 可进行编辑、编译、仿真、综合、芯片编程等设计全过程操作;,MAX+PLUS 的主要使用方法,设计输入: 点击图标、打开程序; 建立新文件,打开文本编辑器

21、file/save:建立一个.vhd文件; 输入编辑VHDL程序; 输入完毕之后保存文件;,MAX+PLUS 的主要使用方法,建立项目、指定器件: 选择file/project/set project to current file,为当前文件建立项目; 选择asigne/device: FLEX10K/AUTO,为编译目标指定PLD器件;,MAX+PLUS 的主要使用方法,检查、编译: 对程序进行保存、检查;根据检查提示错误对程序进行修改,直到完成检查; 使用编译器对程序进行编译; 编译成功后,可选择file/create default symbol 将所设计电路保存为符号文件(模块);,

22、MAX+PLUS 的主要使用方法,设计结果分析: 在文本编辑器中,打开同名的.rpt文件(报告文件),检查对所选择PLD器件编程的详细结果;利用Floorplan Editor中检查器件的布局连线情况;利用Timing Analyzer检查器件各端口间的传输延迟;,MAX+PLUS 的主要使用方法,仿真信号设置: 打开波形编辑器(waveform editor); 用右键点击Name区域,点击List,选定端口; 在File/End time中选择仿真时间长度,在Option/Grid size中选择时钟刻度; 单击输入端口的value,设定输入信号波形: 完成所有输入信号的设定后,保存文件;

23、,MAX+PLUS 的主要使用方法,器件仿真: 打开仿真器(simulator),进行仿真;仿真结束后OpenSCF即可看到各输出信号的波形;可以检查输入/输出关系是否符合设计要求; 由于编译时已经将设计对应到具体器件中,因此仿真结果会带有相应的时间延迟,类似于前仿真。,MAX+PLUS 的主要使用方法,器件下载: 打开仿真器(simulator),进行仿真;仿真结束后OpenSCF即可看到各输出信号的波形;可以检查输入/输出关系是否符合设计要求; 由于编译时已经将设计对应到具体器件中,因此仿真结果会带有相应的时间延迟,类似于前仿真。,利用图形输入法的设计,通常在PLD厂商提供的综合EDA工具

24、中,都可以采用原理图的形式进行设计输入: 打开程序,选择建立一个图形文件,打开图形编辑窗口;在图形编辑窗口中双击,可以从各种库中选取需要的各种功能器件和端口; 对器件进行连线,可以通过电路逻辑图实现电路设计。,MAX+PLUS 中包含的器件库,基本门级单元库:包含主要的基本逻辑单元和端口,如NOT、AND、OR、XOR、LATCH、FF等; 常用功能单元库:主要是74系列的各种中规模功能模块,如译码、编码、MUX、加法、比较、寄存器、计数器等; 参数化模块库:常用的组合及时序模块,端口数量和功能可以自由设定。,采用波形输入方法进行电路设计,打开程序;打开波形编辑窗口; 双击Name区域,对输入

25、/输出端口进行设置命名; 端口设置完毕后,点击各端口的取值区为各端口设置信号;,采用波形输入方法进行电路设计,对组合电路,通常按真值表方式设置输入信号; 对于时序电路,通常按状态转换图的顺序设置信号; 信号设置完毕后,将设计文件保存为(.wdf)文件; 保存之后,就可以通过编译形成模块符号及相应的电路文件;,MAX+PLUS 的特点,可以使用多种设计输入方法进行设计; 可以在同一工具中完成从设计输入、综合、仿真直到下载到器件的整个设计流程; 具有丰富的数据库可以利用; 只能采用可综合的设计语言,对VHDL的支持面较小。,VHDL硬件描述语言 Very high speed integratio

26、n circuits HDL,起源: 1985年,美国国防部提出计划; 1987年成为IEEE1076标准; 1993年进一步修订完善; 是目前标准化程度最高,适应性最广的HDL语言;,VHDL硬件描述语言 Very high speed integration circuits HDL,特点: 全方位硬件描述从系统到电路 多种描述方式适应层次化设计 数据类型丰富,语法严格清晰 串行和并行通用,物理过程清楚 与工艺结构无关,可用于各类EDA工具,VHDL描述形式,硬件电路模型: 电路模块,具有外部接口和内部结构 VHDL:用于描述硬件的结构性程序,采用文本文件编写;用程序模块表达硬件模块:设定

27、外部端口,设计内部结构。,VHDL的程序结构,VHDL程序由模块构成,每个模块对应于一个电路块; 模块由三部分组成: 库和包 library(设计资源) 实体 entity (外部端口) 构造体 architecture(内部结构),VHDL的程序示例,library ieee; use ieee.std_logic_1164.all; entity inhibit is port ( x,y: in std_logic ; z: out std_logic); end inhibit; architecture rtl of inhibit is begin z=1 when x=1 and

28、 y=0 else 0; end rtl;,简单的实体,entity entity-name is port (signal-name : mode signal-type; signal-name : mode signal-type); end entity-name;,比较复杂的实体,ENTITY 实体名 IS GENERIC语句; PORT语句; (BEGIN 决断语句、过程调用、进程说明等) END 实体名;,VHDL的实体: entity,要点: 实体以 entity 实体名 is 开始;以end 实体名; 结束; 实体的主要内容为端口(port)说明,其中主要包括: 实体名、信号

29、名、信号模式、信号类型,实体名称和信号名称,每个实体在设计中对应一个电路模块,实体中的每个信号在设计中对应模块的一个端口;实体名称和信号名称应具有意义,方便记忆;名称不能重复使用; 对模块进行编译时,文件名和项目名必须与实体名相同;,实体名称和信号名称,名称由英文字母和数字构成,英文字母开头;可在名称中使用不连接的下划线符号_;字母不分大小写; 不能与关键字冲突。,实体名称和信号名称,例:合法的名称 name , name2, name_a, name_2_3m; 非法的名称 ill_egle、_illegle、illegle_、2bad、ill egle、ill/egle 特殊的名称 74L

30、S04、vhdl、VHDL,信号模式,每个端口信号都必须规定信号模式; 信号模式规定信号流动的方向; in 输入端口 out 输出端口 inout 双向端口 buffer 缓冲输出端口,内部端口Y与外部端口X的连接规则,从外向内: X Y in in out out inout 任意 (可通过多源控制) buffer 任意 (只能通过单源控制),内部端口Y与外部端口X的连接规则,从内向外: Y X in in、inout、buffer out out、inout inout inout (可通过多源控制) buffer buffer (只能通过单源控制),信号数据类型,所有信号都必须规定其类型

31、; 数字电路设计中最简单的类型为: bit bit_vector 最常用的类型为: std_logic 单个逻辑量 std_logic_vector 逻辑数组、总线逻辑量,实体的其它语法要点,除了第一行 entity is 以外,每一句以分号“;”结束 ; 编写程序时,一行可以含若干句(以分号间隔),一句也可以写若干行; 可以用“-”符号后接说明文字,这些文字用于帮助理解程序,不会对编译产生影响; 单词之间必须使用空格;并列信号间使用逗号;,实体编写的示例 4选1数据选择器 kmux4,entity kmux4 is port ( d0,d1,d2,d3: in std_logic; a0,a

32、1 : in std_logic; s : in std_logic; y : out std_logic); end kmux4;,实体编写的示例 4选1数据选择器 kmux4,entity kmux4 is port ( d: in std_logic_vector (0 to 3); a : in std_logic_vector (1 downto 0); s : in std_logic; y : out std_logic); end kmux4;,类属说明 generic,实体中可以设置类属说明语句; 类属说明位于port语句之前; 类属是对电路模块可变常数的说明; 类属值在编写

33、本模块时可以设置为一个确定值;在其他程序调用该模块时,可以对类属值进行重新设定;,类属说明的基本格式,generic ( cons_name : cons_type: =cons_value ; cons_name : cons_type: =cons_value) ;,类属说明的示例,entity kmux_n is generic(n:integer:=4; m:integer:=2); port ( d: in std_logic_vector (n-1 downto 0); a : in std_logic_vector (m-1 downto 0); s : in std_logic

34、; y : out std_logic); end kmux_n;,类属说明的示例,通过调用时改动常数,得到16位的MUX :u1: kmux_n generic map(16,4) port map (x,y,e,f);,Testbench的实体,测试板是一种特殊的电路模块,只用于电路的仿真,因此该实体可以不含任何输入/输出端口。(该实体不可综合) 例: entity fa_testbench is end fa_testbench;,VHDL的构造体: architecture,architecture arch_name of entity_name is 说明部分 declaratio

35、ns and definitions; begin 语句部分 concurrent statement; end arch_name;,构造体语法要点,每个构造体必须属于一个实体; 每个构造体必须有一个名称: 通常可以根据描述方式起名: str rtl beh 构造体分为两部分: is bigin: 说明语句; bigin end: 并行语句;,构造体的说明语句,type declarations; 类型说明 signal declarations; 信号说明 constant declarations; 常量说明 component declarations; 元件说明 function d

36、efinitions; 函数说明 procedure definitions; 过程说明,构造体的并行语句,信号赋值语句 数据流描述 元件例化语句 结构描述 进程语句 行为描述 每条并行语句形成一个电路逻辑单元。,构造体的其他语法要点,除了第一句和begin句外,其余各句均以分号结束; 在每一部分中,各语句处于并列状态,执行时不分先后次序; 定义语句需要考虑使用的顺序。,VHDL的数据对象,Signal 信号 Constant 常量 Variable 变量 每个数据对象必须有特定的名称; 数据对象的命名规则与实体名相同;,VHDL的信号:signal,电路中端口、连接线的体现,具有具体物理含义

37、,在构造体内为全局变量; 信号使用前必须先进行说明: 输入/输出信号在实体中说明; 通用信号在包集合中进行说明; 模块内部信号在结构体内说明;,信号说明语句基本格式,signal signal_name : signal_type; 信号名 信号类型 例:signal temp : std_logic; signal bus_a : std_logic_vector(7 downto 0); 注意:端口(输入/输出)信号已在实体中说明,在结构体中就不再说明;,信号的赋值,在程序中采用“=”(赋值语句)进行: 信号名 = 信号值(表达式); 例: temp=1;z=x and not y; d=

38、“0110”; 赋值号两边的信号原则上必须为相同类型; 信号可在构造体内、过程、进程内赋值; 信号不能在函数内赋值;,VHDL的常量: constant,根据说明所在的位置,可表现为全局或局部常量; 常量必须在说明时赋值,所赋值与说明的类型必须一致;常量一旦赋值就不能在程序中通过语句更改; 常量不一定有硬件对应;常见的硬件对应是固定的接地线或正电源。,常量说明语句基本格式,constant 常量名:常量类型:= 常量值 例: constant vcc: real:= 5.0; constant grn: std_logic:= 0; constant tpd: time:= 5ns; cons

39、tant fbus:std_logic_vector:=“0110”;,VHDL的变量: variable,表达各类运算中间量,通常对应于计算机中的一个存储位置,没有具体硬件对应,主要用于电路的行为描述; 变量在子程序(函数、过程、进程)中进行说明,只能为局部变量; 变量只在顺序语句中使用;,变量说明语句基本格式,variable 变量名:变量类型 例: variable temp : std_logic; variable bus_a : std_logic_vector(7 downto 0);,变量的赋值,采用“:=”符号进行: 变量赋值语句 变量名:= 变量值(表达式); 例: va

40、:= a ; te := d+c; wb := “1001”; 赋值号两边变量必须为相同类型;,变量的赋值,变量在定义时需要赋初始值: 例: variable c:integer range 1 to 10:=10; variable d:std_logic_vector(7 downto 0):(others=0); 当没有指定初始值时,默认为其数据类型中的第一个值(最左边的值);,变量的赋值,注意: 变量只在函数、过程、进程等子结构中使用,一旦子结构执行结束,变量值随即消失; 因此,在一个结构体中,同一个变量名可以出现在不同的子程序中,表达不同的数据对象。,VHDL的数据类型,每一个数据对

41、象都必须规定其类型; 类型规定了数据的数据形式、取值范围、排列顺序、可进行的运算; VHDL规定了若干预定义类型,用户可以利用预定义类型来设置自定义类型;,常用预定义类型,预定义类型在相关的包集合中定义std.standard: bit(位)、boolean(布尔) integer(整数)、real(实数)ieee.std_logic_1164: std_logic(标准逻辑量);ieee.std_logic_arith: signed、unsigned;,常用预定义类型,bit、bit_vector:2值逻辑 数据范围(0,1),用于逻辑运算 说明方式: signal x:bit;-x为1位

42、逻辑信号; signal y:bit_vector(3 downto 0);-y为4位逻辑信号,最高位为y(3),在最左边;,常用预定义类型,bit、bit_vector:常数表达形式 一位逻辑量采用单引号: 1 0 多位逻辑量采用双引号: 1001 可以采用其他进制的缩写形式: b 1001 o 7777 xffff,常用预定义类型,boolean:(falth,true) 逻辑量,用于关系判断; 可进行逻辑运算; 不能表达为多位数组;,常用预定义类型,integer:(-231-1 - +231-1) 算术量,用于算术运算; 其子集合有natural和positive; 考虑到电路综合效率

43、,对于整数类型,可以在说明时对数据范围进行限制;,常用预定义类型,例:整数类型的范围 entity t is port(a,b: in integer range 0 to 15; f: out bit); end t; 如果不加范围限制,a、b都是32位,加限制后,变为4位;,常用预定义类型,整数类型的一些常数表达形式 十进制数 120000=12E4=120_000 ; 二进制数 2#1111_1111#=2:1111_1111: 16进制数 16#FFFF#=16:FFFF:,常用预定义类型,character、string:ISO 8位字符集(前128个为ASC编码符号),综合性较差,

44、主要用于仿真; 在字符类型中,大写字母和小写字母表达不同含义,需要加以区分; 例如:A和a分别表达不同的字符。,常用预定义类型,可通过连接运算将字符组合为字符串,或将短字符串连接成长字符串: ,常用预定义类型,real:(-1038 - +1038)算术量,只能用于抽象描述及仿真,不可综合; 例:十进制数 120000.0=1.2E5=12.0E4 time:物理量,由整数和相关单位字符构成,不可综合; 例: 50 ns 3 sec 25 hr 可进行算术运算,常用预定义类型,std_logic、std_logic_vector:8值逻辑 数据范围(X,0,1,Z,W,L,H,-) std_u

45、logic、std_ulogic_vector:9值逻辑 数据范围(U,X,0,1,Z,W,L,H,-) 用于逻辑运算;,常用预定义类型,std_logic、std_logic_vector:8值逻辑 数据范围(X,0,1,Z,W,L,H,-) 用于逻辑运算; X:强不定; 0:强0; 1:强1; Z:高阻 W:弱不定; L:弱0; H:弱1; -:不出现; 只有0、1、Z可以综合,其他只用于仿真;,常用预定义类型,std_logic、std_logic_vector:特点 此类信号能够更清楚地表现电路中的实际电平情况; 设置有解决总线冲突问题的专用函数; 当多个电平连接到同一接点上的时候,

46、可以根据该判决函数决定连接点状态。,常用预定义类型,std_logic、std_logic_vector:判决函数表,常用预定义类型,std_ulogic、std_ulogic_vector:9值逻辑 数据范围(U,X,0,1,Z,W,L,H,-) 增加了一个初始不定值:U; 8值逻辑是它的子集合; 缺少总线冲突函数,只能通过设计消除总线冲突。,常用预定义类型,signed、unsigned:符号数和无符号数 属于二进制算术量,可以通过重载函数(overload)支持算术运算;相关运算规则在IEEE.std_logic_arith中定义。,用户定义数据类型,VHDL允许用户自行定义类型; 自定

47、义类型的元素实际上全部来自预定义类型; 用户定义类型必须在使用以前进行类型说明; 用户定义类型可以分为以下三种形式: 子类型 枚举类型 数组类型,子类型,从已有类型中取连续子集合加以定义 例: subtype twoval_logic is std_logic range 0 to 1; subtype bitnum is integer range 31 downto 0 ; 子类型的数据可以和原有类型的数据进行直接运算;子类型的数据宽度与原有类型的数据宽度一致;,子类型,当原有类型为integer时,也可以采用下列简化定义,省略类型说明: type 子类型名称 is range 起点 to

48、 终点; 例: type a is range 32 to 212; 整数升序定义 type b is range 31 downto 0; 整数降序定义,枚举类型,通过列举全部元素集合进行定义: type type-name is ( value list) ; 例: type move is (1,0,A,a); type tra_light is (reset, stop, wait, go); type color is (red,green,blue,white,black),枚举类型的特点,在括号中按顺序列举该类型中的全部元素;各元素间以逗号分隔; 在枚举类型中,数据大小关系根据顺

49、序进行排列,从小到大,并根据数据元素的数量,采用最短的二进制自然码表达;,数组类型,数组为同类型元素的有序排布(从左向右),每一元素与一个数组指标对应; 数组指标通常为整数;也可以采用枚举类型的元素来表达。 只有一维和二维数组可以综合,高维数组不可综合;,数组说明示例,type byte is array (7 downto 0) of std_logic; type monthly_count is array (1 to 12) of integer; type length is array (natural range ) of bit;,数组下标可以按升序或降序排列,也可以采用不定范

50、围;,数组说明示例,constant word_len: integer := 32; type word is array (word_len-1 downto 0)of std_logic; constant num_regs: integer := 8; type reg_file is array (1 to num_regs) of word;,数组下标也可以采用常数参量定义;,多维数组定义的示例,type row is array (7 downto 0) of std_logic; -先定义一维数组; type matrix is array (0 to 3) of row; -

51、再定义1x1数组; type matrix is array (0 to 3) of std_logic_vector (7 downto 0); -直接定义1x1数组; type matrix is array (0 to 3,7 downto 0) of std_logic;-直接定义2维数组;,数据类型的转换,当数据需要交替进行算术和逻辑运算时,就需要进行数据转换; 一般的类型转换通常由专门的函数进行,这些函数存放在特定的包集合中; 子类型与基本类型之间可以直接赋值,不需要进行类型转换;个别非常关联的类型可以通过赋值进行直接转换;,常用的数据类型转换函数,包集合:ieee.std_log

52、ic_1164 bitstd_logic : to_stdlogic(a) std_logicbit : to_bit (a) bit_vectorstd_logic_vector : to_stdlogicvector(a) std_logic_vectorbit_vector : to_bitvector (a),常用的数据类型转换函数,包集合:ieee.std_logic_unsigned std_logicinteger : conv_integer (a) 包集合:ieee.std_logic_arith integerstd_logic : conv_std_logic_vecto

53、r( a, l ) 注:a 为待转换量,l为转换后数组的位长度;,VHDL的运算符号,运算符号主要用于各类表达式中; VHDL中主要有六类运算符号: 赋值运算、逻辑运算、算术运算 关系运算、连接运算、移位运算,运算的优先顺序,VHDL中运算没有左右优先级差别,同一表达式中进行多个运算时必须用括号表达先后差别; 在一般运算中,优先顺序排列为: 算术关系逻辑 在同类运算中,单目运算优先; 在所有运算符号中,NOT的优先级别最高; 可以通过加括号来改变运算的优先顺序;,运算赋值, 数组内部分元素赋值(括号内使用);,运算赋值,所有数据类型都可以进行运算赋值; 赋值号两边的数据类型原则上应该相同; 在

54、进行赋值时,若右端数据类型难以判断,可以在数据前加上“类型名”进行限定。 例:a0=std_logic_vector ( 01101010 );,数据赋值的例子:信号、变量、常量,signal x1:std_logic; variable y:std_logic_vector(3 downto 0); constant z:std_logic_vector(7 downto 0):= 11101100; x1,others=0);,数据赋值的例子:1维数组、整数下标,signal x1:std_logic_vector(7 downto 0):=11101100; x1 0011, 3=Z,

55、others =0); x1(4 downto 2) =110; x1(5) =1;,数据赋值的例子:1维数组、自定义下标,type traffic_light_state is (reset, stop, wait, go); type statecount is array (traffic_light_state) of bit; signal x2:statecount; x2(stop)=1; x2(stop to go)=110;,数据赋值的例子:1X1维数组,type row is array (7 downto 0) of std_logic; type matrix is a

56、rray (0 to 3) of row; signal x3:matrix; x3 =(00001111,00101100, 11010011,11000011); x3(2)=11010011; x3(2)(4)=1;,数据赋值的例子:2维数组,type matrix2 is array (0 to 3,7 downto 0) of std_logic; signal x4:matrix2; x4 = (00001111,00101100, 11010011,11000011); x4(2,7 downto 0)=11010011; x4(2,4)=1;,逻辑运算,not and or n

57、and nor xor 适用数据类型:逻辑量 bit、bit_vector boolean std_logic、std_logic_vector,逻辑运算,逻辑运算与基本逻辑单元器件形成直接对应; 逻辑运算结果为同类型逻辑量; 对数组类型进行逻辑运算时,参与运算的两个数据位数必须相等,所做运算为对应位进行;,逻辑运算,合法的逻辑运算: x= not a and b; x= not (a and b); x= (a or b) and c; x= a or (b and c); x= a and b and c; 不合法的逻辑运算: x=a or b and c;,算术运算,/ (除)* (乘)

58、 + (加) - (减) mod(求模) rem(取余) *(指数) abs(绝对值) 适用数据类型:算术量 integerrealsignedunsignedtime 使用ieee.std_logic_signed和ieee.std_logic_unsigned后,可以对std_logic和std_logic_vector进行加减运算;,算术运算,算术运算用于抽象的编程(行为设计); 只有少数算术运算符能够进行综合:加、减、乘;综合结果与工具有关; 通常算术运算的程序通过后,还需要对所使用的加法器、乘法器进行具体设计优化;,比较运算,= (大于等于) (大于) (小于) /= (不等于) = (等于) 适用数据类型: =和/=适用于所有类型; 其他运算适用于整数、实数、位、位矢量,以及枚举类型和数组类型;,比较运算,比较运算对应于比较器,通常由异或门构成,能够综合; 比较运算可以比较位长度不相同的情况(从左对齐,向右逐位比较); 比较运算的结果为boolean类型: false true,连接运算,y=1101;z=x 使用连接运算时需要注意数据类型的匹配。,分割运算,将一个已知的数组对象分割为不同的部分,类似于连接运算的逆运算; 例: signal word:bit_vector(7_downto 0); alias mb:bit is wo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论