




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1VHDLVHDL程序的常用语句程序的常用语句 5.3 VHDL5.3 VHDL并行语句(并行语句(Concurrent Statements) 并行语句是指语句的执行顺序与语句的书写顺序无关,其执行是并发执并行语句是指语句的执行顺序与语句的书写顺序无关,其执行是并发执行的语句,并行语句之间可以有信息的交流,也可以互为独立、互不相关。行的语句,并行语句之间可以有信息的交流,也可以互为独立、互不相关。每一个并发描述语句的内部语句可以有两种不同的运行方式,即并行方式和每一个并发描述语句的内部语句可以有两种不同的运行方式,即并行方式和顺序方式。顺序方式。VHDLVHDL结构体中的并行语句主要有八种:
2、结构体中的并行语句主要有八种:并行语句在结构体中的使用格式如下:并行语句在结构体中的使用格式如下: ARCHITECTURE ARCHITECTURE 结构体名结构体名 OFOF 实体名实体名 ISIS 说明语句说明语句; BEGINBEGIN 并行语句并行语句; END ARCHITECTURE END ARCHITECTURE 结构体名结构体名; 1 1、进程语句进程语句 2 2、块语句、块语句 3 3、并行信号赋值语句并行信号赋值语句 4 4、并行过程调用语句、并行过程调用语句 5 5、并行断言语句、并行断言语句 6 6、类属语句、类属语句 7 7、元件例化语句元件例化语句 8 8、生成
3、语句、生成语句 2并行语句运行示意图并行语句运行示意图块语句块语句并行语句并行语句并行语句顺序语句1顺序语句2 . 顺序语句n进程语句进程语句生生成成语语句句信号信号元元件件例例化化语语句句并并行行过过程程调调用用语语句句并并行行信信号号赋赋值值语语句句信号信号信号信号信号信号信号信号ARCHITECTUREEND ARCHITECTURE35.3.1 5.3.1 进程语句进程语句( (Process Statement) )1. 1. 进程语句格式进程语句格式 PROCESSPROCESS语句结构的一般表达格式如下:语句结构的一般表达格式如下:一个结构体中可以有多个进程语句,同时并行执行。一
4、个结构体中可以有多个进程语句,同时并行执行。 进程标号进程标号: : PROCESSPROCESS ( ( 敏感信号参数表敏感信号参数表 ) ) ISIS 进程说明部分;进程说明部分; BEGINBEGIN 顺序描述语句;顺序描述语句; END PROCESSEND PROCESS 进程标号进程标号; ; 4ENTITY mul IS PORT (a, b, c, x, y : IN BIT; data_out : OUT BIT);END mul;ARCHITECTURE ex OF mul IS SIGNAL temp : BIT; BEGIN p_a: PROCESS (a, b, x)
5、 BEGIN IF (x = 0) THEN temp = a; ELSE temp = b; END IF; END PROCESS p_a; p_b: PROCESS(temp, c, y) BEGIN IF (y = 0) THEN data_out = temp; ELSE data_out = c; END IF; END PROCESS p_b;END ex;例:例:2选选12选选1abcxytempdata_out52.2.进程语句要点进程语句要点进程的设计需要注意的问题:进程的设计需要注意的问题: PROCESS PROCESS为一无限循环语句,为一无限循环语句,只有两种状态:
6、执行和等待只有两种状态:执行和等待 进程必须由敏感信号的变化(变量不能作为敏感信号)来启动或具有进程必须由敏感信号的变化(变量不能作为敏感信号)来启动或具有一个显式的一个显式的waitwait语句来激励语句来激励 使用了敏感表的进程不能再含有等待语句使用了敏感表的进程不能再含有等待语句 进程语句本身是并行语句,但其内部则为顺序语句进程语句本身是并行语句,但其内部则为顺序语句 信号是多个进程间的通信线,是进程间进行联系的重要途径信号是多个进程间的通信线,是进程间进行联系的重要途径 在任一进程的说明部分不能定义信号在任一进程的说明部分不能定义信号 一个进程中只允许描述对应于一个时钟信号的同步时序逻
7、辑一个进程中只允许描述对应于一个时钟信号的同步时序逻辑 进程可以描述组合电路,最重要的是用它设计时序电路进程可以描述组合电路,最重要的是用它设计时序电路6进程工作原理示意图进程工作原理示意图75.3.35.3.3并行信号赋值语句并行信号赋值语句( (Concurrent Signal Assignment Statement) ) 例如:例如: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY and_gate IS PORT ( a,b : IN STD_LOGIC ; c : OUT STD_LOGIC); END and_gate; AR
8、CHITECTURE behave OF and_gate IS BEGIN c = a AND b ; END ARCHITECTURE behave;(1 1)简单信号赋值语句的格式:)简单信号赋值语句的格式: 赋值目标赋值目标 = = 表达式表达式; ; 结构体中的多条并发赋值语句是并行执行的。结构体中的多条并发赋值语句是并行执行的。8(2 2) 条件信号赋值语句条件信号赋值语句( (Conditional Signal Assignment) )条件信号赋值语句的表达方式如下:条件信号赋值语句的表达方式如下:赋值目标赋值目标 = = 表达式表达式 WHEN WHEN 条件条件1 1 E
9、LSEELSE 表达式表达式 WHEN WHEN 条件条件2 2 ELSEELSE . . 表达式表达式 ;条件信号赋值语句的几点说明:条件信号赋值语句的几点说明:1 1)只有当条件满足时,才能将该条件前面表达式的值赋给)只有当条件满足时,才能将该条件前面表达式的值赋给目标信号;目标信号;2 2)对条件的判断是有顺序的,条件)对条件的判断是有顺序的,条件1 1具有最高的优先级;具有最高的优先级;3 3)条件表达式的值应该是布尔型数值;)条件表达式的值应该是布尔型数值;4 4)条件的最后一个表达式不含有)条件的最后一个表达式不含有when when 的子句。的子句。5 5)条件信号赋值语句允许条
10、件重叠。)条件信号赋值语句允许条件重叠。9例:例:ENTITY mux IS PORT ( a,b,c : IN BIT ; p1,p2 : IN BIT ; z : OUT BIT ); END mux; ARCHITECTURE behv OF mux IS BEGIN z = a WHEN p1 = 1 ELSE -注意,第一句具有最高优先级注意,第一句具有最高优先级 b WHEN p2 = 1 ELSE c ; END;10library ieee;use ieee.std_logic_1164.all;entity p_encoder isport(i:in std_logic_ve
11、ctor(7 downto 0);a:out std_logic_vector(2 downto 0);end;architecture behv of p_encoder isbegina=111 when i(7)=1 else110 when i(6)=1 else101 when i(5)=1 else100 when i(4)=1 else011 when i(3)=1 else010 when i(2)=1 else001 when i(1)=1 else000 when i(0)=1 else111 ;end;例:例:8 8输入优先编码器输入优先编码器11(3 3) 选择信号赋值
12、语句选择信号赋值语句( (Selected Signal Assignment) ) 选择信号赋值语句的格式如下:选择信号赋值语句的格式如下: WITH WITH 选择表达式选择表达式 SELECTSELECT 赋值目标信号赋值目标信号 = = 表达式表达式1 1 WHEN WHEN 选择值选择值1 1, 表达式表达式2 2 WHEN WHEN 选择值选择值2 2, . . 表达式表达式n n WHEN WHEN 选择值选择值n n; 选择信号赋值语句中也有敏感量,即关键字选择信号赋值语句中也有敏感量,即关键字WITHWITH旁边的选旁边的选择信号表达式,每当选择表达式的值发生变化时,就启动此
13、语择信号表达式,每当选择表达式的值发生变化时,就启动此语句对各子句的选择值同时进行测试对比,没有优先级之分,若句对各子句的选择值同时进行测试对比,没有优先级之分,若有满足条件的子句时,就将此子句表达式中的值赋给赋值目标有满足条件的子句时,就将此子句表达式中的值赋给赋值目标信号。信号。 12例:例:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decoder IS PORT ( a, b, c : IN STD_LOGIC; data1,data2 : IN STD_LOGIC; dataout : OUT STD_LOGIC );END dec
14、oder;ARCHITECTURE cont OF decoder IS SIGNAL instruction : STD_LOGIC_VECTOR(2 DOWNTO 0) ; BEGIN instruction = c & b & a ; WITH instruction SELECT dataout = data1 AND data2 WHEN “000”, -注意,每句最后使用逗号注意,每句最后使用逗号 data1 OR data2 WHEN 001 , data1 NAND data2 WHEN 010 , data1 NOR data2 WHEN “011” , data1 XOR
15、data2 WHEN “100” , data1 XNOR data2 WHEN 101 , Z WHEN OTHERS ; -最后一句是分号最后一句是分号END cont ;13 WITH selt SELECTmuxout = 连接端口名,连接端口名,.) ;例化名例化名n n :元件名:元件名n n PORT MAPPORT MAP( 端口名端口名= = 连接端口名,连接端口名,.) ; 15例:按下图电路,使用元件例化语句设计一个全加器例:按下图电路,使用元件例化语句设计一个全加器=1=1 & &1COUTu5 cinbau4u3u2u1I2I1SUMI016程序程序1 1:调用库中的
16、元件例化,并使用名称关联方式调用库中的元件例化,并使用名称关联方式library ieee;use ieee.std_logic_1164.all;entity fadd isport(a,b,cin:in std_logic;sum,cout:out std_logic);end;17ARCHITECTURE fadd_struc OF fadd IS COMPONENT and2 PORT (in1,in2: in std_logic; out: out std_logic); END COMPONENT; COMPONENT or2 PORT (in1,in2: in std_logic
17、; out: out std_logic); END COMPONENT; COMPONENT xor PORT (in1,in2: in std_logic; out: out std_logic); END COMPONENT;SIGNAL i0, i1, i2: std_logic; BEGIN18 u1: xor PORT MAP (in1=a, in2 =b, out =i0); u2: and2 PORT MAP (in1=a, in2 =b, out =i1); u3: xor PORT MAP (in1=i0, in2=cin, out=sum); u4: and2 PORT
18、MAP (in1=i0, in2=cin, out=i2); u5: or2 PORT MAP (in1=i1, in2=i2, out=cout);END fadd_struc; =1=1&1COUTu5 cinbau4u3u2u1I2I1SUMI019ARCHITECTURE fadd_struc OF fadd IS COMPONENT and2 PORT (in1,in2: in std_logic; out: out std_logic); END COMPONENT; COMPONENT or2 PORT (in1,in2: in std_logic; out: out std_l
19、ogic); END COMPONENT; COMPONENT xor PORT (in1,in2: in std_logic; out: out std_logic); END COMPONENT;SIGNAL i0, i1, i2: std_logic; BEGIN u1: xor PORT MAP (a, b, i0); u2: and2 PORT MAP (a, b, i1); u3: xor PORT MAP (i0, cin, sum); u4: and2 PORT MAP (i0, cin, i2); u5: or2 PORT MAP (i1, i2, cout);END fad
20、d_struc; 程序程序2 2:调用库中的元件例化,并使用位置关联方式调用库中的元件例化,并使用位置关联方式=1=1&1COUTu5 cinbau4u3u2u1I2I1SUMI020ARCHITECTURE fadd_struc OF fadd IS COMPONENT and2a PORT (x,y: in std_logic; z: out std_logic); END COMPONENT; COMPONENT or2a PORT (x,y: in std_logic; z: out std_logic); END COMPONENT; COMPONENT xor2 PORT (x,y
21、: in std_logic; z: out std_logic); END COMPONENT;SIGNAL i0, i1, i2: std_logic; BEGIN u1: xor2 PORT MAP (a, b, i0); u2: and2a PORT MAP (a, b, i1); u3: xor2 PORT MAP (i0, cin, sum); u4: and2a PORT MAP (i0, cin, i2); u5: or2a PORT MAP (i1, i2, cout);END fadd_struc; 程序程序3 3:调用自己设计的元件例化,并使用位置关联方式调用自己设计的元
22、件例化,并使用位置关联方式=1=1&1COUTu5 cinbau4u3u2u1I2I1SUMI021library ieee;use ieee.std_logic_1164.all;entity and2a isport (x,y:in std_logic;z:out std_logic);end;architecture beh of and2a isbeginz=x and y;end;library ieee;use ieee.std_logic_1164.all;entity or2a isport (x,y:in std_logic;z:out std_logic);end;arch
23、itecture beh of or2a isbeginz=x or y;end;library ieee;use ieee.std_logic_1164.all;entity xor2 isport (x,y:in std_logic;z:out std_logic);end;architecture beh of xor2 isbeginz=x xor y;end;225.3.65.3.6类属(类属(Generic)语句)语句 ENTITY ENTITY 实体名实体名 ISIS GENERIC GENERIC (类属表);类属表); PORTPORT (端口表);端口表); END ENT
24、ITYEND ENTITY 文件名;文件名; 类属语句用于不同层次之间的信息传递类属语句用于不同层次之间的信息传递,类属参量是一类属参量是一种端口界面常数,常以一种说明的形式放在实体或块结构种端口界面常数,常以一种说明的形式放在实体或块结构体前的说明部分。类属和常数不同,常数只能从设计实体体前的说明部分。类属和常数不同,常数只能从设计实体的内部得到赋值,且不能再改变,而类属的值可以从设计的内部得到赋值,且不能再改变,而类属的值可以从设计实体的外部提供。因此设计者可以从外面通过类属参量重实体的外部提供。因此设计者可以从外面通过类属参量重新设定新设定,从而容易的改变一个设计实体或一个元件的内部电从
25、而容易的改变一个设计实体或一个元件的内部电路结构和规模。路结构和规模。23 类属语句包括类属语句包括类属说明语句类属说明语句和和类属映射语句类属映射语句,书写,书写格式分别为:格式分别为: 类属说明语句的一般格式:类属说明语句的一般格式: GENERIC GENERIC (常数名:数据类型(常数名:数据类型 := =设定值设定值 ; 常数名:数据类型常数名:数据类型 := =设定值设定值 ););类属映射语句的一般格式:类属映射语句的一般格式: GENERIC MAP GENERIC MAP (类属表)(类属表)24library ieee;use ieee.std_logic_1164.al
26、l;entity fredevider isgeneric(n:integer:=4);port(clkin:in std_logic;clkout:out std_logic);end;Generic应用举例应用举例1 1:25architecture beh of fredevider issignal counter:integer range 0 to n;signal clk:std_logic;beginprocess(clkin)beginif rising_edge(clkin) thenif counter=n thenclk=not clk;counter=0;elseco
27、unter=counter+1;end if;end if;end process;clkout1) port map(clk,clk1);u2:fredevider generic map(n=4) port map(clk,clk2);u3:a_21mux port map(sel,clk1,clk2,clkout);end;U1U2U3285.3.85.3.8生成语句生成语句 (Generate Statement) 生成语句的主要功能是能够进行复制,简化有规则设计结构的逻辑描述。生成语句的主要功能是能够进行复制,简化有规则设计结构的逻辑描述。 生成语句的语句格式有如下两种形式:生成语句
28、的语句格式有如下两种形式:forfor语句形式语句形式 和和 IFIF语句形式语句形式标号:标号: ForFor 循环变量循环变量 ININ 取值范围取值范围 GenerateGenerate 说明语句说明语句 并行语句并行语句 End GenerateEnd Generate 标号标号 ; 对于对于forfor语句的结构,主要用来描述设计中的一些有规律的单元结构。语句的结构,主要用来描述设计中的一些有规律的单元结构。 生成参数(循环变量)是自动产生的,它是一个局部变量,根据取值范生成参数(循环变量)是自动产生的,它是一个局部变量,根据取值范围自动递增或递减。取值范围的语句格式,有两种形式:围
29、自动递增或递减。取值范围的语句格式,有两种形式: 表达式表达式 TO TO 表达式表达式 ; - ; - 递增方式,如递增方式,如 1 1 TO 5TO 5 表达式表达式 DOWNTO DOWNTO 表达式表达式 ; - ; - 递减方式,如递减方式,如 5 5 DOWNTO 1DOWNTO 1 其中的表达式必须是整数。其中的表达式必须是整数。 29 对于对于if if 语句的结构,主要用来描述设计中不规则的单元语句的结构,主要用来描述设计中不规则的单元结构,如某些边界条件的特殊性。该语句中,若条件为真,结构,如某些边界条件的特殊性。该语句中,若条件为真,则执行生成语句中的并行语句,若为假则不
30、执行该语句。则执行生成语句中的并行语句,若为假则不执行该语句。 标号:标号:IFIF 条件条件 GenerateGenerate 说明说明 并行语句并行语句 End GenerateEnd Generate 标号标号 ;30两种格式都由四部分组成:两种格式都由四部分组成:(1 1)生成方式:有)生成方式:有forfor和和ifif语句结构,规定并行语句的语句结构,规定并行语句的 复制方式复制方式(2 2)说明部分:对数据类型和数据对象等进行一些说明)说明部分:对数据类型和数据对象等进行一些说明(3 3)并行语句:是复制的基本单元)并行语句:是复制的基本单元(4 4)标号:标号是必须的)标号:标
31、号是必须的下面是使用生成语句产生的下面是使用生成语句产生的8 8个相同的电路模块的示例个相同的电路模块的示例31 COMPONENT comp PORT ( INPUT : IN STD_LOGIC ; OUTPUT : OUT STD_LOGIC ); END COMPONENT ; SIGNAL a : STD_LOGIC_VECTOR(0 TO 7); SIGNAL b : STD_LOGIC_VECTOR(0 TO 7); gen : FOR i IN aRANGE GENERATE - aRANGEaRANGE为数据区间类属性为数据区间类属性 u1: comp PORT MAP (I
32、NPUT=a(i),OUTPUT=b(i); 名称映射名称映射 END GENERATE gen; .C O M PI N P U TO U T P U TC O M PI N P U TO U T P U TC O M PI N P U TO U T P U Ta 0 b 0 a 1 b 1 a 7 b 7 . . .32LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Latch_1 IS PORT( D : IN STD_LOGIC; ENA : IN STD_LOGIC; Q : OUT STD_LOGIC );END ENTITY Lat
33、ch_1 ;ARCHITECTURE one OF Latch_1 IS SIGNAL sig_save : STD_LOGIC; BEGIN PROCESS (D, ENA) BEGIN IF ENA = 1 THEN sig_save = D ; END IF ; Q = sig_save ; END PROCESS ;END ARCHITECTURE one; 下面为使用元件例化语句和下面为使用元件例化语句和FOR_GENERATEFOR_GENERATE语句完成一个语句完成一个8 8位三位三态锁存器的设计的例子态锁存器的设计的例子1. 1. 设计底层的设计底层的1 1位锁存器:位锁存器
34、:332. 2. 设计顶层的设计顶层的8 8位锁存器位锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SN74373 IS PORT ( D : IN STD_LOGIC_VECTOR( 8 DOWNTO 1 ); OEN ,G : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(8 DOWNTO 1); END ENTITY SN74373; ARCHITECTURE one OF SN74373 IS COMPONENT Latch_1 PORT ( D, ENA : IN STD_LOGIC; Q : O
35、UT STD_LOGIC ); END COMPONENT; SIGNAL sig_mid : STD_LOGIC_VECTOR( 8 DOWNTO 1 ); BEGIN GeLatch : FOR i IN 1 TO 8 GENERATE Latchx : Latch_1 PORT MAP (D(i),G,sig_mid(i); -位置映射位置映射 END GENERATE; Q = sig_mid WHEN OEN = 0 ELSE ZZZZZZZZ; -当当OEN=1时,时,Q(8)-Q(1)输出状态呈高阻态输出状态呈高阻态END ARCHITECTURE one; 345.4 5.4
36、顺序语句(顺序语句(Sequential Statements) 顺序语句和并行语句是顺序语句和并行语句是VHDLVHDL中的两大基本描述语句系列。中的两大基本描述语句系列。顺序语句的特点:顺序语句的特点:n 语句的执行和书写顺序相同。语句的执行和书写顺序相同。n 顺序语句只能应用在进程和子程序中。顺序语句只能应用在进程和子程序中。VHDLVHDL中常用的几种顺序描述语句:中常用的几种顺序描述语句:l 信号赋值语句(信号赋值语句(signal assignment statements) =l 变量赋值语句(变量赋值语句(variable assignment statements) :=:=
37、l wait wait语句语句l if if 语句语句l case case 语句语句l looploop语句语句l nextnext语句语句l exitexit语句语句-综合器不支持综合器不支持l null null 语句语句l return return 语句语句-综合器不支持综合器不支持l 断言(断言(assertionassertion)语句)语句-仿真时用仿真时用355.4.2 if5.4.2 if语句语句(If Statements)ifif语句是一种条件语句,其基本结构有四种:语句是一种条件语句,其基本结构有四种:1.1.ifif 条件句条件句 thenthen 顺序语句;顺序语
38、句; end ifend if;2.2.ifif 条件句条件句 thenthen 顺序语句;顺序语句; elseelse 顺序语句;顺序语句; end ifend if; 4.4.ifif 条件句条件句 thenthen ifif 条件句条件句 thenthen end ifend if; end ifend if;3.3.ifif 条件句条件句 thenthen 顺序语句;顺序语句; elsifelsif 条件句条件句 thenthen 顺序语句;顺序语句; elseelse 顺序语句;顺序语句; end ifend if;361.1.ifif 条件句条件句 thenthen 顺序语句;顺序
39、语句; end ifend if;注意:没有注意:没有ELSE的的IF语句,属于不完备的语句,属于不完备的IF语句,语句,在综合时一般会生成一个时序电路。在综合时一般会生成一个时序电路。 library ieee;use ieee.std_logic_1164.all;entity dff1 is port ( d,clk:in std_logic; q:out std_logic);end dff1;architecture rtl of dff1 isbegin process(clk) begin if clk event and clk=1 then q=d; end if;end p
40、rocess;end rtl;例:例:D D触发器触发器372.2.ifif 条件句条件句 thenthen 顺序语句;顺序语句; elseelse 顺序语句;顺序语句; end ifend if; 注意:有注意:有ELSE的的IF语句,在综合时一般会生成一语句,在综合时一般会生成一个二选一的组合电路。个二选一的组合电路。 library ieee;use ieee.std_logic_1164.all;entity mux2 isport ( a,b,sel :in std_logic; c:out std_logic);end mux2;architecture rtl of mux2 i
41、sbegin process(a,b,sel)begin if sel=1 then c=a; else c=b; end if;end process;end rtl;例:例:2 2选选1 1数据选择器数据选择器383.3.ifif 条件句条件句 thenthen 顺序语句;顺序语句; elsifelsif 条件句条件句 thenthen 顺序语句;顺序语句; elseelse 顺序语句;顺序语句; end ifend if; 这种多选择控制的这种多选择控制的IFIF语句,它设置了多个条件,当满足所设的多语句,它设置了多个条件,当满足所设的多个条件之一时,就执行该条件后的顺序语句,并不再判断
42、其它条件,个条件之一时,就执行该条件后的顺序语句,并不再判断其它条件,直接结束直接结束ifif语句的执行。当所设置的条件都不满足时,程序执行语句的执行。当所设置的条件都不满足时,程序执行elseelse和和end ifend if之间的顺序语句。之间的顺序语句。 此语句用于有优先级的条件判断,因此各条件式中的条件可以重此语句用于有优先级的条件判断,因此各条件式中的条件可以重叠。如果所需判断的条件没有优先级的差别,且条件之间没有重叠的叠。如果所需判断的条件没有优先级的差别,且条件之间没有重叠的情况,建议使用情况,建议使用casecase语句。语句。 39例:四选一的数据选择器。例:四选一的数据选
43、择器。 library ieee;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_1164.all;entity mux4 isentity mux4 isport (input:in std_logic_vector(3 downto 0);port (input:in std_logic_vector(3 downto 0); sel:in std_logic_vector(1 downto 0); sel:in std_logic_vector(1 downto 0); y: out std_logic); y: o
44、ut std_logic);end mux4;end mux4;architecture rtl of mux4 isarchitecture rtl of mux4 isbeginbeginprocess(sel,input)process(sel,input)40beginbegin ifif sel=“00” sel=“00” thenthen y=input(0); y=input(0); elsifelsif sel=“01” sel=“01” thenthen y=input(1); y=input(1); elsifelsif sel=“10” sel=“10” thenthen
45、 y=input(2); y=input(2); elseelse y=input(3) y=input(3); end if;end if;end process;end process;end rtl;end rtl;41例:用例:用IFIF语句设计一个语句设计一个3838译码器。译码器。 LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decode3_8 ISENTITY decode3_8 IS PORT ( a,b,c: IN STD_LOGIC; POR
46、T ( a,b,c: IN STD_LOGIC; y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END decode3_8;END decode3_8;ARCHITECTURE one OF decode3_8 ISARCHITECTURE one OF decode3_8 ISSIGNAL comb: STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL comb: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINBEGIN comb=c & b & a;
47、 comb=c & b & a;42process(comb)process(comb)beginbegin ifif comb=“000” comb=“000” then then y=“11111110”y=“11111110”; elsifelsif comb=“001” comb=“001” then then y=“11111101” y=“11111101”; elsifelsif comb=“010” comb=“010” thenthen y=“11111011” y=“11111011”; elsif elsif comb=“011” comb=“011” thenthen
48、y=“11110111” y=“11110111”; elsifelsif comb=“100” comb=“100” thenthen y=“11101111” y=“11101111”; elsifelsif comb=“101” comb=“101” thenthen y=“11011111” y=“11011111”; elsifelsif comb=“110” comb=“110” then then y=“10111111” y=“10111111”; elsifelsif comb=“111” comb=“111” then then y=“01111111 y=“0111111
49、1” ; elseelse y=“11111111” y=“11111111”; end if;end if;end process;end process;end one;end one;43LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY coder IS PORT ( din : IN STD_LOGIC_VECTOR(0 TO 7); output : OUT STD_LOGIC_VECTOR(2 TO 0) );END coder;ARCHITECTURE behav OF coder IS BEGIN PROCESS (din) BEG
50、IN IF (din(7)=0) THEN output = 000 ; ELSIF (din(6)=0) THEN output = 001 ; ELSIF (din(5)=0) THEN output = 010 ; ELSIF (din(4)=0) THEN output = 011 ; ELSIF (din(3)=0) THEN output = 100 ; ELSIF (din(2)=0) THEN output = 101 ; ELSIF (din(1)=0) THEN output = 110 ; ELSE output = 111 ; END IF ; END PROCESS
51、; END behav;例:优先编码器描述例:优先编码器描述444.4.ifif 条件句条件句 thenthen ifif 条件句条件句 thenthen end ifend if; end ifend if;IfIf语句可以嵌套,但层数不宜过多。语句可以嵌套,但层数不宜过多。45library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter10 isport(en,reset,clk:in std_logic;q:buffer std_logic_vector(3 downto
52、0);co:out std_logic);end counter10;architecture behav of counter10 isbeginprocess(clk,reset,en)beginif reset=1 thenq=0000;elsif clkevent and clk=1 thenif en=1 thenif q1001 then q=q+1;else q=0000;end if;end if;end if;end process;co= 顺序语句;顺序语句; When When 选择值选择值 = 顺序语句;顺序语句; . . When Others= When Other
53、s= 顺序语句;顺序语句; END CASEEND CASE ;选择值可以有四种不同的表达方式:选择值可以有四种不同的表达方式: 单个普通数值,如单个普通数值,如6 6。 数值选择范围,如数值选择范围,如(2 TO 4)(2 TO 4),表示取值为,表示取值为2 2、3 3或或4 4。 并列数值,如并列数值,如3 3 5 5,表示取值为,表示取值为3 3或者或者5 5。 WHEN OTHERSWHEN OTHERS, CASE CASE语句也只能在进程中使用,当执行到语句也只能在进程中使用,当执行到CASECASE语句时,首先计语句时,首先计算算CASECASE和和ISIS之间的表达式的值,然
54、后根据条件语句中与之相对应的之间的表达式的值,然后根据条件语句中与之相对应的选择值来执行相应的顺序语句,最后结束选择值来执行相应的顺序语句,最后结束CASECASE语句。语句。47使用使用CASE CASE 语句需要注意:语句需要注意:(1 1)条件句的取值必须在表达式的取值范围之内;)条件句的取值必须在表达式的取值范围之内;(2 2)除非所有条件句中的选择值能完整覆盖)除非所有条件句中的选择值能完整覆盖CASECASE语句中的所有语句中的所有表达式的取值表达式的取值, ,否则最后一个条件句中的选择值必须为否则最后一个条件句中的选择值必须为OTHERSOTHERS;(3 3)CASECASE语句的每一条件句的取值只能出现一次,不能有相同语句的每一条件句的取值只能出现一次,不能有相同选择值的条件句的出现;选择值的条件句的出现;(4 4)CASECASE语句执行中必须选中且只能选择一个条件句,这表明语句执行中必须选中且只能选择一个条件句,这表明CASECASE语句至少要包含一个条件句。语句至少要包含一个条件句。48例:例:3-83-8译码器译码器 library ieee; use ieee.std_logic_1164.all; entity decoder is port(a,b,c,G1,G2A,G2B : in std_logic; y: out
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游戏行业绿色发展与环保技术考核试卷
- 人性化指导2025年证券从业资格证考试试题及答案
- 理解注册会计师考试的重要性与试题及答案
- 2025年【工具钳工(高级)】模拟考试题及答案
- 2024年项目管理考试提升指南试题及答案
- 2023年中国葛洲坝三峡建设工程有限公司成熟人才招聘若干人笔试参考题库附带答案详解
- 污水处理中的低温脱氮技术与应用考核试卷
- 橡胶管材在工业通风系统的消声性能考核试卷
- 行政管理研究的现状与展望试题及答案
- 管道工程行业绿色技术创新考核试卷
- 课件:《科学社会主义概论(第二版)》第一章
- 国际关系理论知到智慧树章节测试课后答案2024年秋外交学院
- 高效机房目前几种全局节能优化控制算法技术路线的分享和探讨
- 屋顶光伏支架安装施工方案
- 2024版专业工程资质居间转让合同范文版B版
- 新能源购售电合同模板
- 上海市2024年中考英语试题及答案
- 2024年一级建造师《建设工程项目管理》真题及答案
- 颈椎病课件完整版本
- 部编版语文小学二年级下册第一单元集体备课(教材解读)
- 孝歌歌词大全100首
评论
0/150
提交评论