EDA技术与VHDL-第10章 VHDL结构_第1页
EDA技术与VHDL-第10章 VHDL结构_第2页
EDA技术与VHDL-第10章 VHDL结构_第3页
EDA技术与VHDL-第10章 VHDL结构_第4页
EDA技术与VHDL-第10章 VHDL结构_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

1、第第1010章章8.1 vhdl8.1 vhdl实体实体 vhdl实体作为一个设计实体(独立的电路功能结构)实体作为一个设计实体(独立的电路功能结构)的组成部分,其功能是对这个设计实体与外部电路进行接的组成部分,其功能是对这个设计实体与外部电路进行接口描述。实体是设计实体的表层设计单元,实体说明部分口描述。实体是设计实体的表层设计单元,实体说明部分规定了设计单元的输入输出接口信号或引脚,它是设计实规定了设计单元的输入输出接口信号或引脚,它是设计实体对外的一个通信界面。实体的具体表述和用法已在前面体对外的一个通信界面。实体的具体表述和用法已在前面有过详细例解,这里不再重复。有过详细例解,这里不再

2、重复。 x康芯科技康芯科技8.2 vhdl8.2 vhdl结构体结构体 1. 结构体的一般语言格式结构体的一般语言格式 architecture 结构体名结构体名 of 实体名实体名 is 说明语句说明语句begin 功能描述语句功能描述语句end architecture 结构体名结构体名; 8.2 vhdl8.2 vhdl结构体结构体 2. 结构体说明语句结构体说明语句 3. 功能描述语句结构功能描述语句结构 进程语句进程语句 信号赋值语句信号赋值语句 子程序调用语句子程序调用语句 元件例化语句元件例化语句 8.3 vhdl8.3 vhdl子程序子程序 8.3.1 vhdl函数函数 fun

3、ction 函数名函数名(参数表参数表) return 数据类型数据类型 -函数首函数首function 函数名函数名(参数表参数表)return 数据类型数据类型 is - 函数体函数体 说明部分说明部分 begin 顺序语句顺序语句 ; end function 函数名函数名; 【例【例8-1】library ieee;use ieee.std_logic_1164.all;package packexp is -定义程序包定义程序包 function max( a,b : in std_logic_vector) -定义函数首定义函数首 return std_logic_vector ;

4、 function func1 ( a,b,c : real ) -定义函数首定义函数首 return real ; function * ( a ,b : integer ) -定义函数首定义函数首 return integer ; function as2 (signal in1 ,in2 : real ) -定义函数首定义函数首 return real ; end ;package body packexp is function max( a,b : in std_logic_vector) -定义函数体定义函数体 return std_logic_vector is begin if

5、 a b then return a; else return b; end if; end function max; -结束结束function语句语句 end; -结束结束package body语句语句 library ieee; - 函数应用实例函数应用实例 use ieee.std_logic_1164.all; use work.packexp.all ; entity axamp is port(dat1,dat2 : in std_logic_vector(3 downto 0); dat3,dat4 : in std_logic_vector(3 downto 0); ou

6、t1,out2 : out std_logic_vector(3 downto 0) ); end; architecture bhv of axamp is begin out1 = max(dat1,dat2); -用在赋值语句中的并行函数调用语句用在赋值语句中的并行函数调用语句 process(dat3,dat4) begin out2 b then return a; else return b; end if; end function max; -结束结束function语句语句 function max( a,b :in integer) -定义函数体定义函数体 return i

7、nteger is begin if a b then return a; else return b; end if; end function max; -结束结束function语句语句 接下页接下页function max( a,b :in bit_vector) -定义函数体定义函数体 return bit_vector is begin if a b then return a; else return b; end if; end function max; -结束结束function语句语句 end; -结束结束package body语句语句. . - 以下是调用重载函数以下

