预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共18页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第11讲VHDL的运算符23、关系运算符: 操作符功能操作数类型 =等于任何数据类型 /=不等于任何数据类型 <小于integer、real、bit、std_logic等及其一维向量 <=小于等于integer、real、bit、std_logic等及其一维向量 >大于integer、real、bit、std_logic等及其一维向量 >=大于等于integer、real、bit、std_logic等及其一维向量 注意: (1)关系运算符运算的最后结果总是布尔类型 (2)关系运算符两边的数据类型必须相同,但是位的长度不一定相同。 (3)对位矢量数据进行比较时,比较从最左边的位开始,自左至右进行比较的。在位长不同的情况下,只能按自左至右的比较结果作为关系运算的结果。 上例a的值位10,而b的值位7,a应该比b大。但是,由于位矢量是从左至右按位比较的,当比较到次高位时,a的次高位为“0”而b的次高位为“1”,故比较结果b比a大。这样的比较结果显然时不符合实际情况的。为了能使位矢量进行关系运算,在包集合“STD_LOGIC_UNSIGNED”中对“STD_LOGIC_VECTOR”关系运算重新作了定义,使其可以正确的进行关系运算。注意在使用时必须首先说明调用该包集合。当然,此时位矢量还可以和整数进行关系运算。 在关系运算符中小于等于符“<=”和代入符“<=”时相同的,在读VHDL语言的语句时,应按照上下文关系来判断此符号到底时关系符还是代入符。例2:比较下面3组二进制数的大小: “1011”和“101011”;“1”和“011”;“101”和“110” 下面是VHDL关系运算的结果: “1011”>“101011” “1”>“011” “101”<“110” 为了能使其正确地进行关系运算,在包集合“std_logic_unsigned”和“std_logic_signed”中对关系运算符重新做了定义,使用时必须要调用这些程序包。【例3】位矢量比较 ENTITYrel_1IS PORT(a:INBIT_VECTOR(0TO2); b:INbit_vector(0to1); m:OUTBOOLEAN); ENDrel_1; ARCHITECTUREexampleOFrel_1IS BEGIN m<=(a=b); ENDexample;【例4】无符号数比较 libraryieee; useieee.std_logic_arith.all; entityueis port(a,b:inunsigned(1downto0); m:outboolean); endue; architectureexofueis begin m<=(a>=b); endex;【例4】有符号数比较 libraryieee; useieee.std_logic_arith.all; entityreis port(a,b:insigned(1downto0); m:outboolean); endre; architectureexofreis begin m<=(a>=b); endex;综合实例: libraryieee; useieee.std_logic_arith.all; useieee.std_logic_unsigned.all; useieee.std_logic_signed.all; entitycnt10is port(a,b:inunsigned(3downto0); c,d:insigned(3downto0); rab:outunsigned(3downto0); rcd:outsigned(3downto0); ru,rs:outboolean); end; architecturertlofcnt10is begin rab<=a+b;rcd<=c+d;ru<=(a>b);rs<=(c>d); end; 并置运算符 并置运算符“&”用于位的连接。例如,将4个位用并置运算符“&”连接起来就可以构成一个具有4位长度的位矢量。两个4位的位矢量用并置运算符“&”连接起来就可以构成8位长度的位矢量。图3-1就是使用并置运算符的实例。图3-1使用并置运算符的实例在图3-1中,en是b(0)~b(3)的允许输出信号,而y(0)~y(7)中存在如下关系: y(0)=b(0) y(1)=b(1) y(2)=b(2) y(3)=b(3) y(4)=a(0) y(5)=a(1) y(6)=a(2) y(7)=a(3)这种逻辑关系用并置运算符就很容易表达出来: tmp_b<=bAND(en&en&en&en); y<=a&tmp_b; 第一个语句表示b的4位位矢量由en进行选择得到一个4位位矢量的输出。第二个语句表示4位位矢量a和