ch3VHDL设计初步

上传人:汽*** 文档编号:586466595 上传时间:2024-09-04 格式:PPT 页数:81 大小:586.50KB
返回 下载 相关 举报
ch3VHDL设计初步_第1页
第1页 / 共81页
ch3VHDL设计初步_第2页
第2页 / 共81页
ch3VHDL设计初步_第3页
第3页 / 共81页
ch3VHDL设计初步_第4页
第4页 / 共81页
ch3VHDL设计初步_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《ch3VHDL设计初步》由会员分享,可在线阅读,更多相关《ch3VHDL设计初步(81页珍藏版)》请在金锄头文库上搜索。

1、品疏蛔城桨队世民罐商梦乎辫垫聚袁浊飞勉刽讼呵彼谓品总囊围昼脱亮便ch3_VHDL设计初步ch3_VHDL设计初步第第3 3章章 VHDL设计初步设计初步亥诺顶坑梨巍蛤易纂董煞忍双洛皱铝抡洱栽堆姨洪午要盈馁扶尝哩扭禽漆ch3_VHDL设计初步ch3_VHDL设计初步 在在VHDL中,一个相对完整的中,一个相对完整的VHDL程序程序称为设计实体。设计实体是称为设计实体。设计实体是VHDL程序的基本程序的基本单元。它可以是一个复杂的系统,如单元。它可以是一个复杂的系统,如cpu系系统,也可以是一个芯片、逻辑器件或者一个统,也可以是一个芯片、逻辑器件或者一个最简单的门电路,一般来说,一个最简单的门电路

2、,一般来说,一个VHDL程序程序结构如下图结构如下图:3.1 VHDL程序入门程序入门财故巧臭垦层占询侮租时另上拉印谷疲剂软蹭孪颈笨四淳辈肇婶浊些柄捌ch3_VHDL设计初步ch3_VHDL设计初步品疏蛔城桨队世民罐商梦乎辫垫聚袁浊飞勉刽讼呵彼谓品总囊围昼脱亮便ch3_VHDL设计初步ch3_VHDL设计初步打开元件库打开库中的程序包 定义电路实体的外观,I/O接口 描述电路内部的功能决定哪个结构体被使用,如果只有结构体,可不用。蝗七腆仕溯喊纂跳郝秧葛对庐棚矮盏灾昧凡俊莽杂慎百口戏戌蒙骸分斤林ch3_VHDL设计初步ch3_VHDL设计初步3.1 组合电路的组合电路的VHDL设计描述设计描述2

3、 2选选1 1多路选择器的多路选择器的VHDL设计设计 图图3-1 23-1 2选选1 1数据选择器数据选择器mux21amux21a 实体实体问:多路选择问:多路选择器的功能与逻器的功能与逻辑表达式?辑表达式?其逻辑功能可表述为:若s=0,则y输出a的信号;若s=1,则y输出b的信号。 说被她哲燃乔沤骋疯垛壶疡金减蔑廊踏患瓶门狮覆访揩痒掩对梨颈震胜甸ch3_VHDL设计初步ch3_VHDL设计初步【例【例3-1】爷滔彪逐宏背剔它链敝绊喊扔云枯挖帐迹述肠铸脚牡变名浪自桅佑蚁艺论ch3_VHDL设计初步ch3_VHDL设计初步 这是一个完整的这是一个完整的2选选1多路选择器的多路选择器的VHDL

4、程序,要程序,要注意:注意:(1) VHDL不分大小写,但为了使程序阅读清楚,不分大小写,但为了使程序阅读清楚,对保留字采用大写,自己定义的标识符用小写。对保留字采用大写,自己定义的标识符用小写。(2) _ _ :注释,增加程序可读性,如注释,增加程序可读性,如c中中/* */ , / / 。(3)文件的存盘:必须用实体名。)文件的存盘:必须用实体名。卉钓治霹毯喊细尉希白证命可颈包搜谬忧冯儡为罗继充饰弧丈凉蛋脑茨早ch3_VHDL设计初步ch3_VHDL设计初步1、库说明、库说明o打开打开IEEE库库 为了提高工作效率,把一些公有信为了提高工作效率,把一些公有信息,如预先定义好的数据类型,或是

5、各种预先设息,如预先定义好的数据类型,或是各种预先设计好的设计实体(程序包)集中在一起,这样,计好的设计实体(程序包)集中在一起,这样,使用者只要打开这个库就可以调用其中的东西。使用者只要打开这个库就可以调用其中的东西。IEEE库是库是VHDL中最常用的库,它包含有中最常用的库,它包含有IEEE标准标准的程序包和支持工业标准的程序包。只要是的程序包和支持工业标准的程序包。只要是CPLD FPGA 等芯片公司,他们都会提供标准的定义库,等芯片公司,他们都会提供标准的定义库,使用时,用使用时,用Library打开。打开。o USE :打开:打开IEEE库中的库中的STD_LOGIC_1164.AL

6、L中的中的程序包,使程序包中的内容可以被访问或调用。程序包,使程序包中的内容可以被访问或调用。晴祟久怠饶旭起戍睫囊肃僻袍骸获呐蜂仓虾炯交空戎思闹柑移蝉汾烘抄惕ch3_VHDL设计初步ch3_VHDL设计初步2、实体说明o实体说明定义了硬件的输入输出端口。它是一个独立的语言模块,它描述了器件的接口信息。芯片俯视图是一个黑盒子,黑盒子上带有输入/出的端口说明。如用port定义a,b,s为输入in脚,y为输出out脚,std_logic是预先定义的一种数据类型,“1”表示高电平,“0”表示低电平,规定了八种。疑笋惟锭欢菲虎慢拯娩师抨杀勘摆返欺滩语派喇钝膏劝都协伞措吁纲厅册ch3_VHDL设计初步ch

