




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VHDL并行语句并行语句 并行语句一般处于进程(并行语句一般处于进程(PROCESS)的外部。)的外部。 所有并行语句都是并行执行的,所有并行语句都是并行执行的, 并行语句特点并行语句特点 a. 所有语句的执行是并行的;所有语句的执行是并行的; b. 每条语句的执行和其所在的位置无关;每条语句的执行和其所在的位置无关; c. 并行语句的输出仅仅依赖于输入,没有其它的并行语句的输出仅仅依赖于输入,没有其它的限制条件限制条件 基本的并行语句基本的并行语句(2)信号代入语句信号代入语句(3)进程()进程(Process)语句)语句(4)块()块(Block)语句)语句(6)元件()元件(Compon
2、ent)例化语句)例化语句(7)For-Generate语句语句(1)直接赋值语句:直接赋值语句:= 赋值运算符赋值运算符(5)子程序()子程序(Procedure/Function)Procedure/Function)一、直接赋值语句:一、直接赋值语句:= 赋值运算符赋值运算符作用:直接对目标对象进行赋值操作。作用:直接对目标对象进行赋值操作。语法格式:语法格式:Signal_name=expression;如:如:Signal A,B: std_logic_vector(7 down to 0); A=“00000000”;B=“10000000”;我们也可以这样赋值:我们也可以这样赋值
3、: A0); 信号信号A的每一位的值都为的每一位的值都为0。 B0); 信号信号B的第一位为的第一位为1,其它位的值为,其它位的值为0。 2. 段赋值段赋值Signal c : std_logic_vector(1 to 4);c(1 to 2) =“10”;c(1 to 4) =“1010”;3. 块赋值块赋值Signal a,b,c,d : std_logic;Signal s : std_logic_vector(1 to 4);s = “0100” ;(a,b,c,d) = s ;位置关联位置关联一、一、例例: C1 = NOT (a AND b); C2 = b AND c;信号赋值
4、语句在进程中使用是顺序语句信号赋值语句在进程中使用是顺序语句,但是在但是在进程外即在构造体中使用就是并发语句。进程外即在构造体中使用就是并发语句。格式格式: 目的信号量目的信号量=信号量表达式信号量表达式下面举一个应用示例,如下面电路:下面举一个应用示例,如下面电路: 1 1A AB BC CD D用用VHDL对电路的描述如下:对电路的描述如下: library ieee;use ieee.std_logic_1164.all;Entity exam1 isport (a,b : in std_logic;c,d : out std_logic);End exam1;Architecture
5、m1 of exam1 isBegin c=a and b;d=a or b ;END m1;并行语句的输出仅仅并行语句的输出仅仅依赖于输入,没有其依赖于输入,没有其它的限制条件。它的限制条件。每条语句的执行和其每条语句的执行和其所在的位置无关。所在的位置无关。 二、条件式信号代入语句二、条件式信号代入语句:When-Else语法格式为:语法格式为: 赋值目标赋值目标= 表达式表达式1 When 赋值条件赋值条件 Else 表达式表达式2 When赋值条件赋值条件 Else 表达式表达式N; 在结构体中的条件赋值语句的功能与在进程中的在结构体中的条件赋值语句的功能与在进程中的IF语句语句相同,
6、相同,在执行条件信号语句时,每一赋值条件是按书写在执行条件信号语句时,每一赋值条件是按书写的先后关系测定的。的先后关系测定的。我们曾举过一个二输入的与门电路的例子:我们曾举过一个二输入的与门电路的例子: Library ieee;Use ieee.std_logic_1164.all;Entity and2 isPort(d1,d2 : in std_logic; op : out std_logic);End and2;Architecture m1 of and2 isBeginop= 1 when(d1=1 and d2=1)else 0;End m1;Library ieee;Use
7、ieee.std_logic_1164.all;Entity mux isPort(a,b,c : in bit; p1,p2 : in bit z : out bit);End and2;Architecture m1 of mux isBeginz= a when p1=1 else b when p2=1 else c;End m1;三、选择式信号代入语句:三、选择式信号代入语句:With-Select-WhenWith expression Select赋值目标=表达式1 When constant_value1, 表达式2 When constant_value2, 表达式n Whe
8、n Others;选择选择式信号代入语句本身不能在进程中应用式信号代入语句本身不能在进程中应用, ,其功能与进程中其功能与进程中的的CASECASE语句相同。语句相同。例:不允许有重叠现象;必须含盖所有条件例:不允许有重叠现象;必须含盖所有条件Architecture m2 of and2 isSignal tmp : std_logic_vector(1 down to 0);Begintmp=d1 & d2;With tmp selectf=1 when “11”, 0 when others;End m2;例:例:When-else语句和语句和With-select-When语句的差别语
9、句的差别 两个语句的关键不同是:两个语句的关键不同是:对于条件的要求程度不同对于条件的要求程度不同,前者,前者 要求较松,后者要求严格。要求较松,后者要求严格。 a With-select-When语句中语句中When后的后的constant_value必须必须 是互不相同的;是互不相同的; b 而而When-else语句中语句中When后的后的logic_expression则不需要这样则不需要这样 的严格条件,因为其的严格条件,因为其When后的后的logic_expression的优先权次序的优先权次序 为由先到后排列。为由先到后排列。 进程语句(进程语句(process)Process
10、 语句的格式为:语句的格式为: 进程标号进程标号: Process (敏感信号列表敏感信号列表) 变量声明变量声明Begin顺序语句;顺序语句;End Process 进程标号进程标号;敏感表敏感表(Sensitivity list)包括进程的一些信号,当敏感表中的某个包括进程的一些信号,当敏感表中的某个信号变化时进程才被激活,进程内的顺序语句被执行。当进程结束信号变化时进程才被激活,进程内的顺序语句被执行。当进程结束时,进程内的输出信号值被更新,进程进入等待(睡眠)状态,直时,进程内的输出信号值被更新,进程进入等待(睡眠)状态,直到敏感表中的某一信号发生变化,进程被再次激活。到敏感表中的某一
11、信号发生变化,进程被再次激活。 下面举一个应用示例,如下面电路:下面举一个应用示例,如下面电路: 1 1A AB BC CD D用不同用不同VHDL语句语句对电路的描述如下:对电路的描述如下: library ieee;use ieee.std_logic_1164.all;Entity exam1 isPort (a,b : in std_logic;c,d : out std_logic);End exam1;Architecture m1 of exam1 isBegin c=a and b;d=a or b ;End m1;Architecture m2 of exam1 isbegi
12、nprocess (a, b)begin c=a and b; d= a or b ;end process;end m2;1 1A AB BC CD DArchitecture m2 of exam1 isbeginprocess (a, b)begin c=a and b; d= a or b ;end process;end m2;Architecture m3 of exam1 isbeginD1 :process (a, b)begin c=a and b;end process D1 ; D2:process (a, b)begin d= a or b ;end process D
13、2 ;end m3;1 1A AB BC CD D例:二选一电路例:二选一电路 ENTITY mux IS PORT (d0,d1,sel: IN BIT; q: OUT BIT); END mux; ARCHITECTURE connect OF mux IS SIGNAL tmp1,tmp2,tmp3: BIT; BEGIN cale: BLOCK BEGIN tmp1=d0 AND sel; tmp2=d1 AND (NOT sel); tmp3=tmp1 OR tmp2; q=tmp3; END BLOCK cale; END connect END connect; 子程序及其调用子
14、程序及其调用 (1) 子程序概述子程序概述(2)函数)函数(Function)(3)过程()过程(Procedure)(4)子程序调用)子程序调用 子程序概述子程序概述子程序:在主程序调用它以后能将处理结果返子程序:在主程序调用它以后能将处理结果返回主程序的程序模块。回主程序的程序模块。 子程序由顺序语句构成,用于完成重复性子程序由顺序语句构成,用于完成重复性的计算工作,的计算工作,子程序有两种类型,即过程子程序有两种类型,即过程(Procedure)和函数()和函数(Function)。子程序的)。子程序的使用方法只能通过子程序调用及与子程序的界使用方法只能通过子程序调用及与子程序的界面端口
15、进行通信。每调用一次子程序都意味着面端口进行通信。每调用一次子程序都意味着增加了一个硬件电路模块,因此,在实际使用增加了一个硬件电路模块,因此,在实际使用时,要密切关注和严格控制子程序的调用次数。时,要密切关注和严格控制子程序的调用次数。 函数函数(Function)函数首函数首Function 函数名 (参数表) Return 数据类型 IS 说明部分 Begin 顺序语句 END Function 函数名;函数体函数体注注:参数表中参量可以是变量、信号、常数(默认)参数表中参量可以是变量、信号、常数(默认) 无需定义参数的方向(默认为无需定义参数的方向(默认为“输入输入”)例例1Entit
16、y func IsPort ( a: in bit_vector (0 to 2) ; m : out bit_vector(0 to 2);End Entity func;Architecture demo Of func IsFunction sam ( x,y,z: bit) Return bit isBegin Return (x and y) or zEnd Function sam;BeginProcess (a)Beginm(0)=sam(a(0), a(1), a(2);m(1)=sam(a(2), a(0), a(1);m(2)Return “1100”;When “0101
17、”Return “1100”;When OthersReturn “1111”;End Case;End Function trans; 过程(过程(Procedure)过程首过程首Procedure 过程名 (参数表) IS 说明部分 Begin 顺序语句 END Procedure 过程名;过程体过程体注注:参数表中参量可以是变量、信号、常数(默认)参数表中参量可以是变量、信号、常数(默认)参数的方向可以是参数的方向可以是 IN、OUT、INOUT例例Procedure prg1 (variable sel,value:inout bit_vector(0 to 3) ) ISBeginC
18、ase sel ISWhen “0000”valuevaluevaluey then tmp:=x;x:=y;y:=tmp;END IF;END SORT;Begin Process (a,b,c,d)Beginsort (a,c);sort (b,d);sort (a,b);sort (c,d);sort (b,c);END process;ra=a; rb=b;rc=c; rd=d;END muxes; 函数与过程对比函数与过程对比 v 过程可以返回多值,函数只能返回一过程可以返回多值,函数只能返回一个值。个值。v 过程的参数为过程的参数为IN、OUT、INOUT 函数的参数为函数的参数为
19、IN(默认默认)。 函数和过程均能产生新的电路模块。函数和过程均能产生新的电路模块。 作用作用:为了方便电路描述,将具有某一逻辑功能的完整的VHDL 设计(元件)直接调用,避免重复描述。例例a1b1c1d1xz1u2u3y元件例化(元件例化(Component Instantiation)语句)语句 U1a1b1c1d1xz1u2u3ya1b1c1d1xz1u2u3ya1b1c1d1xz1u2u3yyabLibrary ieee;Use ieee.std_logic_1164.all;Entity nd2 isPort (a,b : in std_logic; c : out std_logi
20、c;);End nd2;Architecture ndbev of nd2Begin c 信号信号A1, 组件信号组件信号B=信号信号B1,);位置对应方式位置对应方式名字直接对应名字直接对应例例: : 设计一个一位全加器设计一个一位全加器F FA AC C0 0S SA AB BC Ci i被加数被加数加数加数低位进位低位进位和和进位进位ABCiSC00 00 00 00 00 00 00 01 11 10 00 01 10 01 10 00 01 11 10 01 11 10 00 0101 10 01 1011 11 10 0011 11 11 111输出输出输入输入Library ie
21、ee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity fulladder isPort (Ci : in std_logic; a,b : in std_logic; s : out std_logic; Co : out std_logic);End fulladder;Architecture m1 of fulladder isSignal tmp: std_logic_vector(1 downto 0); Begintmp=(0 & a)+b+ci;s=tmp(0);co=tmp(1);End m1
22、;F F A AS Sa ab bC C i iC C 0 0利用一位全加器元件的调用实现四位全加器: 利用一位全加器元件的调用实现四位全加器:利用一位全加器元件的调用实现四位全加器: F FA AS S3 3A A3 3B B3 3F FA AS S2 2A A2 2B B2 2F FA AS S1 1A A1 1B B1 1F FA AS S0 0A A0 0B B0 0C C4 4C Ci in nC C1 1C C1 1C C2 2C C2 2C C3 3C C3 3C C4 4F F A AS Sa ab bC C i iC C 0 0Library ieee;Use ieee.st
23、d_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity adder isPort (Cin : in std_logic;x,y : in std_logic_vector(3 downto 0);sum : out std_logic_vector(3 downto 0);Cout : out std_logic);End adder;Architecture a of adder isSignal c: std_logic_vector(0 to 4);Component fulladderPort( ci,a,b : in std_
24、logic; s,co : out std_logic); end component;Beginc(0)=Cin;U1: fulladder Port map(c(0),x(0),y(0),sum(0),c(1);U2: fulladder Port map(c(1),x(1),y(1),sum(1),c(2);U3: fulladder Port map(c(2),x(2),y(2),sum(2),c(3);U4: fulladder Port map(c(3),x(3),y(3),sum(3),c(4);Coutc(0),a=x(0),b=y(0),s=sum(0),co=c(1);F
25、FA AS S3 3A A3 3B B3 3F FA AS S2 2A A2 2B B2 2F FA AS S1 1A A1 1B B1 1F FA AS S0 0A A0 0B B0 0C C4 4CinCinC C1 1C C1 1C C2 2C C2 2C C3 3C C3 3C C0 0U2: fulladder Port map(ci=c(1),a=x(1),b=y(1),s=sum(1),co=c(2);F FA AS S3 3A A3 3B B3 3F FA AS S2 2A A2 2B B2 2F FA AS S1 1A A1 1B B1 1F FA AS S0 0A A0 0
26、B B0 0C C4 4CinCinC C1 1C C1 1C C2 2C C2 2C C3 3C C3 3C C0 0U3: fulladder Port map(ci=c(2),a=x(2),b=y(2),s=sum(2),co=c(3);F FA AS S3 3A A3 3B B3 3F FA AS S2 2A A2 2B B2 2F FA AS S1 1A A1 1B B1 1F FA AS S0 0A A0 0B B0 0C C4 4CinCinC C1 1C C1 1C C2 2C C2 2C C3 3C C3 3C C0 0U4: fulladder Port map(ci=c(
27、3),a=x(3),b=y(3),s=sum(3),co=c(4);F FA AS S3 3A A3 3B B3 3F FA AS S2 2A A2 2B B2 2F FA AS S1 1A A1 1B B1 1F FA AS S0 0A A0 0B B0 0C C4 4CinCinC C1 1C C1 1C C2 2C C2 2C C3 3C C3 3C C0 0并行语句并行语句,元件同时产生元件同时产生(7)For-Generate语句作用:作用:For-Generate语句用于重复性的信号设置或重复性的元件例化。语句用于重复性的信号设置或重复性的元件例化。 上面的四位加法器可以这样来实现
28、:上面的四位加法器可以这样来实现: For i In 0 to 3 GenerateBitadder: fulladder Port map(c(i),x(i),y(i),sum(i),c(i+1);End generate;元件例化循环管脚映射语句元件例化循环管脚映射语句GenericGeneric语句语句 通过引入一个参数通过引入一个参数n n使得我们设计的加法器更加具有使得我们设计的加法器更加具有通用性,参数通用性,参数n n代表加法器中相加的位数,在代表加法器中相加的位数,在VHDLVHDL中,这样中,这样的参数称为的参数称为GenericGeneric(类属)(类属)。 通常定义在实体描述和元件声明中。通常定义在实体描述和元件声明中。 定义格式:定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金融机构财务风险评估与风险管理顾问协议
- 生态旅游区场地合作开发合同
- 境外旅游团队领队服务合同模板
- 长途运输车辆事故赔偿及保险理赔协议
- 物流终止合作协议书范本
- 医疗授权协议书范本
- 外资企业代理记账与外汇管理合同
- 地铁隧道工程安装施工安全责任协议
- 农业生产基地场地租赁保证金及农产品质量安全合同
- 企业办公楼场地租赁及物业服务委托协议
- 尺桡骨骨折临床路径表单
- 2024年烟台蓝天投资发展集团有限公司招聘笔试冲刺题(带答案解析)
- 手术室标本丢失的应急预案
- SYT 6587-2021 电子式井斜仪校准方法-PDF解密
- 2024年浙江绍兴市高速公路运营管理有限公司招聘笔试参考题库含答案解析
- 急性脑血管病的护理查房
- 外墙吊篮安全专项施工方案
- 思维可视化工具在英语教学中的应用探究 论文
- GMP清洁验证课件
- 养老护理员四级理论试题及答案
- 脊柱内镜技术
评论
0/150
提交评论