8、是调用重载函数max的程序:的程序: library ieee ; use ieee.std_logic_1164.all ; use work.packexp.all; entity axamp is port(a1,b1 : in std_logic_vector(3 downto 0); a2,b2 : in bit_vector(4 downto 0); a3,b3 : in integer range 0 to 15; c1 : out std_logic_vector(3 downto 0); c2 : out bit_vector(4 downto 0); c3 : out in

9、teger range 0 to 15); end; architecture bhv of axamp is begin c1 = max(a1,b1); -对函数对函数max( a,b :in std_logic_vector)的调用的调用 c2 = max(a2,b2); -对函数对函数max( a,b :in bit_vector) 的调用的调用 c3 = max(a3,b3); -对函数对函数max( a,b :in integer) 的调用的调用 end; 【例【例8-4】 library ieee ; - 程序包首程序包首 use ieee.std_logic_1164.all

10、; use ieee.std_logic_arith.all ; package std_logic_unsigned is function + (l : std_logic_vector ; r : integer) return std_logic_vector ; function + (l : integer; r : std_logic_vector) return std_logic_vector ; function + (l : std_logic_vector ; r : std_logic ) return std_logic_vector ; function shr

11、(arg : std_logic_vector ; count : std_logic_vector ) return std_logic_vector ; . end std_logic_unsigned ; library ieee ; - 程序包体程序包体 use ieee.std_logic_1164.all ; use ieee.std_logic_arith.all ; package body std_logic_unsigned is function maximum (l, r : integer) return integer is begin if l r then re

12、turn l; else return r; end if; end; function + (l : std_logic_vector ; r : integer) return std_logic_vector is variable result : std_logic_vector (lrange) ; begin result := unsigned(l) + r ; return std_logic_vector(result) ; end ; . end std_logic_unsigned ;8.3 vhdl8.3 vhdl子程序子程序 8.3.3 vhdl转换函数转换函数 函

13、数名函数名功能功能程序包程序包: std_logic_1164to_stdlogicvector(a)由由bit_vector类型的类型的a转换为转换为std_logic_vectorto_bitvector(a)由由std_logic _vector转换为转换为bit_vectorto_stdlogic (a)由由bit转换成转换成std_logicto_bit(a)由由std_logic转换成转换成bit程序包程序包: std_logic_arithconv_std_logic_vector(a, 位长位长)将整数将整数integer转换成转换成std_logic_vector类型,类型,