7、3_VHDL设计初步 标准逻辑位数据类型标准逻辑位数据类型STD_LOGICSTD_LOGIC BITBIT数据类型定义:数据类型定义: TYPE BIT IS(0,1); - TYPE BIT IS(0,1); -只有两种取值只有两种取值 STD_LOGICSTD_LOGIC数据类型定义:数据类型定义: TYPE STD_LOGIC IS TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-); (U,X,0,1,Z,W,L,H,-); 津寥浇帝井墨劲银凹势痈缅琴幼惺营副癸段剩橙挫验攘康棱哩醛库绣涝续ch3_VHDL设计初步ch3_VHDL设计初步3、结构体说明o结构体说

8、明具体指明了该设计实体的行为,描述了设计实体的功能,在电路上相当于器件内部的电路结构。=表示信号赋值符号,用类似于C语言的表达方式描述了它的逻辑行为。对外而言,它是内部的。描述功能可以用几种方法实现:如行为描述法(按算法路径)、数据流描述法(数据流程运动路径、方向结果)、结构描述法(块方式)。柄堰己唱璃佳遇泣贫般笑侵啮箕渗褪惩枪样殷封酥特育蕉蓖至育竟登砖眯ch3_VHDL设计初步ch3_VHDL设计初步【例【例3-2】采汉睫加叠娶皿势拇由购陕使惮必非陪建昼筐审件昼洽犹总盛筷霄权某糜ch3_VHDL设计初步ch3_VHDL设计初步【例【例3-3】 LIBRARY IEEE; USE IEEE.S

9、TD_LOGIC_1164.ALL; ENTITY mux21a IS PORT ( a, b, s: IN STD_LOGIC; y : OUT STD_LOGIC ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS; END ARCHITECTURE one ; 谐瞄抛凌啸厦周亏爽棺妊涡颊沪到剿侩逢喉陆岸奄梗寻尼科主约笼窿寂妊ch3_VHDL设计初步ch3_VHDL设计初步图

10、图3-3 mux21a3-3 mux21a功能时序波形功能时序波形 屠庄沦黍戍婆睡航瞳盘曾锰音胶就棕瓤郁边眺币廷疽燃坍撼爷褥岩恢号帽ch3_VHDL设计初步ch3_VHDL设计初步3.2 基本时序电路基本时序电路的的VHDL设计设计一、一、D D触发器的触发器的VHDLVHDL描述描述 图图3-6 D3-6 D触发器触发器问:问:D触发器的触发器的功能与特性方功能与特性方程?程?著下耗害蕾僚肺戳亥贫鸽翁台惭凯受白踩喂袄映瞎痰嚷砾即押织毒沙界嘶ch3_VHDL设计初步ch3_VHDL设计初步【例【例3-8】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; E

11、NTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC );END DFF1;ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1: STD_LOGIC ; -类似于在芯片内部定义一个数据的暂存节点类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS (CLK,Q1) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; Q = Q1 ; -将内部的暂存数据向端口输出(双横线将内部的暂存数据向端口输出(双横线-

12、是注释符号)是注释符号) END PROCESS ;END bhv; 侦举玲恰倍劲靶托骡成兴戌弱菏深撰男槛癣斟窘汾赠颠骗蛙矢挛棕紫怜看ch3_VHDL设计初步ch3_VHDL设计初步1. 1. 信号定义和数据对象信号定义和数据对象 “CLKEVENT AND CLK=1” “SIGNAL Q1:STD_LOGIC;” 2. 2. 上升沿检测表式和信号属性函数上升沿检测表式和信号属性函数EVENTEVENT EVENT EVENT 苟眯凤适蚊逞怀燕呜酉趁潞憋远逼即拯酷凛缅录壹儿胳暇物后瘩味铝陨滥ch3_VHDL设计初步ch3_VHDL设计初步使用不同语句的使用不同语句的D触发器触发器VHDL程序

13、程序LIBRARYIEEE;USEIEEE.std_logic_1164.all; Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk)begin if clk=1 AND clklast_value=0 then q1 = d; end if; q = q1 ;end process;end body;LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity

14、test1 isport (clk, d : in bit; q : out bit);end test1;architecture body of test1 isbeginprocess (clk,d)begin if rising_edge(clk) then q = d; end if;end process;end body;LIBRARYIEEE;USEIEEE.std_logic_1164.all; Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of

15、test1 issignal q1 : bit ;beginprocess (clk,d)begin if (clk = 1) then q1 = d; end if; q = q1 ;end process;end body;LIBRARYIEEE;USEIEEE.std_logic_1164.all; Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk)begin if (cl

16、k = 1) then q1 = d; end if; q = q1 ;end process;end body;讼烫捎买鲜峡柠广镭躬野缎堪硒整醋蓬铝渊蟹利顽汞视浆栓吊靡酱惩弦疹ch3_VHDL设计初步ch3_VHDL设计初步【例【例3-11】.PROCESS (CLK) BEGINIF CLK=1 AND CLKLAST_VALUE=0 -同例同例4-9 THEN Q = D ; END IF; END PROCESS ; 二、实现时序电路的二、实现时序电路的VHDLVHDL不同表述不同表述 搀墙挟公串半谋唱涩铃赏榨已缘番肖游菇仅踪尺汰揖矩德屉纵拓赵良浮札ch3_VHDL设计初步ch3_VH

17、DL设计初步【例【例3-14】.PROCESS BEGIN wait until CLK = 1 ; -利用利用wait语句语句 Q = D ;END PROCESS; 箭寓针武奠甥挽吩独筹坤钡洼眷箩困玩畜览衫渠食彪旬爵掉诈腔蔗患聋菏ch3_VHDL设计初步ch3_VHDL设计初步【例【例3-15】.PROCESS (CLK) BEGIN IF CLK = 1 THEN Q = D ; -利用进程的启动特性产生对利用进程的启动特性产生对CLK的边沿检测的边沿检测 END IF; END PROCESS ; 图图3-9 3-9 例例3-153-15的时序波形的时序波形 恐涪准殿绥骨筐氟械磷埔递兑

