已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章 VHDL基本语句与基本设计,EDA技术与VHDL设计,7.1,顺序语句,并行语句,VHDL组合逻辑电路设计,VHDL时序逻辑电路设计,7.2,7.3,7.4,VHDL基本语句与基本设计,顺序语句的执行顺序与书写顺序一致,与传统软件设计语言的特点相似。顺序语句只能用于进程和子程序中,被用来描述组合逻辑和时序逻辑。 常用的顺序描述语句有:赋值语句、IF语句、CASE语句、LOOP语句、NEXT语句、EXIT语句、子程序、RETURN语句、WAIT语句和NULL语句。,7.1 顺序语句,信号赋值语句:,7.1.1 赋值语句,赋值目标=赋值源;,变量赋值语句:,赋值目标:=赋值源;,根据语句所设条件,if语句有选择地执行指定的语句,其语法格式由简单到复杂可以分为三种: (1)具有开关控制的IF语句 (2)具有二选择控制的IF语句 (3)具有多选择控制的IF语句,7.1.2 IF语句,一般格式: if 条件 then 顺序语句; end if; 当条件成立,执行顺序语句,否则跳过语句。,具有开关控制的IF语句,if (EN=1) then A=B;- 当条件EN=1时,A随B变化;否则,该语句不执行 end if;,具有开关控制的IF语句举例,一般格式: if 条件 then 顺序语句; else 顺序语句; end if; 条件成立执行then后顺序语句;否则执行else后的顺序语句。,具有二选择控制的IF语句,if OE = 0 then Y = not x; else Y = Z; - 高阻符号“Z”要大写 end if;,用IF语句描述三态非门,一般格式: if 条件 then 顺序语句; elsif 条件 then 顺序语句; elsif 条件 then 顺序语句; else 顺序语句; end if;,具有多选择控制的IF语句,case语句根据表达式的取值直接从多组顺序语句中选择一组执行,其语句格式为: case 表达式 is when 选择值 = 顺序语句; when 选择值 = 顺序语句; when others = 顺序语句; end case;,7.1.3 CASE语句,一般格式: (1)关键词others只能出现一次,且只能作为最后一种条件取值。使用others的目的是为了使条件句中的所有选择值能涵盖表达式的所有取值,以免综合器会插入不必要的锁存器。,使用CASE语句注意事项,一般格式: (2)条件句中的选择值必须在表达式的取值范围内。 (3)case语句中每一条件句的选择值只能出现一次,不能有相同选择值的条件语句出现。 (4)case语句执行必须选中,且仅能选中所列语句中的一条。,使用CASE语句注意事项,(1)WHEN 取值=顺序语句: (2)WHEN 取值|取值|取值=顺序语句: (3)WHEN 取值 TO 取值=顺序语句; (4)WHEN 取值 DOWNTO 取值=顺序语句; (5)WHEN OTHERS=顺序语句;,CASE语句中WHEN字句书写格式,d0d0d1d2d3=d; END CASE;,CASE语句应用举例,LOOP语句与其它高级语言中的循环语句相似,它可以使所包含的一组顺序语句被循环执行,其执行次数可由设定的循环参数决定。LOOP语句有三种格式: (1)无限LOOP语句 (2)FOR_LOOP语句 (3)WHILE_LOOP语句,7.1.4 LOOP语句,标号:LOOP 顺序语句 EXIT 标号; END LOOP; 举例: L2 : LOOP a: = a+1 ; EXIT L2 WHEN a10 ; END LOOP L2 ;,无限LOOP语句,标号:FOR 循环变量 IN 离散范围 LOOP 顺序处理语句; END LOOP 标号; 注意: (1)循环变量是LOOP内部自动声明的局部量,仅在LOOP内可见。 (2)离散范围必须是可计算的整数范围。循环次数范围规定LOOP语句中的顺序语句被执行的次数。,FOR_LOOP语句,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY parity_check IS PORT( a: IN STD_LOGIC_VECTOR( 7 DOWNTO 0 ) ; y: OUT STD_LOGIC ) ; END ENTITY parity_check; ARCHITECTURE one OF parity_check IS BEGIN PROCESS( a ) VARIABLE tmp: STD_LOGIC; BEGIN tmp: =1 ; FOR i IN 0 TO 7 LOOP tmp: tmp xor a( i ) ; END LOOP; y=tmp ; END PROCESS; END;,用FOR LOOP语句描述8位奇偶校验电路,标号:WHILE 循环条件 LOOP 顺序处理语句; END LOOP 标号; 例: sum := 0 ;i := 0 ; abcd : WHILE ( i10 ) LOOP sum:=sum+i; i:=i+1; END LOOP abcd ;,WHILE_LOOP语句,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY parity_check IS PORT( a: IN STD_LOGIC_VECTOR( 7 DOWNTO 0 ) ; y: OUT STD_LOGIC ) ; END ENTITY parity_check; ARCHITECTURE one OF parity_check IS BEGIN PROCESS( a ) VARIABLE tmp: STD_LOGIC;VARIABLE i: INTEGER ; BEGIN tmp: =0 ; i := 0 ; WHILE ( i8 ) LOOP tmp: tmp xor a( i ) ; i:=i+1; END LOOP; y=tmp ; END PROCESS; END;,用WHILE_LOOP语句描述8位奇偶校验电路,在LOOP语句中,NEXT语句用来跳出本次循环。其格式分三种: (1)NEXT:无条件终止当前的循环,跳回到本次循环LOOP语句开始处,开始下次循环。 (2)NEXT: 标号; 无条件终止当前的循环,跳转到指定标号的LOOP语句开始处,重新开始执行循环操作。 (3)NEXT 标号 WHEN 条件表达式;,7.1.5 NEXT语句,L1: WHILE i10 LOOP L2: WHILE j20 LOOP NEXT L1 WHEN i=j; END LOOP L2 ; END LOOP L1 ;,NEXT语句举例,EXIT语句是LOOP语句的内部循环控制语句,作用是结束循环状态。而区别在于NEXT语句是跳向LOOP语句的起始点,EXIT语句则是跳向LOOP语句的终点。 EXIT的语句格式也有3种: (1)EXIT ; (2)EXIT LOOP 标号; (3)EXIT LOOP 标号 WHEN 条件表达式;,7.1.6 EXIT语句,PROCESS (a) VARIABLE int_a: INTEGER; BEGIN int_a:=a; FOR i IN 0 TO max_limit LOOP IF(int_a=0) THEN EXIT; ELSE int_a:=int_a-1; END IF; END LOOP; END PROCESS;,EXIT语句举例,在进程中(包括过程中),当执行到WAIT(等待语句时),运行程序将被挂起,直到满足此语句设置的结束挂起条件后,才重新开始执行进程或过程中的程序。WAIT语句有以下四种不同的语句格式: (1)WAIT -无限等待 (2)WAIT ON -敏感信号量变换 (3)WAIT UNTIL -条件满足(可综合) (4)WAIT FOR -时间到,7.1.7 WAIT语句,进程中其一般格式为:WAIT ON 信号,信号; 例如,以下两种描述是完全等价的: PROCESS(a,b) PROCESS BEGIN BEGIN y=a AND b; y=a AND b; END PROCESS; WAIT ON a, b; END PROCESS; 敏感信号量列表和WAIT语句选其一,不能同时使用。,1. WAIT ON语句,进程中其一般格式为:WAIT UNTIL 表达式; 例如,WAIT UNTIL语句有三种表达方式: (1)WAIT UNTIL 信号某个数值; (2)WAIT UNTIL 信号EVENT AND 信号某个数值; (3)WAIT UNTIL NOT(信号STABLE)AND 信号某个数值;,2. WAIT UNTIL语句,在进程中允许对子程序进行调用。对子程序的调用语句是顺序语句的一部分。 子程序包括过程和函数,可以在VHFL的结构体或程序包中的任何位置对子程序进行调用。子程序调用可以在任何地方根据其名称调用子程序。,7.1.8 子程序调用语句,调用过程的语句格式如下: 过程名(参数名=表达式,参数名=表达式); 其中表达式也称为实参,它可以是一个具体的数值,也可以是一个标识符,是当前调用程序中过程形参的接受体。,过程调用,函数调用与过程调用十分类似,不同之处是调用函数将返回一个指定类型的值,函数的参量只能是输入值。 函数调用的一般格式为: 函数名(参数名=表达式,参数名=表达式);,函数调用,7.2 并行语句,并行信号赋值语句 进程语句 并行过程调用语句 元器件例化语句 生成语句,33/38,7.2.1 并行信号赋值语句,三种并行信号赋值: 简单信号赋值 条件信号赋值 选择信号赋值,34/38,1. 并行简单信号赋值语句,35/38,2. 条件信号赋值语句,36/38,用when-else语句描述2选一的MUX,entity mux2to1 is port(a,b:in bit; sel:in bit; y:out bit); end mux2to1; architecture one of mux2to1 is begin y=b when sel=1 else a; end one;,信号定义成比特类型,可取0和1。,如果把=1去掉,结果如何?,37/38,用when-else语句描述4选1的MUX,entity mux4to1 is port(a,b,c,d:in bit; sel1,sel0:in bit; y:out bit); end mux4to1; architecture one of mux4to1 is begin y=a when (sel1=0) and (sel0=0) else b when (sel1=0) and (sel0=1) else c when (sel1=1) and (sel0=0) else d; end one;,问题:如果00时选a,01时选b,10和11时都选c,怎么办?,y=a when (sel1=0) and (sel0=0) else b when (sel1=0) and (sel0=1) else c when (sel1=1) and (sel0=0) else d;,38/38,3. 选择信号赋值语句,39/38,问题:如果00时选a,01时选b,10和11时都选c,怎么办?,architecture one of mux4to1 is signal sel:bit_vector(1 downto 0); begin sel(1)=sel1; sel(0)=sel0; with sel select y=a when “00“, b when “01“, c when others; end one;,entity mux4to1 is port(a,b,c:in bit; sel1,sel0:in bit; y:out bit); end mux4to1;,注意:when others包含那些未被列出的可能。,40/38,如果信号类型换成STD_LOGIC,library ieee; use ieee.std_logic_1164.all; entity mux4to1 is port(a,b,c:in std_logic; sel1,sel0:in std_logic; y:out std_logic); end mux4to1;,architecture one of mux4to1 is signal sel:std_logic_vector(1 downto 0); begin sel(1)=sel1; sel(0)=sel0; with sel select y=a when “00“, b when “01“, c when others; end one;,41/38,VHDL模型并行信号赋值,library ieee; use ieee.std_logic_1164.all; entity cmpl_sig is port ( a, b, sel : in std_logic; x, y, z : out std_logic); end cmpl_sig;,architecture logic of cmpl_sig is begin x = (a and not sel) or (b and sel); y = a when sel=0 else b; with sel select z = a when 0, b when 1, 0 when others; end logic;,信号赋值执行是并行的,与语句放置的位置先后无关。,42/38,7.2.2 进程语句,过程语句有 (1)隐含的过程: 并行信号赋值语句 元件语句 过程的敏感信号在表达式右边。 (2)直接的过程: 也是并行语句 只包括顺序语句,- Explicit Process Statement PROCESS (敏感信号表) Constant Declarations Type Declarations Variable Declarations BEGIN - 顺序语句 #1; - - 顺序语句 #N ; END PROCESS;,43/38,Process语句的执行,process语句靠wait语句和敏感信号表来控制语句执行次数。 敏感信号表隐含着在process的后面有一个wait语句。 一个process可以有多个wait语句。 Process必须具有敏感信号表和wait语句中的一个。. 注意:逻辑综合将对wait和敏感信号表作出限制。,process (a,b) begin -sequential statements end process; process begin - sequential statements wait on (a,b) ; end process;,44/38,多进程语句,一个构造体可以有多个process。 process之间是并发的。 在process内部,语句执行是有顺序的。,构 造 体,process1,processN,信号,信号,45/38,VHDL模型多进程语句,process语句的执行是并行的,与位置没有关系。,在process内的语句执行是顺序的。,process语句内也可进行信号赋值。,46/38,信号赋值延时(Delay),信号赋值可以在process语句内部也可以在外部进行(如三种并行赋值语句)。 信号赋值发生时会有时延,延时的类型有两种: 固有(Inertial)延时(缺省的) 信号在传输过程中会时间长度
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度智能交通系统代理服务合同4篇
- 2025年度智能铝板装配一体化工程承包合同4篇
- 2025年度智慧城市建设项目承包经营合同范本8篇
- 2025年度水电工程水土保持与生态修复承包合同集锦4篇
- 2025年度体育场馆设施升级改造劳务分包合同3篇
- 2024年精简版房地产销售协议纲要版
- 2025年度特种车辆租赁与维护服务协议3篇
- 2025年度文化创意产业园区建设承包借款合同4篇
- 2025年度智能路灯与充电桩一体化安装服务合同3篇
- 2024艺人经纪合同纠纷案例
- 刀模检测、保养记录
- 小学五年级脱式计算题300道-五年级上册脱式计算题及答案
- 铝矾土进口合同中英文
- 最新台湾药事法
- 2022年金矿采选项目可行性研究报告
- 氧气吸入法操作并发症预防及处理规范草稿
- 2022版云南财经大学推免管理办法
- 门诊特定病种待遇认定申请表
- 混合离子交换器使用说明书正本
- 工伤保险待遇及案例分析PPT课件
- 自控工程识图
评论
0/150
提交评论