ImageVerifierCode 换一换
你正在下载:

VHDL.docx

[预览]
格式:DOCX , 页数:29 ,大小:834.80KB ,
资源ID:7470912      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7470912.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VHDL.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VHDL.docx

1、VHDL并行语句结构是最具硬件描述语言特色的,在VHDL程序中各种并行语句在结构体中的执行是同步进行的,也就是说并行语句的执行与书写的顺序无关。并行语句的七种基本语句是: 并行信号赋值语句 进程语句 块语句 条件信号赋值语句 元件例化语句 生成语句 并行过程调用语句。并行语句在结构体中的使用格式为:ARCHITECTURE 结构体名 OF 实体名 IS 说明语句BEGIN 并行语句END ARCHITECTURE 结构体名;8.1 进程语句进程语句本身是一种并行语句,在结构体中可以有多个进程语句以及其他并行语句并行存在。进程语句的设计实例例1)一位十进制加法计数器(加一操作)LIBRARY I

2、EEE;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 ) -敏感信号中无时钟信号,为组合进程。BEGIN IF (clr=1 OR in1= “1001” ) THEN out

3、1= “0000”; -当有清零信号或输入数据为9时输出0 ELSE 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;ARC

4、HITECTURE bhv OF cnt10 ISBEGINPROCESS BEGIN WAIT UNTIL clkEVENT AND clk=1;-时钟为敏感信号,为时序进程。 IF (clr=1 OR out1= “1001” ) THEN out1= “0000”; -当有清零信号或输出数据为9时输出0(同步清零) ELSE out1 =out1+1; -否则加一操作(+号使用了重装载算符) END IF; END PROCESS;END;形成时序电路例3)可预置一位十进制加法计数器(异步置数、清零,同步计数)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164,AL

5、L;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时输

6、出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_LOG

7、IC_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

8、(clkEVENT AND clk=1) THEN out1 =out1+1; -否则加一操作(+号使用了重装载算符)END IF ; END PROCESS;END;8.2 块语句块语句本身是并行语句结构,其内部也都是由并行语句构成的(包括进程)。与其它的并行语句相比,块语句本身并没有独特的功能,他只是一种并行语句的组合方式,利用它可将程序编排得更有层次,可读性更强。块的引入并不会影响原来的电路功能。8.3 并行信号赋值语句并行信号赋值语句有三种形式: 简单信号赋值语句 条件信号赋值语句 选择信号赋值语句 在结构体内的所有并行信号赋值语句的执行都是同时发生的,与书写顺序无关。 只要赋值源发生

9、变化赋值语句将被启动,且是完全独立于其他语句的。 以上三种形式都可以直接出现在结构体中。8.3.1 简单信号赋值语句简单信号赋值语句格式如下: 赋值目标 = 表达式(赋值源)例 并行的简单赋值操作-以下5条信号赋值语句的执行是并行发生的ARCHITECTURE bhv OF bc1 ISSIGNAL s1 : STD_LOGIC;BEGIN output1= a AND b ; output2= c+d ;B1:BLOCK SIGNAL e, f, g, h :STD_LOGIC;-信号无方向 BEGIN g=e OF f;-无赋值源应加e=a;f=b; h=e XOR g; END BLOC

10、K B1; s1= g;-g说明在块内而是用在块外END; 改错8.3.1 条件信号赋值语句条件信号赋值语句格式如下:赋值目标 顺序语句;WHEN 选择值 = 顺序语句;WHEN 选择值(OTHERS) = 顺序语句;END CASE; 条件信号赋值语句可以是不同的数据对象的不同条件的判断,而执行的却是向同一目标赋值,且条件可以有重叠。赋值目标 = 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式 ;例 条件赋值操作 z= a WHEN p1 = 1 ELSE b WHEN p2 = 1 ELSE c; 当p1和p2同时为1时,z获得的赋值是a.8.3.2 选

11、择信号赋值语句选择信号赋值语句格式如下:WITH 选择表达式 SELECT 赋值目标 = 表达式 WHEN 选择值, 表达式 WHEN 选择值, 表达式 WHEN 选择值; 选择信号赋值语句与CASE语句十分相似,但不能应用于进程语句中。 CASE语句的启动是靠进程语句的敏感信号,选择信号赋值语句的启动是靠选择表达式的变化。 与CASE语句相同,选择信号赋值语句对条件选择值的测试具有同期性,与书写的顺序无关,因此不允许有条件重叠现象和条件涵盖不全的现象。 选择信号赋值语句的每一子句结尾是逗号。例 逻辑运算的指令编码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164,AL

12、L;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 )BEGIN Instrction= c&b&a; -输入数据并置为逻辑操作指令 WITH instruction SELECT dataout dat