14、a是整数是整数conv_integer(a)将将std_logic_vector转换成整数转换成整数integer程序包程序包: std_logic_unsignedconv_integer(a)由由std_logic_vector转换成转换成integer表表8-1 ieee库类型转换函数表库类型转换函数表 8.3 vhdl8.3 vhdl子程序子程序 8.3.3 vhdl转换函数转换函数 【例【例8-5】library ieee;use ieee. std_logic_1164.all;entity exg is port (a,b : in bit_vector(3 downto 0);

15、 q : out std_logic_vector(3 downto 0);end ;architecture rtl of exg is begin q= to_stdlogicvector(a and b);-将位矢量数据类型转换成标准逻辑位矢量数据将位矢量数据类型转换成标准逻辑位矢量数据end; 8.3 vhdl8.3 vhdl子程序子程序 8.3.3 vhdl转换函数转换函数 【例【例8-6】library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;-注意使用了此程序包注意使用了此程序包entity a

16、xamp is port(a,b,c : in integer range 0 to 15 ; q : out std_logic_vector(3 downto 0) ); end;architecture bhv of axamp is begin q 1 then rut(i) := 1; din := din-rig; else rut (i):= 0; end if; rig := rig / 2; end loop; return rut; end nat_to_bit8;end n_pack; library ieee; - 用户定义转换函数应用实例用户定义转换函数应用实例use

17、 ieee.std_logic_1164.all;use work.n_pack.all ;entity axamp is port(dat : in nat; -注意数据类型的定义注意数据类型的定义 ou : out bit8); -注意数据类型的定义注意数据类型的定义 end;architecture bhv of axamp is begin ou value: 0101 ; when 0101 = value: 0000 ; when others = value: 1111 ; end case ;end procedure prg1 ; 8.3 vhdl8.3 vhdl子程序子程序

18、 8.3.5 vhdl过程过程 【例【例8-9】 procedure comp ( a, r : in real; m : in integer ; v1, v2: out real) is variable cnt : integer ; begin v1 := 1.6 * a ; - 赋初始值赋初始值 v2 := 1.0 ; - 赋初始值赋初始值 q1 : for cnt in 1 to m loop v2 := v2 * v1 ; exit q1 when v2 v1; - 当当v2 v1,跳出循环,跳出循环loop end loop q1 assert (v2 v1 ) report

19、out of range - 输出错误报告输出错误报告 severity error ; end procedure comp ; 【例【例8-10】library ieee; use ieee.std_logic_1164.all;package axamp is -过程首定义过程首定义 procedure nand4a (signal a,b,c,d : in std_logic ; signal y : out std_logic ); end axamp;package body axamp is -过程体定义过程体定义 procedure nand4a (signal a,b,c,d

20、 : in std_logic ; signal y : out std_logic ) is begin y 实参表达式实参表达式 ,形参名形参名= 实参表达式实参表达式) ; (1) 将将in和和inout模式的实参值赋给欲调用的过程中与它们对应的形参;模式的实参值赋给欲调用的过程中与它们对应的形参;(2) 执行这个过程;执行这个过程; (3) 将过程中将过程中in和和inout模式的形参值返回给对应的实参。模式的形参值返回给对应的实参。 8.3 vhdl8.3 vhdl子程序子程序 8.3.7 子程序调用语句子程序调用语句 1. 过程调用过程调用 【例【例8-12】package dat

21、a_types is - 定义程序包定义程序包subtype data_element is integer range 0 to 3 ;- 定义数据类型定义数据类型type data_array is array (1 to 3) of data_element;end data_types;use work.data_types.all; -打开以上建立在当前工作库的程序包打开以上建立在当前工作库的程序包data_typesentity sort is port ( in_array : in data_array ; out_array : out data_array);end sor