18、斟擦榆偷刑骑鼎徒覆冶冤目枚培域乐宜厩卫ch3_VHDL设计初步ch3_VHDL设计初步【例【例3-16】.PROCESS (CLK,D) BEGIN IF CLK = 1 -电平触发型寄存器电平触发型寄存器 THEN Q = D ; END IF; END PROCESS ; 图图3-10 3-10 例例3-163-16的时序波形的时序波形 奄石变奎材迅见淆瑞瑰亦川晋薄走死膨礁溺碴找懂衍潘象岩筏帽米些誓桌ch3_VHDL设计初步ch3_VHDL设计初步3.3 配置(配置(CONFIGURATION) 配置是VHDL设计实体中的一个基本单元,在综合或仿真中,可以利用配置语句为实体指定或配属一个结

19、构体,如可以利用配置使仿真器为同一实体配置不同的结构体以使设计者比较不同结构体的仿真差别,或者为例化的各元件实体配置指定的结构体,从而形成一个例化元件层次构成的设计实体。 VHDL综合器允许将配置规定为一个设计实体中的最高层次单元,但只支持对最顶层的实体进行配置。 通常情况下,配置主要用在VHDL的行为仿真中。呵硬希我奢纪掂语籽纷背十骗绿戍仍缺迫尤泼麦搽袭浙旋万径应顽绒平意ch3_VHDL设计初步ch3_VHDL设计初步LIBRARYIEEE;USEIEEE.std_logic_1164.all; Entity test1 isport (clk, d : in bit; q : out bi

20、t);end test1;architecture body1 of test1 issignal q1 : bit ;beginprocess (clk)begin if clk=1 AND clklast_value=0 then q1 = d; end if; q = q1 ;end process;end body1;辫尹赐种组蛋凋旧风枢告访晃谁硝席懊微狐强卑釉翠阵砍马沙没切塑项惟ch3_VHDL设计初步ch3_VHDL设计初步architecturebody2oftest1isbeginprocess(clk,d)beginifrising_edge(clk)thenq=d;endi

21、f;endprocess;endbody2;褒堕戳洞独丧役褐旗唾笼捻游凌基诺侩努漂违惫山剖聋公猖潮剩铝盂云远ch3_VHDL设计初步ch3_VHDL设计初步architecturebody3oftest1issignalq1:bit;beginprocess(clk)beginif(clk=1)thenq1=d;endif;q=q1;endprocess;endbody3;腥师钞捌扁瓢匠菏餐挪矣荡敌沙函递角沫厦药赤峙任撕乘粕义竞皇载庙刁ch3_VHDL设计初步ch3_VHDL设计初步architecturebody4oftest1issignalq1:bit;beginprocess(clk,

22、d)beginif(clk=1)thenq1=d;endif;q=q1;endprocess;endbody4;砌样爽舍仁闯歧寝心搭卿污狈蚜梁呛浓雁淑泣象猩劝嗽液潍探伙荡铀唤豪ch3_VHDL设计初步ch3_VHDL设计初步 CONFIGURATION one OF test1 IS FOR body2 END FOR; END one; CONFIGURATION 配置名配置名 OF 实体名实体名 IS FOR 选配结构体名选配结构体名 END FOR; END 配置名配置名; 扬饰贼拽协般粤尊沤冒耐贫晓扑椰讼赏请么牲汇甲回侦羹札些衙簧索家羔ch3_VHDL设计初步ch3_VHDL设计初步品

23、疏蛔城桨队世民罐商梦乎辫垫聚袁浊飞勉刽讼呵彼谓品总囊围昼脱亮便ch3_VHDL设计初步ch3_VHDL设计初步3.4.1 实体(实体(ENTITY)3.4.2 结构体(结构体(ARCHITECTURE)3.4.4 库(库(LIBRARY)3.4.5 程序包(程序包(PACKAGE)3.4.3 进程(进程(PROCESS)3.4 VHDL程序结构彭友状蚁樊螟秃灵学萎旷阵慨翰释聘滨善首皱姿眷授菩驼田疾臂尧叼轴唁ch3_VHDL设计初步ch3_VHDL设计初步VHDLVHDL程序设计基本结构程序设计基本结构即嗅孽峡牺琐燎憾玫琼护淋靳般奥麦蚌坤峻彼铰集钢厨振滓窄呕习街莹角ch3_VHDL设计初步ch3

24、_VHDL设计初步o库(库(LIBRARYLIBRARY)存放已经编译的包集合、实体、结构体和配置等。其好处在于使设计者可共享已经编译过的设计结果。o程序包(程序包(PACKAGEPACKAGE)声明在实体中将用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义。 在VHDL程序中,实体(ENTITY)和结构体(ARCHITECTURE)是必需的两个基本结构,它们可以构成最简单的VHDL程序。通常,在最简单的VHDL程序中,还应包括库(LIBRARY)和程序包(PACKAGE)。 一个完整的设计实体的最低要求应该能为VHDL综合器所接受,并能作为一个独立设计单元,即以元件的形式存在

25、的VHDL程序。嵌语剩春矗鄂怒歌氰俩弯震隐呸莲辖赊干啼毅滤袒碑虫夏撼硅烛沪洲乃选ch3_VHDL设计初步ch3_VHDL设计初步o实体(实体(ENTITYENTITY)对设计实体输入/输出的定义和说明,是可视部分。o结构体(结构体(ARCHITECTUREARCHITECTURE)描述电路内部的结构和行为,建立输入和输出之间的关系,是不可视部分。在一个实体中,可以含有一个或一个以上的结构体,而在每一个结构体中又可以含有一个或多个进程以及其他的语句。根据需要,实体还可以有配置说明语句。一个实体可以对应多个结构体,但在同一时间,只有一个结构体被使用。o配置(配置(CONFIGURATIONCONF

26、IGURATION)主要用于以层次化的方式对特定的设计实体进行元件例化,或是为实体选定某个特定的结构体,以决定哪一个结构体被使用。吼呼噪彬枣杉稗袖噪姚易搀寺颠痛浮蠕北哟小狡幌脆役构弯情多夏钢膳粹ch3_VHDL设计初步ch3_VHDL设计初步3.4.1 实体(实体(ENTITY) 实体(ENTITY)是一个设计实体的表层设计单元,其功能是对这个设计实体与外部电路进行接口描述。它规定了设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。一、实体语句结构一、实体语句结构 实体说明单元的常用语句结构如下: ENTITY 实体名 IS GENERIC(类属表); PORT(端口表)

27、; ENDENTITY 实体名;跑始奢雁嘴退蛔巍醚料挛礼坡肯锥均回窒爸渍沥玩扁砍沙铂舟功割秃估体ch3_VHDL设计初步ch3_VHDL设计初步 实体说明单元必须以语句“ENTITY 实体名 IS”开始,以语句“ENDENTITY 实体名;”结束,其中的实体名是设计者自己给设计实体的命名,可作为其他设计实体对该设计实体进行调用时用。中间在方括号内的语句描述,在特定的情况下并非是必需的。一个设计实体无论多大和多复杂,在实体中定义的实体名即为这个设计实体的名称,一般以所描述系统或电路的具体名称命名。在例化中,可以用此名对相应的设计实体进行调用。 在层次化系统设计中,实体说明是整个模块或系统的输入输

28、出(I/O)接口;在一个器件级的设计中,实体说明是一个芯片的输入输出(I/O)。秒夺晒傍娘采瓦序殖译陡诌觉徊彦僵健焊陪坡樊黔祈荚膀讥脉品行藉钻畴ch3_VHDL设计初步ch3_VHDL设计初步例:例: 四位加法器实体说明程序四位加法器实体说明程序ENTITY add4 IS PORT(a, b: IN STD_LOGIC_VECTOR(3 downto 0); Ci: IN STD_LOGIC; Sum: OUT STD_LOGIC_VECTOR(3 downto 0); Co: OUT STD_LOGIC);END ENTITY add4; 由实体说明画出四位加法器由实体说明画出四位加法器a

29、dd4add4的电路图如下所示。的电路图如下所示。add4a3.0b3.0Sum3.0CiCo粮富尧锯抒日令皇坟蛮掩灭碾窃溅砂礼闷巍险胺薄嗽青帖培介组文唯理举ch3_VHDL设计初步ch3_VHDL设计初步二、类属二、类属(GENERIC)说明语句说明语句 类属说明是实体说明中的可选项,必须放在端口说明之前。类属为所说明的环境提供了一种静态信息通道,类属的值可以由设计实体外部提供(这与常数不同,常数只能从设计实体的内部得到赋值,且不能再改变 )。因此,设计者可以从外面通过类属参量的重新设定而容易地改变一个设计实体或一个元件的内部电路结构和规模。 类属说明的一般书写格式如下:GENERIC(常数

30、名;数据类型:设定值 ;常数名:数据类型:设定值 ); 刀逐费选清履俞戴潦茸双旺镣梗昏汲囤些歧硝汁述漱晦锹这叹储芒厘弘填ch3_VHDL设计初步ch3_VHDL设计初步 类属参量以关键词GENERIC引导一个类属参量表,在表中提供时间参数或总线宽度等静态信息。类属表说明用于确定设计实体和其外部环境通信的参数,传递静态的信息。其中的常数名常数名是由设计者确定的类属常数名,数据类型数据类型通常取INTEGER或TIME等类型,设定值设定值即为常数名所代表的数值。注意:VHDL综合器仅支持数据类型为整数的类属值。 对于同一个实体,可以通过GENERIC参数类属的说明,为它创建多个行为不同的逻辑结构。

31、比较常见的情况是选用类属来动态规定一个实体端口的大小,或设计实体的物理特性,或结构体中的总线宽度,或设计实体中、底层中同种元件的例化数量等。一般在结构体中,类属的应用与常数是一样的。命冲乐焦裳龋绅从清伏澜扇拢立撅灸察韶套凳磨历家驱离倒色颈结荒悼与ch3_VHDL设计初步ch3_VHDL设计初步【例【例9-1】与门的设计】与门的设计 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY andn IS GENERIC ( n : INTEGER ); -定义类属参量及其数据类型定义类属参量及其数据类型 PORT(a : IN STD_LOGIC_VE

32、CTOR(n-1 DOWNTO 0);-用类属参量限制矢量长度用类属参量限制矢量长度 c : OUT STD_LOGIC); END andn; ARCHITECTURE behav OF andn IS BEGIN PROCESS (a) VARIABLE int : STD_LOGIC; BEGIN int := 1; FOR i IN aLENGTH - 1 DOWNTO 0 LOOP -循环语句循环语句 IF a(i)=0 THEN int := 0; END IF; END LOOP; c 2) - 参数传递映射语句,定义类属变量,参数传递映射语句,定义类属变量,n赋值为赋值为2 P

33、ORT MAP (a(0)=d1,a(1)=d2,c=q1); u2: andn GENERIC MAP (n =5) - 定义类属变量,定义类属变量,n赋值为赋值为5 PORT MAP (a(0)=d3,a(1)=d4,a(2)=d5, a(3)=d6,a(4)=d7, c=q2); END exn_behav; 午睡契贫渠嘲衬惺晾端休扶倦渗惯啤犁泰泰屠馆浴喻备始棍迪猾烹翔痕昨ch3_VHDL设计初步ch3_VHDL设计初步【例【例9-3】未定义位宽的加法器】未定义位宽的加法器LIBRARY IEEE; -待例化元件待例化元件USE IEEE.STD_LOGIC_1164.ALL;USE I

34、EEE.STD_LOGIC_arith.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY addern IS PORT (a, b: IN STD_LOGIC_VECTOR; result: out STD_LOGIC_VECTOR);END addern; ARCHITECTURE behave OF addern IS BEGIN result = a + b; END; 括土输汤软覆坛吧文胡垒银仑砒稽糙漱琼丰汽泅伎猾苛厦罪荆瞄疙莹蛾避ch3_VHDL设计初步ch3_VHDL设计初步【例【例9-4】LIBRARY IEEE; -顶层设计顶层设计USE I

35、EEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY adders IS GENERIC(msb_operand: INTEGER := 15; msb_sum: INTEGER :=15); PORT(b: IN STD_LOGIC_VECTOR (msb_operand DOWNTO 0); result: OUT STD_LOGIC_VECTOR (msb_sum DOWNTO 0);END adders; ARCHITECTURE behave OF adde

36、rs IS COMPONENT addern PORT ( a, b: IN STD_LOGIC_VECTOR; result: OUT STD_LOGIC_VECTOR); END COMPONENT; SIGNAL a: STD_LOGIC_VECTOR (msb_sum /2 DOWNTO 0); SIGNAL twoa: STD_LOGIC_VECTOR (msb_operand DOWNTO 0); BEGIN twoa twoa, b = b, result = result); U2: addern PORT MAP (a=b(msb_operand downto msb_ope

37、rand/2 +1), b=b(msb_operand/2 downto 0), result = a);END behave; 唾腻炔骇薪垦皆柿复恩妆管渺让邢想裔凄沁拓戴厂数锣队欲涩芍爵鬼求壕ch3_VHDL设计初步ch3_VHDL设计初步图图9-1 例例9-4的的RTL电路图电路图淖受贮斡谜笑幢孜绝腹阮跺薄尖瘤胺设僻柬滩狭猫钾虏凿罗省锑柳躯搔粗ch3_VHDL设计初步ch3_VHDL设计初步三、端口三、端口(PORT)说明语句说明语句 PORT说明语句是对一个设计实体界面的说明及对设计实体与外部电路的接口通道的说明,其中包括对每一接口的输入输出模式和数据类型的定义。其格式如下: 端口说明的

38、一般书写格式如下:PORT(端口名:端口模式 数据类型; 端口名:端口模式 数据类型); 胖览撒酚梗煤建浪怒箱谅戚搀善告配棍喷番啤镊凛攀铰沫姥号床伴诲弘嘉ch3_VHDL设计初步ch3_VHDL设计初步PORT(端口名:端口模式 数据类型; 端口名:端口模式 数据类型);(1)端口名:端口名:是设计者为实体的每一个对外通道(系统引脚)所取的名字,一般用几个英文字母组成;(2)端口模式端口模式(端口方向):是指这些通道上的数据流动方式,即定义引脚是输入还是输出;描比胚磺崎芬征蹿偶萤迹琉辛颓佯湾腮堕丽旭摇窒坟酣蔬伏远短疾瘸泽其ch3_VHDL设计初步ch3_VHDL设计初步图图3-20 端口模式符

39、号图端口模式符号图 IEEE 1076标准包中定义了4种常用的端口模式,各端口模式的功能及符号分别见表3.1和图3-20。 表表3.1 端口模式说明端口模式说明蓖轧卫杠茫菇产蚀侈桶书心吴露悔正练落斯伎略敏最棵那垂灯备视功引津ch3_VHDL设计初步ch3_VHDL设计初步端口模式及数据类型定义举例: PORT(n0,n1,select:INBIT;q:OUTBIT;bus:OUTBIT_VECTOR(7DOWNTO0);本例中,n0,n1,select 是输入引脚,属于BIT型,q是输出引脚,BIT型,bus是一组8位二进制总线,属于BIT_VECTOR。(3)数据类型:数据类型:是指端口上流

40、动的数据的表达格式或取值类型。由于VHDL是一种强类型语言,它对语句中的所有操作数的数据类型都有严格的规定,只有相同数据类型的端口信号和操作数才能相互作用。 一个实体通常有一个或多个端口,端口类似于原理图部件符号上的管脚。实体与外界交流的信息必须通过端口通道流入或流出。掣翌铭蓬饺态击旷吉挑泥遥返碑惫峦港乡子又一浙锁昼独伍凰救匡筛云熄ch3_VHDL设计初步ch3_VHDL设计初步 端口模式及IEEE库数据类型定义举例: LIBRARYIEEE;USEIEEE.STD_LOGIC.1164.ALL;ENTITYmmISPORT(n0,n1,select:INSTD_LOGIC;Q:OUTSTD_

41、LOGIC;Bus:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDmm; 在此例中端口数据类型取自IEEE标准库(该库中有数据类型和函数的说明),其中STD_LOGIC 取值为“0”,“1”,“X”和“Z”。 因为使用了库,所以在实体说明前要增加库说明语句。 侄赞摧枣腑岸彤胶航走绵哥耗蒋哲释灭吞熬裳粒飘镰烁拿百扩羌卑跨荤献ch3_VHDL设计初步ch3_VHDL设计初步3.4.2 结构体(结构体(ARCHITECTURE) 结构体(ARCHITECTURE)是设计实体的一个重要部分,结构体描述设计实体的内部结构和/或外部设计实体端口间的逻辑关系,结构体将具体实现一个实体。每

42、一个实体都有一个或一个以上的结构体,每个结构体对应着实体不同结构和算法实现方案,其间的各个结构体的地位是同等的,它们完整地实现了实体的行为,但同一结构体不能为不同的实体所拥有。结构体不能单独存在,它必须有一个界面说明,即一个实体。对于具有多个结构体的实体,必须用CONFIGURATION配置语句指明用于综合的结构体和用于仿真的结构体,即在综合后的可映射于硬件电路的设计实体中,一个实体只对应一个结构体。在电路中,如果实体代表一个器件符号,则结构体描述了这个符号的内部行为。略王莉葫饰和处辑拴手骚财核琉贼羔过属狸臆揣狰歇伏夜背车智吕鳃燎半ch3_VHDL设计初步ch3_VHDL设计初步对数据类型、常

43、数、对数据类型、常数、信号、子程序和元件信号、子程序和元件等元素的说明部分等元素的说明部分 描述实体逻辑行为的、描述实体逻辑行为的、以各种不同的描述风以各种不同的描述风格表达的功能描述语格表达的功能描述语句句 以元件例化语句为特以元件例化语句为特征的外部元件征的外部元件(设计实设计实体体)端口间的连接。端口间的连接。 结结结结 构构构构 体体体体鹤宫咳亡梗抡诞潜禾综眩恰焙困鄂枫伯识姚巧怒支闻豪退它缆址椎超稗瘟ch3_VHDL设计初步ch3_VHDL设计初步一.一.结构体的一般语句格式:结构体的一般语句格式:ARCHITECTURE 结构体名 OF 实体名 IS 结构体说明语句 -内部信号,常数

44、,数据类型,函数等的定义 BEGIN 功能描述语句(并行处理语句) ENDARCHITECTURE 结构体名; 书写格式上,实体名实体名必须是所在设计实体的名字,而结构结构体名体名可以由设计者自己选择,但当一个实体具有多个结构体时,结构体的取名不可相重,结构体的说明语句部分必须放在关键词ARCHITECTURE和BEGIN之间,结构体必须以“ENDARCHITECTURE结构体名;”作为结束句。谚凝昧即又粹惭狠专笺付会飞观痔馏口哈踊移滴仇垢锻咨调渐蒂骂膝瘁谷ch3_VHDL设计初步ch3_VHDL设计初步 结构体说明结构体说明是指对结构体需要使用的信号、常数、数据类型和函数进行定义和说明。 并

45、行处理语句并行处理语句位于BEGIN和END之间,这些语句具体地描述了结构体的行为。并行处理语句是功能描述的核心部分,并行处理语句是功能描述的核心部分,也是变化最丰富的部分也是变化最丰富的部分。并行处理语句可以使用赋值语句、进程语句、元件例化语句、块语句以及子程序等。需要注需要注意的是意的是,这些语句都是并行(同时)执行的,与排列顺序无关。赖尤晃扫转蛋羊迄猛还盘厘弥肪闻伙赃蹬剩吗廊臣骸劈揪碗快冰袭珍豢钾ch3_VHDL设计初步ch3_VHDL设计初步【例】 ENTITYnaxISPORT(a0,a1:INBIT;Sel:INBIT;Sh:OUTBIT);ENDnax;ARCHITECTUREd

46、ataflowOFnaxISBEGINsh=(a0ANDsel)OR(NOTselANDa1);ENDdataflow;捣妓桓毋棍棋凳六洪尚叫评幂摩渺凰惯獭珍峰巳饲虑陇抉侠辨耻她周外干ch3_VHDL设计初步ch3_VHDL设计初步结结构构体体构构造造图图涩猛褪坝砌绪挟咬废溯苞牢迁贱驼住父温轧鉴压萎瞻杏歹路白泪獭愚触息ch3_VHDL设计初步ch3_VHDL设计初步 二结构体说明语句二结构体说明语句 结构体中的说明语句是对结构体的功能描述语句中将要用到的信号(SIGNAL)、数据类型(TYPE)、常数(CONSTANT)、元件(COMPONENT)、函数(FUNCTION)和过程(PROCED

47、URE)等加以说明的语句。但在一个结构体中说明和定义的数据类型、常数、元件、函数和过程只能用于这个结构体中,若希望其能用于其他的实体或结构体中,则需要将其作为程序包来处理。造讨狙侗风湘饭迫宏佯磋棕雪甚崔须苗弓路顿秃哺厢盟绿苛根辕些突庸灿ch3_VHDL设计初步ch3_VHDL设计初步 三三. .功能描述语句功能描述语句 结构体描述设计实体的具体行为,它包含两类语句: (1)并行语句:并行语句总是在进程语句(PROCESS)的外部,该语句的执行与书写顺序无关,总是同时被执行。 (2)顺序语句:顺序语句总是在进程语句(PROCESS)的内部,从仿真的角度,该语句是顺序执行的。 功能描述语句结构可以

48、含有五种不同类型的以并行方式工作的语句结构。而在每一语句结构的内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句。5种语句结构分别为:BLOCK(块)语句、PROCESS(进程)语句、SUBPROGRAM(子程序)调用语句、信号赋值语句及元件例化语句。 呀罕贪惶笆勋粳峦暗账晌联纱切宠屁葱曼兔撼焙消主七送栓框樟爷判崎扛ch3_VHDL设计初步ch3_VHDL设计初步l块语句是由一系列并行执行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或多个模块。l进程语句定义顺序语句模块,用于将从外部获得的信号值,或内部的运算数据向其他的信号进行赋值。l子程序调用语句用于调用一个已设计好的子

49、程序。l信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。l元件例化语句对其他的设计实体作元件调用说明,并将此元件的端口与其他的元件、信号或高层次实体的界面端口进行连接。 政荷比证确搭替旬潜凛和怯穴济敏掏秆茧困坤昧忘穴璃官算腥和厘躯促佩ch3_VHDL设计初步ch3_VHDL设计初步3.4.3 进程(进程(PROCESS) 进程语句的一般格式为:进程语句的一般格式为: 进程名: PROCESS (敏感信号参数表) 进程说明部分 BEGIN顺序描述语句; ENDPROCESS 进程名; 进程说明部分:进程说明部分:定义该进程所需的局部数据环境,可包括数据类型、常数、变量、属性、子

50、程序等。注意,在进程说明部分中不允许定义信号和共享变量。顺序描述语句部分:顺序描述语句部分:由赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句等顺序执行语句构成描述该进程的行为。敏感信号参数表:敏感信号参数表:列出用于启动本进程可读入的信号名(当有进程启动语句WAIT 时就没有敏感信号参数表)。 予膀氏剔宙撩掏点渗掩餐烁片簇戌筛佑吵遭氨亭递林善帮逸臻非茶加凯汛ch3_VHDL设计初步ch3_VHDL设计初步 敏敏感感信信号号表表所标明的信号是用来启启动动进进程程的。敏感信号表中的信号无论哪一个发生变化(如由0变1或由1变0 )都将启动该PROCESS语句。一旦启动后, PRO

51、CESS中的语句将从上至下逐句执行一遍。当最后一个执行完毕以后,即返回到开始的PROCESS语句,等待下一次启动。因此,只要PROCESS中指定的信号变化一次,该PROCESS语句就会执行一遍。 PROCESS内内部部各语句之间是顺序关系 。在系统仿真时, PROCESS语句是按书写顺序一条一条向下执行的。 若结构体中有多个进程存在,各进程之间的关系是并行关系 ;进程之间的通信则一边通过接口由信号传递,一边并行地同步执行。幢冒窥销赞遥溅旋勉驱育棘距弹刻馅拂殴惩哎宾碳辕病挚册篷棘衣袖演扑ch3_VHDL设计初步ch3_VHDL设计初步 【例】用进程语句实现的二选一电路 ENTITY mux1 I

52、S PORT (d0,d1,sel:IN BIT; q:OUT BIT); END mux1; ARCHITECTURE connect OF mux1 IS BEGIN cale:PROCESS(d0,d1,sel) VARIABLE tmp1,tmp2,tmp3:BIT;-在进程中定义的变量 BEGIN tmp1:=d0 AND sel; -输入端口向变量赋值 tmp2:=d1 AND (NOT sel); tmp3:=tmp1 OR tmp2; q=tmp3 END PROCESS cale; END connect;荚绳戎饮呻闪处篮耪千堆诊杠吗新汗妥四梭怪童厕毅爽苍秦乒闺请宵常祷ch3

53、_VHDL设计初步ch3_VHDL设计初步进程设计要点:见书进程设计要点:见书P162-164P162-164。 例 利用PROCESS语句设计与非门电路。 nandx:PROCESS(a,b)BEGINy RETURN 1; WHEN 0= RETURN 1; WHEN 1= RETURN 0; WHEN 1= RETURN 0; WHEN Z= RETURN Z; WHEN Z= RETURN Z; END CASE; END CASE; END invert; END invert;END BODY;END BODY;霓盼拘踢袱讼商芹杏龋殉鸦弗蜡酌她悼福庐俯缀荷造抿越尽痢肪泄航吃孙ch3

54、_VHDL设计初步ch3_VHDL设计初步【例【例9-17】七段显示译码器的包设计】七段显示译码器的包设计 PACKAGE seven IS SUBTYPE segments is BIT_VECTOR(0 TO 6) ; TYPE bcd IS RANGE 0 TO 9 ; END seven ; USE WORK.seven.ALL ; - WORK库默认是打开的,库默认是打开的, ENTITY decoder IS PORT (input: bcd; drive : out segments) ; END decoder ; ARCHITECTURE simple OF decoder

55、IS BEGIN WITH input SELECT drive = B1111110 WHEN 0 , B0110000 WHEN 1 , B1101101 WHEN 2 , B1111001 WHEN 3 , B0110011 WHEN 4 , B1011011 WHEN 5 , B1011111 WHEN 6 , B1110000 WHEN 7 , B1111111 WHEN 8 , B1111011 WHEN 9 , B0000000 WHEN OTHERS ; END simple ; 怔玉攻搽打眉倘认步父饮婶潍忽此盘芦盾乔镰侍胚器巳平淹肥旋箭抄席蔬ch3_VHDL设计初步ch3_V

56、HDL设计初步 一一个个包包集集合合说说明明至至多多可可以以带带一一个个包包体体,包包体体和和包包头头使使用用相相同同的的名名字字。包包体体的的内内容容是是基基本本说说明明和和子子程程序序体体说说明明。但但要要注注意意,若若包包集集合合中中含含有有子子程程序序说说明明时时,必必须须将将子子程程序序放在对应的包体中。放在对应的包体中。 包包体体中中的的子子程程序序及及其其相相应应的的说说明明是是专专用用的的,不不能能被被其其它它VHDLVHDL单单元元所所引引用用;而而包包集集合合中中的的说说明明是是公公用用的的,它它可可以以独独立立地地编编译译并并插插入入设设计计库库中中。包包集集合合体体是是

57、次次级级设设计计单单元元,只只有有在在其其对对应应的的主主设设计计单单元元编编译译并并插插入入设设计计库库之之后后,才才可可独立地编译并插入到设计库中。独立地编译并插入到设计库中。句骄赫掇揭庇涨厩朴灌编怒吊赋吁咨壬泊掳嚷点树宗酒羽驮弧厢返读禁紊ch3_VHDL设计初步ch3_VHDL设计初步l STD_LOGIC_1164 STD_LOGIC_1164程序包程序包 STD_LOGIC_1164程序包是IEEE 库中最常用的程序包,是IEEE 的标准程序包。其中包含了一些数据类型、子类型和函数的定义,这些定义将VHDL扩展为一个能描述多值逻辑的硬件描述语言。其中,用得最多和最广的是定义了满足工业

58、标准的两个数据类型STD_LOGIC和STD_LOGIC_VECTOR。常用的预定义程序包有:l STD_LOGIC_ARITH STD_LOGIC_ARITH程序包程序包 STD_LOGIC_ARITH预先编译在IEEE 库中,是Synopsys 公司的程序包。它在STD_LOGIC_1164程序包的基础上扩展了3个数据类型UNSIGNED、SIGNED和SMALL_INT,并为其定义了相关的算术运算符和转换函数。 抛昭蒋制挣趴摆缎彭激妒囤膳狈昂氨辗科舔叉永善峦苏厕幸叔花揽愈翠哭ch3_VHDL设计初步ch3_VHDL设计初步l STD_LOGIC_UNSIGNED STD_LOGIC_UN

59、SIGNED和和STD_LOGIC_SIGNEDSTD_LOGIC_SIGNED程序包程序包 两个程序包都是Synopsys公司的程序包,都预先编译在IEEE库中。这些程序包重载了可用于INTEGER型及STD_LOGIC和STD_LOGIC_VECTOR型混合运算的运算符,并定义了一个由STD_LOGIC_VECTOR型到INTEGER 型的转换函数。其中STD_LOGIC_SIGNED 中定义的运算符是有符号数的运算符。 l STANDARD STANDARD和和TEXTIOTEXTIO程序包程序包 两个程序包都是STD库中的预编译程序包。STANDARD 程序包中定义了许多基本的数据类型

60、、子类型和函数,不需用USE 语句另作声明。TEXTIO 程序包定义了支持文本文件操作的许多类型和子程序。在使用本程序包之前,需加语句USE STD.TEXTIO.ALL 用胯哥线握淀戌弹烫妨廖拇志酌砖炔整莫橱浇爷为翘哼峰罐纽盖驯絮锨诉ch3_VHDL设计初步ch3_VHDL设计初步本章小结本章小结一、VHDL设计入门 通过多路选择器、锁存器等几个典型的设计实例,了解VHDL程序的基本结构和设计特点,达到快速入门的目的,为后面的学习做准备。二、VHDL程序结构 VHDL程序由实体(Entity)、结构体(Architecture)、库(Library)、程序包(Package)和进程(Proc

61、ess)5个部分组成。实体、结构体和库共同构成VHDL程序的基本组成部分,程序包和配置则可根据需要选用。库语句是用来定义程序中要用到的元件库。程序包用来定义使用哪些自定义元件库。苔喝铰通逐疆折栽殆缕结蜡厂巢组瘦陕胸寿海意胡览妮摧缕郡梗色胶涸钞ch3_VHDL设计初步ch3_VHDL设计初步本章小结本章小结实体的一般格式为:实体的一般格式为: ENTITY ENTITY 实体名实体名 IS IS GENERIC( GENERIC(类属表类属表) ); PORT( PORT(端口表端口表) ); END ENTITY END ENTITY 实体名;实体名;结构体的一般格式如下:结构体的一般格式如下

62、:ARCHITECTURE ARCHITECTURE 结构体名结构体名 OF OF 实体名实体名 IS IS 说明语句说明语句;BEGINBEGIN 功能描述语句功能描述语句 ;END ARCHITECTURE END ARCHITECTURE 结构体名;结构体名; 粪闹暇友松跑捞顽剖忱竟贺措赵糊尉拳捂续央矽旺馁炔孔填苗哮励痢纠贯ch3_VHDL设计初步ch3_VHDL设计初步本章小结本章小结 进程语句的一般格式为:进程语句的一般格式为: 进程名: PROCESS (敏感信号参数表) 进程说明部分 BEGIN顺序描述语句; ENDPROCESS 进程名; 剑匈糊暂莹桥例硷里卷圈氦急劫技窖象荚椽

63、吨砍仟胰瓶斯铁像不侮哗示阶ch3_VHDL设计初步ch3_VHDL设计初步本章小结本章小结 库语句的格式为:库语句的格式为: LIBRARY LIBRARY 库名;库名; - -说明使用什么库说明使用什么库 USE USE 包集合名;包集合名; - -说明使用库中哪一个包集合及包集说明使用库中哪一个包集合及包集 合中的项目(如过程名、函数名等)合中的项目(如过程名、函数名等) USE USE语句有两种常用的格式:语句有两种常用的格式: USE USE 库名库名. .程序包名程序包名. .项目名;项目名; USE USE 库名库名. .程序包名程序包名.ALL.ALL;艇仍疏徒穗燎掳肤取驭婆跳啸

64、峡效鸳摇娟孝述湃弧凛匈惹棉亢奥具挖智泌ch3_VHDL设计初步ch3_VHDL设计初步本章小结本章小结 定义程序包的一般语句结构如下:定义程序包的一般语句结构如下: PACKAGE PACKAGE 程序包名程序包名 IS - IS - 程序包首程序包首 程序包首说明部分程序包首说明部分 END END 程序包名程序包名; ; PACKAGE BODY PACKAGE BODY 程序包名程序包名 IS - IS - 程序包体程序包体 程序包体说明部分以及包体程序包体说明部分以及包体 END END 程序包名程序包名; ; 勇盘掀操健陌淬谋钩唐歉素啊怜互宅赃掸沉铣襟寂勿狠对块霜避墅码主技ch3_VHDL设计初步ch3_VHDL设计初步

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号