13、a ( high ) ) THEN - Low, high 为数组data的下标 Temp := data( low ) ; data( low ) := data( high ) ; data( high ) := temp ; END IF; END swap ; VARIABLE my_array : data_array ; BEGIN my_array := in_array ; swap( my_array, 1, 2 ); -过程调用 my_array, 1, 2是对应data,Low, high的实参 swap( my_array, 2, 3 ); -位置关联 swap( my

14、_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 ISBEGIN cc1, c= y , b=d1); -名字关联U3 : nd2 PORT MAP ( x, y, c= z1); -混合关联END ; 元件例化与子程序调用的区别:

15、子程序调用属于同一设计层次(同一实体),而元件例化属于不同设计层次(实体中插入实体)。 VHDL元件例化语句并不优于图形输入方式。8.6 类属映射语句类属映射语句应用于元件例化语句中的元件规模参数的设定,为例化中的元件规模的改变提供了极大方便。类属映射语句格式:GENERIC MAP(类属表);8.7 块生成语句( GENERATE ) 生成语句是根据条件或要求将并行语句进行多次复制。 生成语句的格式:标号: FOR 循环变量 IN 取值范围 GENERATE 说明 BEGIN 并行语句 -要复制的并行语句 END GENERATE 标号;标号: IF 条件 GENERATE 说明 BEGIN

16、 并行语句 -要复制的并行语句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

17、), y=b(i);END GENERATE gen;8.8 属性描述与定义语句VHDL中预定义了多种数据对象或其他项目的属性,可用于监测和统计。属性描述语句格式:属性测试项目名属性标识符;1. 信号类属性(信号属性函数EVENT和STABLE) EVENT表示某信号在当前的一个极小的时间段内发生的事件,也就是该信号的电平发生变化。如: clockEVENT 用来测试信号clock的电平变化,返回值为true。如果改写为clockEVENT AND clock=1 则测试的是上升沿。 STABLE的测试功能与EVENT相反,它是信号在时间段内无事件发生,则返还TRUE值。如:(NOT cloc

18、kSTABLE 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表示某一数据对象的取值范围,返回值为与定义的顺序

19、相反的数据范围。 SIGNAL range1 : IN STD_LOGIC_VECTOR(0 TO 7).FOR i IN range1REVERSE_RANGE LOOP如:返回值为(7 DOWNTO 0) 状态机是一种对按顺序工作的数字系统的描述,其工作方式是按预定的顺序或条件实现系统的状态的相互转换,是纯硬件数字系统中的顺序控制电路。采用VHDL设计有限状态机有很多优越性。 比纯硬件系统设计更灵活,可以实现远离硬件的设计方式。 运行的速度和可靠性优于CPU。 有利于克服电路中的毛刺现象,设计方案有多种选择。9.1 一般有限状态机的设计用VHDL设计的状态机的一般结构由以下4部分组成: 说

20、明部分 主控时序进程 主控组合进程 辅助进程。1. 说明部分说明部分是用来完成描述各状态数据对象的数据类型,一般定义为枚举类型,且放在ARCHITECTURE和BEGIN之间。ARCHITECTURE IS TYPE states IS (st0, st1, st2, st3, st4 );SIGNAL current_state , next_state : states ;.BEGIB.如:ARCHITECTURE IS TYPE week IS (sun, mon, tue, wed, thu, fri, sat );SIGNAL current_day , next_day : wee

21、k ;.BEGIB. 枚举类型文字元素的编码通常是在综合时自动设置的,一般将第一个枚举元素(最左边)编码为000等。2. 主控时序进程主控时序进程是指负责状态转换的进程,其作用就是在时钟的作用下将“现态”转换为“次态”的操作,一般不负责次态方案的选择。3. 主控组合进程主控组合进程是指选择次态的进程,其作用是根据当前状态和外部信号(指令)等决定次态的取向,并将此次态传递给主控时序进程和输出控制信号。4. 辅助进程辅助进程是配合状态机工作的组合或时序进程。状态机状态图有限状态机工作原理框图状态机工作时序图 (moore状态机)9.2 Moore 型有限状态机的设计Moore形有限状态机是同步状态

22、机,其输出只是当前状态的函数(依赖于时钟)。9.2.1 AD574采样控制器设计(三进程有限状态机) 设计方法:1. 分析工作逻辑与时序2. 画出逻辑状态图3. 画出逻辑结构图4. 编写程序代码AD574逻辑控制真值表 以上的COM1和COM2可以合并成一个进程。 9.2.1 单进程Moore型有限状态机为了克服纯组合进程输出的控制信号产生毛刺现象,可以采用混合进程方式,即组合进程和时序进程在同一个进程中。单进程Moore型有限状态机克服毛刺的方法是采用同步锁存输出方案,即由锁存器在时钟控制下同步输出,从而避免竞争冒险现象。缺点是输出时间比多进程方式晚一个时钟周期。例: 由于CASE语句是在每次时钟上升沿处启动的,因此其对应的赋值语句(Q

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1