22、t; architecture exmp of sort is begin process (in_array) - 进程开始,设进程开始,设data_types为敏感信号为敏感信号 procedure swap(data : inout data_array; - swap的形参名为的形参名为data、low、high low, high : in integer ) is variable temp : data_element ; begin - 开始描述本过程的逻辑功能开始描述本过程的逻辑功能 if (data(low) data(high) then - 检测数据检测数据 temp

23、:= data(low) ; data(low) := data(high); data(high) := temp ; end if ; end swap ; - 过程过程swap定义结束定义结束 variable my_array : data_array ; - 在本进程中定义变量在本进程中定义变量my_array begin - 进程开始进程开始 my_array := in_array ; - 将输入值读入变量将输入值读入变量 swap(my_array, 1, 2); - my_array、1、2是对应于是对应于data、low、high的实参的实参 swap(my_array,

24、2, 3); - 位置关联法调用,位置关联法调用, 第第2、第、第3元素交换元素交换 swap(my_array, 1, 2); - 位置关联法调用,位置关联法调用, 第第1、第、第2元素再次交换元素再次交换 out_array y then tmp := x; x := y; y := tmp; end if;end sort2;begin process (a, b, c, d) variable va, vb, vc, vd : bit_vector(0 to top);begin va := a; vb := b; vc := c; vd := d; sort2(va, vc); so

25、rt2(vb, vd); sort2(va, vb); sort2(vc, vd); sort2(vb, vc); ra = va; rb = vb; rc = vc; rd = vd; end process;end muxes; 8.3 vhdl8.3 vhdl子程序子程序 8.3.7 子程序调用语句子程序调用语句 1. 过程调用过程调用 2函数调用函数调用 函数调用与过程调用是十分相似的,不同之处是,调用函数调用与过程调用是十分相似的,不同之处是,调用函数将返还一个指定数据类型的值,函数的参量只能是输入函数将返还一个指定数据类型的值,函数的参量只能是输入值。值。 8.3 vhdl8.3

26、vhdl子程序子程序 8.3.8 并行过程调用语句并行过程调用语句 过程名过程名(关联参量名关联参量名); 【例【例8-14】. procedure adder(signal a, b :in std_logic ; -过程名为过程名为adder signal sum : out std_logic ); . adder(a1,b1,sum1) ; - 并行过程调用并行过程调用 . - 在此,在此,a1、b1、sum1即为分别对应于即为分别对应于a、b、sum的关联参量名的关联参量名 process( c1,c2) ; - 进程语句执行进程语句执行 begin adder(c1,c2,s1)

27、; - 顺序过程调用,在此顺序过程调用,在此c1、c2、s1即为分别对即为分别对end process ; - 应于应于a、b、sum的关联参量名的关联参量名 8.3 vhdl8.3 vhdl子程序子程序 8.3.8 并行过程调用语句并行过程调用语句 【例【例8-15】 procedure check(signal a : in std_logic_vector; - 在调用时在调用时 signal error : out boolean ) is - 再定位宽再定位宽 variable found_one : boolean := false ; - 设初始值设初始值 begin for i

28、 in arange loop - 对位矢量对位矢量a的所有的位元素进行循环检测的所有的位元素进行循环检测 if a(i) = 1 then - 发现发现a中有中有 1 if found_one then - 若若found_one为为true,则表明发现了一个以上的,则表明发现了一个以上的1 error = true; - 发现了一个以上的发现了一个以上的1,令,令found_one为为true return; - 结束过程结束过程 end if; found_one := true; - 在在a中已发现了一个中已发现了一个1 end if; end loop; - 再测再测a中的其他位中的

29、其他位 error = not found_one; - 如果没有任何如果没有任何1 被发现,被发现,error 将被置将被置true end procedure check; 8.3 vhdl8.3 vhdl子程序子程序 8.3.8 并行过程调用语句并行过程调用语句 . chblk:block signal s1: std_logic_vector (0 to 0); - 过程调用前设定位矢尺寸过程调用前设定位矢尺寸 signal s2: std_logic_vector (0 to 1); signal s3: std_logic_vector (0 to 2); signal s4: s

30、td_logic_vector (0 to 3); signal e1, e2, e3, e4: boolean; begin check (s1, e1); - 并行过程调用,关联参数名为并行过程调用,关联参数名为s1、e1 check (s2, e2); - 并行过程调用,关联参数名为并行过程调用,关联参数名为s2、e2 check (s3, e3); - 并行过程调用,关联参数名为并行过程调用,关联参数名为s3、e3 check (s4, e4); - 并行过程调用,关联参数名为并行过程调用,关联参数名为s4、e4 end block; . 8.4 vhdl8.4 vhdl库库 8.4.

31、1 库的种类库的种类 1. ieee库库 2. std库库 3. work库库 4. vital库库 8.4 vhdl8.4 vhdl库库 8.4.2 库的用法库的用法 use 库名库名.程序包名程序包名.项目名项目名 ; use 库名库名.程序包名程序包名.all ; library ieee ;use ieee.std_logic_1164.std_ulogic ;use ieee.std_logic_1164.rising_edge ; use work.std_logic_1164.all; 8.5 vhdl8.5 vhdl程序包程序包 定义程序包的一般语句结构如下:定义程序包的一般语

32、句结构如下: package 程序包名程序包名 is - 程序包首程序包首 程序包首说明部分程序包首说明部分 end 程序包名程序包名; package body 程序包名程序包名 is - 程序包体程序包体 程序包体说明部分以及包体内程序包体说明部分以及包体内 end 程序包名程序包名;8.5 vhdl8.5 vhdl程序包程序包 【例【例8-16】 package pacl is - 程序包首开始程序包首开始 type byte is range 0 to 255 ; - 定义数据类型定义数据类型byte subtype nibble is byte range 0 to 15 ; - 定

33、义子类型定义子类型nibble constant byte_ff : byte := 255 ; - 定义常数定义常数byte_ff signal addend : nibble ; - 定义信号定义信号addend component byte_adder - 定义元件定义元件 port( a, b : in byte ; c : out byte ; overflow : out boolean ) ; end component ; function my_function (a : in byte) return byte ; - 定义函数定义函数 end pacl ; - 程序包首结

34、束程序包首结束 【例【例8-17】 package seven is subtype segments is bit_vector(0 to 6) ; type bcd is range 0 to 9 ; end seven ; use work.seven.all ; - work库默认是打开的,库默认是打开的, entity decoder is port (input: bcd; drive : out segments) ; end decoder ; architecture simple of decoder is begin with input select drive = b

35、1111110 when 0 , b0110000 when 1 , b1101101 when 2 , b1111001 when 3 , b0110011 when 4 , b1011011 when 5 , b1011111 when 6 , b1110000 when 7 , b1111111 when 8 , b1111011 when 9 , b0000000 when others ; end simple ; x康芯科技康芯科技8.6 vhdl8.6 vhdl配置配置 配置语句的一般格式如下:配置语句的一般格式如下: configuration 配置名配置名 of 实体名实体名

36、 is 配置说明配置说明 end 配置名配置名; 8.7 vhdl8.7 vhdl文字规则文字规则 8.7.1 数字数字 整数:整数: 5, 678, 0, 156e2(=15600), 45_234_287 (=45234287) 实数:实数: 1.335, 88_670_551.453_909(=88670551.453909),1.0,44.99e-2(=0.4499) 以数制基数表示的文字:以数制基数表示的文字: signal d1,d2,d3,d4,d5, : integer range 0 to 255;d1 = 10#170# ; - (十进制表示,等于十进制表示,等于 170)

37、d2 = 16#fe# ; - (十六进制表示,等于十六进制表示,等于 254)d3 = 2#1111_1110#; - (二进制表示,等于二进制表示,等于 254)d4 = 8#376# ; - (八进制表示,等于八进制表示,等于 254)d5 = 16#e#e1 ; - (十六进制表示,等于十六进制表示,等于2#1110000#,等于,等于224) 物理量文字物理量文字(vhdl综合器不接受此类文字综合器不接受此类文字) 60s (60秒秒), 100m (100米米), k (千欧姆千欧姆), 177a (177安培安培) 8.7 vhdl8.7 vhdl文字规则文字规则 8.7.2 字

38、符串字符串 (1) 文字字符串文字字符串 error , both s and q equal to 1 , x , bb$cc (2) (2) 数位字符串数位字符串 b:二进制基数符号,表示二进制位:二进制基数符号,表示二进制位0或或1,在字符串中的每位表示一个,在字符串中的每位表示一个bit。 o:八进制基数符号,在字符串中的每一个数代表一个八进制数,即代表一个:八进制基数符号,在字符串中的每一个数代表一个八进制数,即代表一个3位位(bit)的二进制数。的二进制数。 x:十六进制基数符号:十六进制基数符号(0f),代表一个十六进制数,即一个,代表一个十六进制数,即一个4位的二进制数。位的二

39、进制数。 data1 = b1_1101_1110 - 二进制数数组,位矢数组长度是二进制数数组,位矢数组长度是9data2 = o15 - 八进制数数组,位矢数组长度是八进制数数组,位矢数组长度是6data3 = xad0 - 十六进制数数组,位矢数组长度是十六进制数数组,位矢数组长度是12data4 = b101_010_101_010 - 二进制数数组,位矢数组长度是二进制数数组,位矢数组长度是12data5 = 101_010_101_010 -表达错误,缺表达错误,缺b。data6 = 0ad0 -表达错误,缺表达错误,缺x。 8.7 vhdl8.7 vhdl文字规则文字规则 8.7

40、.3 标识符标识符 decoder_1 , fft , sig_n , not_ack , state0 , idle _decoder_1- 起始为非英文字母起始为非英文字母2fft- 起始为数字起始为数字sig_#n- 符号符号“#”不能成为标识符的构成不能成为标识符的构成not-ack- 符号符号“-” 不能成为标识符的构成不能成为标识符的构成ryy_rst_- 标识符的最后不能是下划线标识符的最后不能是下划线“_”data_ _bus - 标识符中不能有双下划线标识符中不能有双下划线return - 关键词关键词 8.7 vhdl8.7 vhdl文字规则文字规则 8.7.4 下标名下标

41、名 标识符标识符(表达式表达式) signal a,b : bit_vector (0 to 3) ;signal m : integer range 0 to 3 ;signal y,z : bit ;y = a(m) ; - 不可计算型下标表示不可计算型下标表示z = b(3) ; - z = b(3) ; - 可计算型下标表示可计算型下标表示 8.8 vhdl8.8 vhdl数据类型数据类型 标量型标量型(scalar type): 包括实数类型、整数类型、枚举类型、时间类型。包括实数类型、整数类型、枚举类型、时间类型。复合类复合类型型(composite type)(composite

42、 type): 可以由小的数据类型复合而成,如可由标量型复合而成。复合可以由小的数据类型复合而成,如可由标量型复合而成。复合类型主要有数组型类型主要有数组型(array)(array)和记录型和记录型(record)(record)。 存取类型存取类型(access type)(access type): 为给定的数据类型的数据对象提供存取方式。为给定的数据类型的数据对象提供存取方式。 文件类型文件类型(files type)(files type): 用于提供多值存取类型。用于提供多值存取类型。 8.8 vhdl8.8 vhdl数据类型数据类型 8.8.1 预定义数据类型预定义数据类型 1.

43、 布尔布尔(boolean)类型类型 type boolean is (false,true); 2. 位位(bit)数据类型数据类型 type bit is (0,1); 3. 位矢量位矢量(bit_vector)类型类型 type bit_vector is array (natural range ) of bit ; 8.8 vhdl8.8 vhdl数据类型数据类型 8.8.1 预定义数据类型预定义数据类型 4. 字符字符(character)类型类型 5. 整数整数(integer)类型类型 6. 实数实数(real)类型类型 1.0十进制浮点数十进制浮点数 0.0十进制浮点数十进制

44、浮点数 65971.333333十进制浮点数十进制浮点数 65_971.333_3333与上一行等价与上一行等价 8#43.6#e+4八进制浮点数八进制浮点数 43.6e4十进制浮点数十进制浮点数8.8 vhdl8.8 vhdl数据类型数据类型 7. 字符串字符串(string)类型类型 8. 时间时间(time)类型类型 variable string_var : string (1 to 7 ) ;string_var := a b c d ; type time is range 2147483647 to 2147483647 units fs ; - 飞秒,飞秒,vhdl中的最小时间

45、单位中的最小时间单位 ps = 1000 fs ; - 皮秒皮秒 ns = 1000 ps ; - 纳秒纳秒 us = 1000 ns ; - 微秒微秒 ms = 1000 us ; - 毫秒毫秒 sec = 1000 ms ; - 秒秒 min = 60 sec ; - 分分 hr = 60 min ; - 时时end units ; 8.8 vhdl8.8 vhdl数据类型数据类型 8.8.1 预定义数据类型预定义数据类型 9. 文件文件(files)类型类型 proceduer readline (f: in text; l: out line);proceduer writeline

46、(f: out text; l: in line);proceduer read ( l: inout line; value: out std_logic;good: out boolean);proceduer read (l: inout line; value: out std_logic);proceduer read ( l: inout line; value: out std_logic_ vector;good: out boolean);proceduer read (l: inout line; value: out std_logic_ vector;proceduer

47、 write ( l: inout line; value: in std_logic;justiaied: in side :=right;field; in width :=0);proceduer write (l: inout line; value: in std_logic _ vector,justiaied: in side :=right;field; in width :=0); 8.8 vhdl8.8 vhdl数据类型数据类型 8.8.2 ieee预定义标准逻辑位与矢量预定义标准逻辑位与矢量 1. 标准逻辑位标准逻辑位std_logic数据类型数据类型 2. 标准逻辑矢量

48、标准逻辑矢量(std_logic_vector)数据类型数据类型 std_logic_vector类型定义如下:类型定义如下:type std_logic_vector is array ( natural range ) of std_logic ; 8.8 vhdl8.8 vhdl数据类型数据类型 8.8.3 其他预定义标准数据类型其他预定义标准数据类型 无符号型无符号型(unsigned)有符号型有符号型(signed)小整型小整型(small_int) library ieee ;use ieee.std_loigc_arith.all ; 8.8 vhdl8.8 vhdl数据类型数据

49、类型 8.8.3 其他预定义标准数据类型其他预定义标准数据类型 1. 无符号数据类型无符号数据类型(unsigned type) unsigned(1000) variable var : unsigned(0 to 10) ;signal sig : unsigned(5 to 0) ; 2. 有符号数据类型有符号数据类型(signed type) signed(0101) 代表代表 +5,5signed(1011) 代表代表 5 variable var :signed(0 to 10); 8.8 vhdl8.8 vhdl数据类型数据类型 8.8.4 vhdl数组类型数组类型 type 数

50、组名数组名is array(数组范围数组范围)of数据类型数据类型 ; type stb is array (7 downto 0) of std_logic ; type x is (low,high) ;type data_bus is array (0 to 7,x) of bit ; type 数组名数组名is array (数组下标名数组下标名range )of 数据类型数据类型 ; 8.8 vhdl8.8 vhdl数据类型数据类型 8.8.4 vhdl数组类型数组类型 【例【例8-18】 library ieee; use ieee.std_logic_1164.all; use

51、ieee.std_logic_unsigned.all; entity amp is port ( a1,a2 : in bit_vector(3 downto 0); c1,c2,c3 : in std_logic_vector (3 downto 0); b1,b2,b3 : integer range 0 to 15; d1,d2,d3,d4 : out std_logic_vector(3 downto 0) ); end amp; d1 = to_stdlogicvector(a1 and a2); -(1) d2 = conv_std_logic_vector(b1,4) when

52、 conv_integer(b2)=9 else conv_std_logic_vector(b3,4); -(2) d3 = c1 when conv_integer(c2)= 8 else c3; -(3) d4 = c1 when c2 = 8 else c3; -(4) 8.8 vhdl8.8 vhdl数据类型数据类型 8.8.4 vhdl数组类型数组类型 【例【例8-19】 library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decoder3to8 is port ( inp

53、ut: in std_logic_vector (2 downto 0); output: out std_logic_vector (7 downto 0);end decoder3to8;architecture behave of decoder3to8 is begin process (input) begin output 0); output(conv_integer(input) result(i) := 0; when 1|h = result(i) := 1; when others = result(i) := xmap; end case ; end loop ; re

54、turn result ;end ;8.9 vhdl8.9 vhdl操作符操作符 8.9.1 逻辑操作符逻辑操作符(logical operator) 逻辑操作符逻辑操作符(logical operator)关系操作符关系操作符(relational operator)算术操作符算术操作符(arithmetic operator)符号操作符符号操作符(sign operator)重载操作符重载操作符(overloading operator) a and b and c and d (a or b) xor c 类类 型型操作符操作符功功 能能操作数数据类型操作数数据类型算术操作符算术操作符

55、+ +加加 整数整数 减减 整数整数 & &并置并置 一维数组一维数组 * *乘乘 整数和实数整数和实数( (包括浮点数包括浮点数) ) / /除除 整数和实数整数和实数( (包括浮点数包括浮点数) )mod取模取模 整数整数 rem取余取余 整数整数 sll逻辑左移逻辑左移 bit或布尔型一维数组或布尔型一维数组 srl逻辑右移逻辑右移 bit或布尔型一维数组或布尔型一维数组 sla算术左移算术左移 bit或布尔型一维数组或布尔型一维数组 sra算术右移算术右移 bit或布尔型一维数组或布尔型一维数组 rol逻辑循环左移逻辑循环左移 bit或布尔型一维数组或布尔型一维数组 r

56、or逻辑循环右移逻辑循环右移 bit或布尔型一维数组或布尔型一维数组 *乘方乘方 整数整数 abs取绝对值取绝对值 整数整数表表8-2 vhdl操作符列表操作符列表 表表8-2 vhdl操作符列表操作符列表 类类 型型操作符操作符功功 能能操作数数据类型操作数数据类型关系操作符关系操作符 = =等于等于任何数据类型任何数据类型 /= /=不等于不等于任何数据类型任何数据类型 大于大于枚举与整数类型,及对应的一维数组枚举与整数类型,及对应的一维数组 = = =大于等于大于等于枚举与整数类型,及对应的一维数组枚举与整数类型,及对应的一维数组逻辑操作符逻辑操作符 and与与bit,boolean,s

57、td_logic or或或bit,boolean,std_logic nand与非与非bit,boolean,std_logic nor或非或非bit,boolean,std_logic xor异或异或bit,boolean,std_logic xnor异或非异或非bit,boolean,std_logic not非非bit,boolean,std_logic符号操作符符号操作符 +正正 整数整数 负负 整数整数8.9 vhdl8.9 vhdl操作符操作符 8.9.1 逻辑操作符逻辑操作符(logical operator) 运算符运算符优先级优先级not,abs,* 最高优先级最高优先级*

58、,/ ,mod, rem+(正号正号), (负号负号) + , , & sll, sla, srl, sra, rol, ror =, /=, , , = and, or, nand, nor, xor, xnor最低优先级最低优先级表表8-3 vhdl操作符优先级操作符优先级 8.9 vhdl8.9 vhdl操作符操作符 8.9.1 逻辑操作符逻辑操作符(logical operator) 【例【例8-21】 signal a ,b,c : std_logic_vector (3 downto 0) ; signal d,e,f,g : std_logic_vector (1 dow

59、nto 0) ; signal h,i,j,k : std_logic ; signal l,m,n,o,p : boolean ; . a=b and c; -b、c 相与后向相与后向a赋值,赋值,a、b、c的数据类型同属的数据类型同属4位长的位矢量位长的位矢量 d=e or f or g ; - 两个操作符两个操作符or相同,不需括号相同,不需括号 h=(i nand j)nand k ; - nand不属上述三种算符中的一种,必须加括号不属上述三种算符中的一种,必须加括号 l=(m xor n)and(o xor p); - 操作符不同,必须加括号操作符不同,必须加括号 h=i and

60、j and k ; - 两个操作符都是两个操作符都是and,不必加括号,不必加括号 h=i and j or k ; - 两个操作符不同,未加括号,表达错误两个操作符不同,未加括号,表达错误 a=b and e ; - 操作数操作数b 与与 e的位矢长度不一致,表达错误的位矢长度不一致,表达错误 h” (大于大于)“=” (大于等于大于等于)“ 011; 101 110; 8.9 vhdl8.9 vhdl操作符操作符 8.9.2 关系操作符关系操作符(relational operator) 【例【例8-22】 entity relational_ops_1 is port ( a,b : in bitvector

温馨提示

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

最新文档

评论

0/150

提交评论