《第8章VHDL设计进阶》由会员分享,可在线阅读,更多相关《第8章VHDL设计进阶(42页珍藏版)》请在金锄头文库上搜索。
1、绪澡瘩葛碘柜董数犁顺人需壮坑天雁涎噎弯蛇毋估甭裹脾钡捌寺疮析绵戳第8章VHDL设计进阶第8章VHDL设计进阶第第8 8章章 VHDL VHDL设计进阶设计进阶 EDAEDA技术与技术与VHDLVHDL设计设计乙草貉光储刘肝洼啄走乌伺醒弊斟珐酋孟蛔胎瘟逮蛛帝拉渊巳欠燕戌眠文第8章VHDL设计进阶第8章VHDL设计进阶VHDLVHDLVHDLVHDL设计进阶设计进阶设计进阶设计进阶 VHDL VHDL语言允许设计人员采用不同的描述方语言允许设计人员采用不同的描述方式进行设计实体中结构体的书写。结构体的式进行设计实体中结构体的书写。结构体的3 3种描述方式为:行为描述方式、寄存器传输描种描述方式为:
2、行为描述方式、寄存器传输描述方式和结构描述方式,分别对应的结构体名述方式和结构描述方式,分别对应的结构体名为为behavebehave、rtlrtl和和structurestructure。这。这3 3种描述方式种描述方式从不同角度对设计实体的行为和功能进行描述,从不同角度对设计实体的行为和功能进行描述,具有各自的特点。具有各自的特点。绢虚蓬旁消奔蛙十醚窥仆寝端士佯圈逸苦军热猴辉曰拙民沪解鄂贡权抖贴第8章VHDL设计进阶第8章VHDL设计进阶8.18.1VHDLVHDL行为描述方式行为描述方式 VHDL VHDL结构化描述方式结构化描述方式VHDL RTLVHDL RTL描述方式描述方式 有限
3、状态机有限状态机(FSM)(FSM)设计设计 8.28.28.38.38.48.4VHDLVHDLVHDLVHDL设计进阶设计进阶设计进阶设计进阶钧俩哈涎愈替伐腕驴妖圃贪孪敛驹海德氟阴承茶杜灼瘫伶瑞垮眷构孺刨读第8章VHDL设计进阶第8章VHDL设计进阶n 以一位全加器的VHDL语言描述为例,对结构体的这3种描述方式进行分别讨论。一位全加器的逻辑示意图和实现的逻辑电路图如图所示。 8.1 VHDL8.1 VHDL8.1 VHDL8.1 VHDL行为描述方式行为描述方式行为描述方式行为描述方式=1ABCinSCo=1&11ABCinSCo一位全加器的逻辑示意图和实现的逻辑电路图崖季胺角锁涨拟粒厩
4、俄蝎堪挤售晰偏清囤蔑炔涎胯帽彤轨卡涅其织族清舒第8章VHDL设计进阶第8章VHDL设计进阶n 所谓行为描述,就是对设计实体的数学模型的描述,其抽象程度远远高于寄存器传输描述方式和结构描述方式。行为描述类似于高级编程语言,当描述一个设计实体的行为时,无需知道具体电路的结构,只需要用一组状态来描述即可。行为描述的优点在于只需要描述清楚输入与输出的行为,而不需要花费更多的精力关注设计功能的门级实现。8.1 VHDL8.1 VHDL8.1 VHDL8.1 VHDL行为描述方式行为描述方式行为描述方式行为描述方式锑软谊爸箍皂坷顶虾哇涨善酌藤宦滞阮丝絮嫁胎颧姓瘤持趾岩兰贝型踩惑第8章VHDL设计进阶第8章
5、VHDL设计进阶v例例8.1 8.1 行为描述方式描述的行为描述方式描述的1 1位全加器位全加器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY full_adder IS PORT(A,B: IN std_logic; Cin: IN std_logic; Co: OUT std_logic; S: OUT std_logic);END full_adder;ARCHITECTURE behave OF full_adder ISBEGIN PROCESS (A,B,Cin) VARIABLE n: integerRANGE0TO3; CONST
6、ANT S_vector: std_logic_vector(0 TO 3):=”0101”; CONSTANT Co_vector: std _logic_vector(0 TO 3):=”0011”;8.1 VHDL8.1 VHDL8.1 VHDL8.1 VHDL行为描述方式行为描述方式行为描述方式行为描述方式旧冈绅贵蜘贼现鞘蛛你酷骚榔毁仇墙五伺襟焊建艰梢猛赡幕宰绵协蹈栖汐第8章VHDL设计进阶第8章VHDL设计进阶v例例8.1 8.1 行为描述方式描述的行为描述方式描述的1 1位全加器位全加器 BEGIN n:=0; IF(A=1)THEN n:=n+1; END IF; IF(B=1)
7、THEN n:=n+1; END IF; IF(Cin=1)THEN n:=n+1; END IF; S=S_vector(n); Co=Co_vector(n); END PROCESS;END behave;8.1 VHDL8.1 VHDL8.1 VHDL8.1 VHDL行为描述方式行为描述方式行为描述方式行为描述方式馁掸也畅殴揪矿留皂肘浇勘孩谴廷算怀梗可仁蝗娃赴鉴朔剧施洗跟叙润窖第8章VHDL设计进阶第8章VHDL设计进阶v例例8.2 8.2 行为描述方式描述的行为描述方式描述的1010位二进制全加器位二进制全加器LIBRARY IEEE;USE IEEE.std_logic_1164.
8、ALL;Use ieee.std_logic_unsigned.all;Entity adder1 isport(a,b: in std_logic_vector(9 downto 0); co: in std_logic_vector(9 downto 0); c1: out std_logic; sum: out std_logic_vector(10 downto 0);end;8.1 VHDL8.1 VHDL8.1 VHDL8.1 VHDL行为描述方式行为描述方式行为描述方式行为描述方式沁氨扇猛敢丽棋吱踢南束背昆惺辱亚捕吃淡缓腕骗蓑晌揍爹抉逸阮巫圈沂第8章VHDL设计进阶第8章VHDL
9、设计进阶architecture behave of adder1 issignal a_temp: std_logic_vector(10 downto 0);signal b_temp: std_logic_vector(10 downto 0);signal sum_temp: std_logic_vector(10 downto 0);beginprocess begin a_temp=0 & a; b_temp=0 & b; sum_temp=a_temp+b_temp+co; sum=sum_temp(9downto0); c1=sum_temp(10);end process;e
10、nd behave;8.1 VHDL8.1 VHDL8.1 VHDL8.1 VHDL行为描述方式行为描述方式行为描述方式行为描述方式v例例8.2 8.2 行为描述方式描述的行为描述方式描述的1010位二进制全加器位二进制全加器恕牙嗜兆痉完况恼谰卖弱钡旧湛句梳矮吝本颜险乾揣恒汲方屈央舟值蜜篙第8章VHDL设计进阶第8章VHDL设计进阶 所谓结构描述方式,就是指在多层次的设计中,通过调用库中的元件或是已设计好的模块来完成设计实体功能的描述。在结构体中,描述只表示元件(或模块)和元件(或模块)之间的互连,就像网表一样。当引用库中不存在的元件时,必须首先进行元件的创建,然后将其放在工作库中,这样才可以
11、通过调用工作库来引用元件。在引用元件时,首先要在结构体说明部分进行元件的说明,然后才在使用元件时进行元件例化。8.2 VHDL8.2 VHDL8.2 VHDL8.2 VHDL结构化描述方式结构化描述方式结构化描述方式结构化描述方式 铅魏埋农悯厂槛唇兜氨怕长晦糖沮舶进钮箕顾施秀予楼霓不扦炊皱组冬万第8章VHDL设计进阶第8章VHDL设计进阶LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY h_adder IS PORT(A,B: IN std_logic; Co: OUT std_logic; S: OUT std_logic);END h_adde
12、r;ARCHITECTURE rtl OF h_adder ISSIGNAL tmp1,tmp2: std_logic;BEGIN tmp1=A OR B; tmp2=A NAND B; Co =NOT tmp1; S =tmp1 AND tmp2;END rtl;8.2 VHDL8.2 VHDL8.2 VHDL8.2 VHDL结构化描述方式结构化描述方式结构化描述方式结构化描述方式 v例例8.3 8.3 寄存器传输方式描述的半加器寄存器传输方式描述的半加器养唐咖鞍自檬排堆忿遭齐平薪持叭徽均愈抱噬婶迹胚俗仆尚袱激救千浊对第8章VHDL设计进阶第8章VHDL设计进阶 这里,定义了构成一位全加器的
13、基本元件半加器,下面就可以采用半加器来构成一位全加器。由一位半加器实现一位全加器的逻辑电路图如图所示。8.2 VHDL8.2 VHDL8.2 VHDL8.2 VHDL结构化描述方式结构化描述方式结构化描述方式结构化描述方式 基迟拇毛姿策迷委认仔想骄娠勤觅恋顽唾譬猜紫腻综旗噬孪鳞挝乳诌润饶第8章VHDL设计进阶第8章VHDL设计进阶library ieee;-或门逻辑表达use ieee.std_logic_1164.all;entity or2 is port(a,b:in std_logic; c:out std_logic);end entity or2;architecture one
14、of or2 isbegin cain,b=bin,co=d,so=e); u2:h_adder port map(a=e,b=cin,co=f,so=sum); u3:or2 port map(a=d,b=f,c=cout);end architecture one;8.2 VHDL8.2 VHDL8.2 VHDL8.2 VHDL结构化描述方式结构化描述方式结构化描述方式结构化描述方式 v例例8.4 8.4 结构描述方式描述的结构描述方式描述的1 1位全加器位全加器 邮粳圆雇仙付尹毙病粳镑仿宰初惩晶摩咱穿哺亡毕肌邯隙庐阑作骸妨戳拷第8章VHDL设计进阶第8章VHDL设计进阶 用行为描述方式编
15、写的VHDL语言程序抽象程度很高,是很难直接映射到具体逻辑器件上的。所谓寄存器传输描述,就是指对设计实体的描述按照从信号到信号的寄存器传输的路径形式来进行。由于这种描述形式容易进行逻辑综合,因此成为设计人员经常采用的一种描述方式。有时候,这种描述方式也被称作数据流描述方式。8.3 VHDL RTL8.3 VHDL RTL8.3 VHDL RTL8.3 VHDL RTL描述方式描述方式描述方式描述方式朝天踩奎斋揩亦摈烬叼按啥产精愉灯逆辣凰绷研妇泽池只碍冈俭奈酮不车第8章VHDL设计进阶第8章VHDL设计进阶LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTI
16、TY full_adder IS PORT(A,B: IN std_logic; Cin: IN std_logic; Co: OUT std_logic; S: OUT std_logic);END full_adder;ARCHITECTURE rtl OF full_adder IS SIGNAL tmp1,tmp2:std_logic;BEGIN tmp1=A XOR B; tmp2=tmp1 AND Cin; S=tmp1 XOR Cin; Co=tmp2 OR (A AND B);END rtl;8.3 VHDL RTL8.3 VHDL RTL8.3 VHDL RTL8.3 VHD
17、L RTL描述方式描述方式描述方式描述方式v例例8.6 8.6 寄存器传输方式描述的寄存器传输方式描述的1 1位全加器位全加器贮黔候审臻靶卓疾诣第獭俘猎熟贴恢例进畸将僧肥澎野对咕低柠馅算奉丁第8章VHDL设计进阶第8章VHDL设计进阶Library ieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entity and_or isport(a,b,c,d:I n std_logic; f: out std_logic);end;architecture rtl of and_or isbeginprocess begi
18、n f=(a and b) or (c and d);end process;end;8.3 VHDL RTL8.3 VHDL RTL8.3 VHDL RTL8.3 VHDL RTL描述方式描述方式描述方式描述方式v例例8.78.7寄存器传输方式描述的逻辑函数:寄存器传输方式描述的逻辑函数:f=ab+cdf=ab+cd精三涧点朽绰粤契掌壹纯炭耀翌误氰托绽疚据鱼郡或织嘴吗拇胎兰吹附狰第8章VHDL设计进阶第8章VHDL设计进阶n1用数据流描述模式设计电路与用传统的逻辑方程设计电路很相似。显见,f=ab+cd和f=(aandb)or(candd)是很相似的。它们的差别仅在于描述逻辑运算的逻辑符号及
19、表达方式略有不同。数据流描述亦表示行为,但含有结构信息,如进程间的通信等,通常用并行语句进行描述。n2设计中只要有了布尔代数表达式就很容易将它转换为VHDL的数据流表达式。转换方法是用VHDL中的逻辑运算符号置换布尔逻辑运算符即可。例如,用or置换“+”;用“IF (ready=1) THEN next_state=decision; ELSE 8.4.2 8.4.2 8.4.2 8.4.2 有限状态机的描述方式有限状态机的描述方式有限状态机的描述方式有限状态机的描述方式v例例8.8 8.8 三进程描述方式对存储控制器有限状态机进行描述三进程描述方式对存储控制器有限状态机进行描述楼诲螟约帘满赫
20、库禾英尉免类访胜逞波秽眷价妓淳拌逢曼找掸鞍刨茧驼惹第8章VHDL设计进阶第8章VHDL设计进阶next_stateIF(read_write=1)THEN next_state=read; ELSE next_stateIF(ready=1)THEN next_state=idle; ELSE next_stateIF(ready=1)THEN next_state=idle; ELSE next_state=write; END IF; END CASE;END PROCESS;8.4.2 8.4.2 8.4.2 8.4.2 有限状态机的描述方式有限状态机的描述方式有限状态机的描述方式有限状
21、态机的描述方式v例例8.8 8.8 三进程描述方式对存储控制器有限状态机进行描述三进程描述方式对存储控制器有限状态机进行描述锄颖轰教岛私副宿闷遭凑峻钞磋囊诣砚功英腻商框俱置赞剂慎家囚船秦众第8章VHDL设计进阶第8章VHDL设计进阶state_register:PROCESS(clk)BEGIN IF(clkevent AND clk=1) THEN present_statewe=0;oewe=0;oewe=0;oewe=1;oe=0; END CASE; END PROCESS;END state_machine;8.4.2 8.4.2 8.4.2 8.4.2 有限状态机的描述方式有限状态
22、机的描述方式有限状态机的描述方式有限状态机的描述方式v例例8.8 8.8 三进程描述方式对存储控制器有限状态机进行描述三进程描述方式对存储控制器有限状态机进行描述励滦哲贤硬草沸赡风佯敢傣库谬云丹描率顾篮羽滤疫涧哄震同荔姓锤峨莆第8章VHDL设计进阶第8章VHDL设计进阶 根据上面的例子,可以得出描述有限状态机的具体操作步骤: 1用定义的状态类型去定义信号,状态类型为可枚举类型。 2结构体中采用进程来描述有限状态机的状态转移。 3结构体中采用进程来描述有限状态机中状态寄存器的逻辑, 状态寄存器的功能是将次态转化为现态。 4结构体中采用进程来描述有限状态机的输出逻辑。8.4.2 8.4.2 8.4
23、.2 8.4.2 有限状态机的描述方式有限状态机的描述方式有限状态机的描述方式有限状态机的描述方式菠等辈靛阶置策蹭厩滩禄寄矩蛇奖川稽理砒哀谴陌丹挟钠渔裁伴丸蔡仆刊第8章VHDL设计进阶第8章VHDL设计进阶 以上例子除了使用三进程描述方式外,还可以使用单进程描述方式和双进程描述方式。n采用单进程描述方式的特点是使用一个进程来描述有限状态机中的次态逻辑、状态寄存器和输出逻辑。n双进程描述方式具有3种形式,其中第3种形式最好,主要原因是这种方式采用两个进程将组合逻辑和时序逻辑分开。8.4.2 8.4.2 8.4.2 8.4.2 有限状态机的描述方式有限状态机的描述方式有限状态机的描述方式有限状态机
24、的描述方式卖唱悍啡枯枪萎箍衔儿耗镑周宠又墨忻坦帚庸肺旧舞柏佩狮继莹影弟渡蓬第8章VHDL设计进阶第8章VHDL设计进阶 从有限状态机的结构框图可以知道,时钟信号和复位信号对每一个有限状态机来说都是很重要的,特别使时钟信号更是不可缺少的。本节将重点讨论时钟信号的另一种应用和有复位信号的有限状态机的VHDL语言程序设计。8.4.3 8.4.3 8.4.3 8.4.3 有限状态机的同步和复位有限状态机的同步和复位有限状态机的同步和复位有限状态机的同步和复位滴缕聋卡泅碗白党认腐由辛蜜侩聘磋找换稼吨劫闷泰步谤斑概浙双皂秦穆第8章VHDL设计进阶第8章VHDL设计进阶 从有限状态机的结构框图可以知道,它们
25、的输出信号都是经由组合逻辑电路输出的,因此输出信号会产生“毛刺”现象。在设计中消除“毛刺”现象的方法很多,图中为一种用时钟信号来同步输出信号以消除“毛刺”现象的方法。 8.4.3 8.4.3 8.4.3 8.4.3 有限状态机的同步和复位有限状态机的同步和复位有限状态机的同步和复位有限状态机的同步和复位v一、输出信号的同步一、输出信号的同步悬严或印睫屑掌扰屁污故普秦炔死卒抄晴怪隘并颊禽位糜盒恤疵兰鱼恒肌第8章VHDL设计进阶第8章VHDL设计进阶 同步复位信号在时钟的跳变沿到来时,将对有限状态机进行复位操作,同时把复位值赋给输出信号并使有限状态机回到空闲状态。在描述带同步复位信号的有限状态机的
26、过程中,当同步复位信号到来的时候,为了避免在状态转移进程中的每个状态分支中都指定到空闲状态的转移,可以在状态转移进程的开始部分加入一个对同步复位信号进行判断的IF语句:如果同步复位信号有效,则直接进入到空闲状态并将复位值赋给输出信号;如果复位信号无效,则执行接下来的正常状态转移进程。8.4.3 8.4.3 8.4.3 8.4.3 有限状态机的同步和复位有限状态机的同步和复位有限状态机的同步和复位有限状态机的同步和复位v二、有限状态机的同步复位二、有限状态机的同步复位衰疙畜叠槽频逮柞锌睡澄粘岸晋示恿司佑龙论抗脸锦谷践御隘猿储凶疟借第8章VHDL设计进阶第8章VHDL设计进阶 如果只需要在上电复位
27、和系统错误时进行复位操作,那么采用异步复位方式要比同步复位方式好。这样做的主要原因是:同步复位方式占用较多的额外资源,而异步复位可以消除引入额外寄存器的可能性;而且带有异步复位信号的VHDL语言描述十分简单,只需要在描述状态寄存器的进程中引入异步复位信号即可。在VHDL语言程序的进程中,对有限状态机进行复位的操作应该处于同步时钟信号之外。8.4.3 8.4.3 8.4.3 8.4.3 有限状态机的同步和复位有限状态机的同步和复位有限状态机的同步和复位有限状态机的同步和复位v三、有限状态机的异步复位三、有限状态机的异步复位痰撵词尿咬晤辨要遵射龙接酷廊掉驳者锚渴简痢躇廓得碘禽刨介育朗蔼望第8章VH
28、DL设计进阶第8章VHDL设计进阶 本节将从减小输出信号时延和消除“毛刺”现象的角度出发,对前面介绍的Moore型有限状态机进行改进。这里将介绍两种改进的Moore型有限状态机:n一种是在Moore型有限状态机中直接把状态作为输出信号;n另一种是在Moore型有限状态机中采用并行输出寄存器进行译码输出。8.4.4 8.4.4 8.4.4 8.4.4 改进的改进的改进的改进的MooreMooreMooreMoore型有限状态机型有限状态机型有限状态机型有限状态机仔幽鸿逃乳蝗移导钮核簧死姐钙瘪铱滑镇歌磁芝辫荐晕勋喳鸦手艺闭趴逆第8章VHDL设计进阶第8章VHDL设计进阶 在Moore型有限状态机中
29、,如果把状态作为输出信号将会构成一种特殊类型的有限状态机,这种改进的有限状态机实际上相当于去掉了一般有限状态机中的输出逻辑电路。在数字电路中,这种改进的Moore型有限状态机的结构框图如图所示。 8.4.4 8.4.4 8.4.4 8.4.4 改进的改进的改进的改进的MooreMooreMooreMoore型有限状态机型有限状态机型有限状态机型有限状态机v一、状态作为输出信号一、状态作为输出信号喳垫潞抽阵酶亏叭墟气拄谩旅稗陶演沤蚜伟敝碑苞星幅跑戊巫悉颅哗荷才第8章VHDL设计进阶第8章VHDL设计进阶 采用VHDL语言描述这种改进的Moore型有限状态机之前,设计人员首先要对Moore型有限状
30、态机的状态进行编码操作。主要包括以下几个步骤:1建立包括有限状态机各个状态和输出信号的表格;8.4.4 8.4.4 8.4.4 8.4.4 改进的改进的改进的改进的MooreMooreMooreMoore型有限状态机型有限状态机型有限状态机型有限状态机v一、状态作为输出信号一、状态作为输出信号鳖台侧奢听皂以甫乏穿啸欲撵虞御毁齿渣酞因转畴它拂盏源见驱宙坪稀伍第8章VHDL设计进阶第8章VHDL设计进阶 2对建立的表格添加状态位;8.4.4 8.4.4 8.4.4 8.4.4 改进的改进的改进的改进的MooreMooreMooreMoore型有限状态机型有限状态机型有限状态机型有限状态机v一、状态
31、作为输出信号一、状态作为输出信号私偷啥建饭粹诈挥甥踢暴滑缠包咆颤娇茨果烩绎哎殷彬粒深哗拓摆躲改刨第8章VHDL设计进阶第8章VHDL设计进阶 3补全表格中的状态编码8.4.4 8.4.4 8.4.4 8.4.4 改进的改进的改进的改进的MooreMooreMooreMoore型有限状态机型有限状态机型有限状态机型有限状态机v一、状态作为输出信号一、状态作为输出信号番聚昨贿恕铣掣翰盈男辗烁切寇凶孟磺益娜佑妄导荚溺军笑窑竖联蔽胚耀第8章VHDL设计进阶第8章VHDL设计进阶 并行输出寄存器的译码输出同样也是为了减少输出信号的延时,从而提高Moore型有限状态机的速度。这种改进的Moore型有限状态
32、机的结构框图如图所示。8.4.4 8.4.4 8.4.4 8.4.4 改进的改进的改进的改进的MooreMooreMooreMoore型有限状态机型有限状态机型有限状态机型有限状态机v二、并行输出寄存器的译码输出二、并行输出寄存器的译码输出募赃姥释糊吸撑栅棕伙紊筛熙蝗科哀搐巍绅金剂向横姚二闽浚建兽孕阜丑第8章VHDL设计进阶第8章VHDL设计进阶 在数字电路系统中,有限状态机是指那些输出取决于过去输入部分和当前输入部分的时序逻辑电路。有限状态机是一种十分重要的时序逻辑电路模块,它对于数字系统的设计具有十分重要的作用。 通常,设计人员将有限状态机划分为Moore型有限状态和Mealy型有限状态机。其中,Moore型有限状态机的输出信号仅与当前状态有关,即可以把它的输出看成是当前状态的函数;Mealy型有限状态机的输出信号不仅与当前状态有关,而且还与所有的输入信号有关,即可以把它的输出看成是当前状态和所有输入信号的函数。 8.4.5 8.4.5 8.4.5 8.4.5 小结小结小结小结走姚腮慨皇湃赎拽狈浩冤拴酸君震圈忽诱央恋锹腮明硫祟慢纵拄拌绝侨肥第8章VHDL设计进阶第8章VHDL设计进阶