VHDL语言八.doc_第1页
VHDL语言八.doc_第2页
VHDL语言八.doc_第3页
VHDL语言八.doc_第4页
VHDL语言八.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

并行语句结构是最具硬件描述语言特色的,在VHDL程序中各种并行语句在结构体中的执行是同步进行的,也就是说并行语句的执行与书写的顺序无关。并行语句的七种基本语句是: 并行信号赋值语句 进程语句 块语句 条件信号赋值语句 元件例化语句 生成语句 并行过程调用语句。并行语句在结构体中的使用格式为:ARCHITECTURE 结构体名 OF 实体名 IS说明语句BEGIN并行语句END ARCHITECTURE 结构体名;8.1 进程语句进程语句本身是一种并行语句,在结构体中可以有多个进程语句以及其他并行语句并行存在。进程语句的设计实例例1)一位十进制加法计数器(加一操作)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164,ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 ISPORT( clr : IN STD_LOGIC;in1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);out1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END;ARCHITECTURE bhv OF cnt10 ISBEGINPROCESS ( in1, clr ) -敏感信号中无时钟信号,为组合进程。BEGINIF (clr=1 OR in1= “1001” ) THENout1= “0000”; -当有清零信号或输入数据为9时输出0ELSE Out1 = in1+1; -否则加一操作(+号使用了重装载算符)END IF;END PROCESS;END;形成组合电路例2)一位十进制加法计数器(同步清零)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164,ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 ISPORT( clr : IN STD_LOGIC;clk : IN STD_LOGIC;out1 : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);END;ARCHITECTURE bhv OF cnt10 ISBEGINPROCESS BEGINWAIT UNTIL clkEVENT AND clk=1;-时钟为敏感信号,为时序进程。IF (clr=1 OR out1= “1001” ) THENout1= “0000”; -当有清零信号或输出数据为9时输出0(同步清零)ELSE out1 =out1+1; -否则加一操作(+号使用了重装载算符)END IF; END PROCESS;END;WAIT语句可以多次挂起单一进程设置BUFFER的原因形成时序电路例3)可预置一位十进制加法计数器(异步置数、清零,同步计数)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164,ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 ISPORT( in1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);Clr, en, clk : IN STD_LOGIC;out1 : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);END;ARCHITECTURE bhv OF cnt10 ISBEGINPRO1:PROCESS ( en ,clr, clk ) -(异步清零、异步置数、同步计数)BEGINIF (clr=1 OR out1= “1001”) THEN -当有清零信号和数据为9时输出0。(异步清零) out1= “0000”; ELSIF (en=1) THEN out1= in1 ;ELS IF (clkEVENT AND clk=1) THEN out1 =out1+1; -否则加一操作(+号使用了重装载算符)END IF ; END PROCESS PRO1; 注意条件的优先级END;例3)可预置一位十进制加法计数器(同步置数、异步清零,同步计数)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164,ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 ISPORT( in1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);Clr, en, clk : IN STD_LOGIC;out1 : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);END;ARCHITECTURE bhv OF cnt10 ISBEGINPRO1:PROCESS ( clr, clk ) - -(同步置数)BEGINIF (clr=1 OR out1= “1001”) THEN -当有清零信号和数据为9时输出0。(异步清零) out1= “0000”; ELS IF (en=1) THEN -如果以上条件不成立说明是clk启动的进程 out1= in1 ;ELS IF (clkEVENT AND clk=1) THEN out1 =out1+1; -否则加一操作(+号使用了重装载算符)END IF ; END PROCESS;END;8.2 块语句块语句本身是并行语句结构,其内部也都是由并行语句构成的(包括进程)。与其它的并行语句相比,块语句本身并没有独特的功能,他只是一种并行语句的组合方式,利用它可将程序编排得更有层次,可读性更强。块的引入并不会影响原来的电路功能。8.3 并行信号赋值语句并行信号赋值语句有三种形式: 简单信号赋值语句 条件信号赋值语句注 选择信号赋值语句l 在结构体内的所有并行信号赋值语句的执行都是同时发生的,与书写顺序无关。l 只要赋值源发生变化赋值语句将被启动,且是完全独立于其他语句的。l 以上三种形式都可以直接出现在结构体中。8.3.1 简单信号赋值语句简单信号赋值语句格式如下:赋值目标 = 表达式(赋值源)例 并行的简单赋值操作-以下5条信号赋值语句的执行是并行发生的ARCHITECTURE bhv OF bc1 ISSIGNAL s1 : STD_LOGIC;BEGINoutput1= a AND b ;output2= c+d ;B1:BLOCKSIGNAL e, f, g, h :STD_LOGIC;-信号无方向BEGINg=e OF f;-无赋值源应加e=a;f=b;h=e XOR g;END BLOCK B1;s1= g;-g说明在块内而是用在块外END; 改错8.3.1 条件信号赋值语句条件信号赋值语句格式如下:赋值目标 顺序语句;WHEN 选择值 = 顺序语句;WHEN 选择值(OTHERS) = 顺序语句;END CASE;l 条件信号赋值语句可以是不同的数据对象的不同条件的判断,而执行的却是向同一目标赋值,且条件可以有重叠。赋值目标 = 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式 ;例 条件赋值操作 z= a WHEN p1 = 1 ELSE b WHEN p2 = 1 ELSE c;当p1和p2同时为1时,z获得的赋值是a.8.3.2 选择信号赋值语句选择信号赋值语句格式如下:WITH 选择表达式 SELECT 赋值目标 = 表达式 WHEN 选择值, 表达式 WHEN 选择值, 表达式 WHEN 选择值;注 选择信号赋值语句与CASE语句十分相似,但不能应用于进程语句中。 CASE语句的启动是靠进程语句的敏感信号,选择信号赋值语句的启动是靠选择表达式的变化。 与CASE语句相同,选择信号赋值语句对条件选择值的测试具有同期性,与书写的顺序无关,因此不允许有条件重叠现象和条件涵盖不全的现象。 选择信号赋值语句的每一子句结尾是逗号。例 逻辑运算的指令编码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164,ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY decoder ISPORT( a, b, c : IN STD_LOGIC;data1, data2 : IN STD_LOGIC; dataout : OUT IN STD_LOGIC );END; ARCHITECTURE bhv OF decoder ISSIGNAL instruction : STD_LOGIC_VECTOR( 2 DOWNTO 0 )BEGINInstrction= c&b&a; -输入数据并置为逻辑操作指令WITH instruction SELECTdataout data ( high ) ) THEN - Low, high 为数组data的下标Temp := data( low ) ;data( low ) := data( high ) ;data( high ) := temp ;END IF;END swap ; VARIABLE my_array : data_array ;BEGINmy_array := in_array ;swap( my_array, 1, 2 ); -过程调用 my_array, 1, 2是对应data,Low, high的实参swap( my_array, 2, 3 ); -位置关联swap( my_array, 1, 2 );out_array 连接端口名,.);-元件例化语句例:与门的元件例化(四输入或门)例 LIBRARY IEEE; -下一层设计(二输入与非门)USE IEEE.STD_LOGIC_1164,ALL;ENTITY nd2 ISPORT( a, b : IN STD_LOGIC;c : OUT IN STD_LOGIC );END; ARCHITECTURE bhv OF nd2 ISBEGINcc1, c= y , b=d1); -名字关联U3 : nd2 PORT MAP ( x, y, c= z1); -混合关联END ;注 元件例化与子程序调用的区别:子程序调用属于同一设计层次(同一实体),而元件例化属于不同设计层次(实体中插入实体)。 VHDL元件例化语句并不优于图形输入方式。8.6 类属映射语句类属映射语句应用于元件例化语句中的元件规模参数的设定,为例化中的元件规模的改变提供了极大方便。类属映射语句格式:GENERIC MAP(类属表);例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY exn ISPORT (d1,d2,d3,d4,d5,d6,d7 : IN STD_LOGIC;q1,q2 : OUT STD_LOGIC);END;ARCHITECTURE exn_behav OF exn ISCOMPONENT andnGENERIC ( n : INTEGER);PORT(a : IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);c : OUT STD_LOGIC);END COMPONENT;BEGINU1: andn GENERIC MAP (n=2) PORT MAP (a(0)=d1,a(1)=d2,c=q1);U2: andn GENERIC MAP(n=5) PORT MAP(a(0)=d3,a(1)=d4,a(2)=d5, a (3)=d6,a(4)=d7,c=q2);END;端口映射类属映射8.7 块生成语句( GENERATE ) 生成语句是根据条件或要求将并行语句进行多次复制。 生成语句的格式:标号: FOR 循环变量 IN 取值范围 GENERATE说明BEGIN并行语句 -要复制的并行语句END GENERATE 标号;标号: IF 条件 GENERATE说明BEGIN 并行语句 -要复制的并行语句END GENERATE 标号;注 生成语句多数用于产生一组完全相同的元件例化或过程调用。 生成语句不能用于函数调用。 生成语句可以嵌套,在嵌套时标号是必需的。例 复制元件例化COMPONENT compPORT ( x : IN STD_LOGIC; y : OUT STD_LOGIC);END COMPONENT;SIGNAL a : STD_LOGIC_VECTOR (0 TO 7);SIGNAL b: STD_LOGIC_VECTOR(0 TO7);.gen: FOR i IN aRANGE GENERATEu1 : comp PORT MAP (x=a(i), y=b(i);END GENERATE gen;例 1位锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY latch ISPORT (d, ena : IN STD_LOGIC;q : OUT STD_LOGIC);END;ARCHITECTURE bhv OF latch ISSIGNAL sig_save : STD_LOGIC;BEGINPROCESS (d, ena )BEGINIF ( ena =1) THEN sig_save = d;END IF;q= sig_save;END PROCESS;END;-例 用1位锁存器生成6位锁存器(74373)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY NS74373 ISPORT ( d : IN STD_LOGIC_VECTOR(6 DOWNTO 1);Oen, g : IN STD_LOGIC;q : OUT STD_LOGIC_VECTOR(6 DOWNTO 1);END;ARCHITECTURE bhv OF NS74373 ISCOMPONENT latch -元件说明PORT( d, ena : IN STD_LOGIC; q : OUT STD_LOGIC);END COMPONENT;SIGNAL sig_mid : STD_LOGIC_VECTOR( 8 DOWNTO 1); -信号说明BEGINFOR i IN 1 TO 6 GENERATE -生成6个1位锁存器 UX: latch PORT MAP (d(i), g, sig_mid(i); -元件例化END GENERATE;Q= sig_mid WHEN oen=0 ELSE “ZZZZZZZZ”;END ;8.8 属性描述与定义语句VHDL中预定义了多种数据对象或其他项目的属性,可用于监测和统计。属性描述语句格式:属性测试项目名属性标识符;1. 信号类属性(信号属性函数EVENT和STABLE) EVENT表示某信号在当前的一个极小的时间段内发生的事件,也就是该信号的电平发生变化。如: clockEVENT 用来测试信号clock的电平变化,返回值为true。如果改写为clockEVENT AND clock=1 则测试的是上升沿。 STABLE的测试功能与EVENT相反,它是信号在时间段内无事件发生,则返还TRUE值。如:(NOT clockSTABLE AND clock=1)监测的还是上升沿。2. 数据区间类属性数据区间属性格式数据对象RANGE(N)-数据对象REVERSE_RANGE (N) 数据对象RANGE(N)表示某一数据对象的取值范围,返回值为定义的数据范围。 SIGNAL range1 : IN STD_LOGIC_VECTOR(0 TO 7).FOR i IN range1RANGE LOOP如:注 RANGE 与数据类型数名中的 RANGE不同如:SUBTYPE short IS INTEGER RANGE 0 TO15; 数据对象 REVERSE_RANGE表示某一数据对象的取值范围,返回值为与定义的顺序相反的数据范围。 SIGNAL range1 : IN STD_LOGIC_VECTOR(0 TO 7).FOR i IN range1REVERSE_RANGE LOOP如:返回值为(7 DOWNTO 0) 状态机是一种对按顺序工作的数字系统的描述,其工作方式是按预定的顺序或条件实现系统的状态的相互转换,是纯硬件数字系统中的顺序控制电路。采用VHDL设计有限状态机有很多优越性。 比纯硬件系统设计更灵活,可以实现远离硬件的设计方式。 运行的速度和可靠性优于CPU。 有利于克服电路中的毛刺现象,设计方案有多种选择。9.1 一般有限状态机的设计用VHDL设计的状态机的一般结构由以下4部分组成: 说明部分 主控时序进程 主控组合进程 辅助进程。1. 说明部分说明部分是用来完成描述各状态数据对象的数据类型,一般定义为枚举类型,且放在ARCHITECTURE和BEGIN之间。ARCHITECTURE ISTYPE states IS (st0, st1, st2, st3, st4 );SIGNAL current_state , next_state : states ;.BEGIB.如:ARCHITECTURE ISTYPE week IS (sun, mon, tue, wed, thu, fri, sat );SIGNAL current_day , next_day : week ;.BEGIB.注 枚举类型文字元素的编码通常是在综合时自动设置的,一般将第一个枚举元素(最左边)编码为000等。2. 主控时序进程主控时序进程是指负责状态转换的进程,其作用就是在时钟的作用下将“现态”转换为“次态”的操作,一般不负责次态方案的选择。3. 主控组合进程主控组合进程是指选择次态的进程,其作用是根据当前状态和外部信号(指令)等决定次态的取向,并将此次态传递给主控时序进程和输出控制信号。4. 辅助进程辅助进程是配合状态机工作的组合或时序进程。状态机状态图有限状态机工作原理框图状态机工作时序图 (moore状态机)9.2 Moore 型有限状态机的设计Moore形有限状态机是同步状态机,其输出只是当前状态的函数(依赖于时钟)。9.2.1 AD574采样控制器设计(三进程有限状态机) 设计方法:1. 分析工作逻辑与时序2. 画出逻辑状态图3. 画出逻辑结构图4. 编写程序代码AD574逻辑控制真值表注 以上的COM1和COM2可以合并成一个进程。 9.2.1 单进程Moore型有限状态机为了克服纯组合进程输出的控制信号产生毛刺现象,可以采用混合进程方式,即组合进程和时序进程在同一个进程中。单进程Moore型有限状态机克服毛刺的方法是采用同步锁存输出方案,即由锁存器在时钟控制下同步输出,从而避免竞争冒险现象。缺点是输出时间比多进程

温馨提示

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

评论

0/150

提交评论