在Verilog HDL语言有一个特殊的运算符:位拼接运算符{},用这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作。其使用方法如下:
即把某些倍号的某些位详细地列出来,中间用逗号分开,最后用大括号括起来表示一个整体信号,例如:
也可以写成为:
在位拼接表达式中不允许存在没有指明位数的信号。这是因为在计算拼接信号的位宽的大小时必需知道其中每个信号的位宽。
位拼接也可以用重复法来简化表达式,如下所示:
位拼接还可以用嵌套的方式来表达,如下所示:
【拓展资料】
Verilog HDL的语言的运算符的范围很广,按照其功能大概可以分为以下几类:
(1)算术运算符 +,-,*,/,%
(2)赋值运算符 =,<=
(3)关系运算符> ,<,>=,<=
(4)逻辑运算符 &&, ||, !
(5)条件运算符 ?:
(6)位运算符 ~, | , ^ ,& ,^~
(7)移位运算符 << ,>>
(8)拼接运算符 {}
(9)其他。
1)基本的算术运算符:加减乘都比较简单这里不再记录。
在进行整数的除法运算时,结果要略去小数部分,只取整数部分;而进行取模运算时(%,亦称作求余运算符)结果的符号位采用模运算符中第一个操作数的符号。
-10%3 结果 -1 11%-3 结果为2
注意:在进行算术运算时,如果某一个操作数有不确定的值x,则整个结果也为不确定值x。
2)位运算符:
按位取反~ 、按位与 & 、按位或 | 、按位异或 ^ 、按位同或 ^~
在不同长度的数据进行位运算时,系统会自动的将两个数右端对齐,位数少的操作数会在相应的高位补0,一时的两个操作数按位进行操作。
3)逻辑运算符:
逻辑与 &&、逻辑或 ||、逻辑非 !
其中&&和||是双目运算符,其优先级别低于关系运算符,而 !高于算术运算符。
4)关系运算符
< 、 > 、 <= 、 >= 如果关系运算是假的,则返回值是0,如果声明的关系是真的,则返回值是1。 关系运算符的优先级别低于算数运算符。
在Verilog HDL语言有一个特殊的运算符:位拼接运算符{},用这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作。其使用方法如下:
即把某些倍号的某些位详细地列出来,中间用逗号分开,最后用大括号括起来表示一个整体信号,例如:
也可以写成为:
在位拼接表达式中不允许存在没有指明位数的信号。这是因为在计算拼接信号的位宽的大小时必需知道其中每个信号的位宽。
位拼接也可以用重复法来简化表达式,如下所示:
位拼接还可以用嵌套的方式来表达,如下所示:
se0是最高位,se3为最低位
当se0=1时,z=d
当se1=1时,z=c
当se2=1时,z=b
当se3=1时,z=a
优先级se0 > se1 > se2 > se3
也就是说只要se0 = 1, z就等于d。即{se0 , se1 , se2 , se3} > =4'b1000,z等于d
依次类推
casex ({se0 , se1 , se2 , se3})
顺序就是按照{se0 , se1 , se2 , se3}从高到低的。
第一个条件是说:当se0=1时z=d
关于verilog的代码规范,可关注FPGA-Engineer公号,你会学到很多关于FPGA开发的东西。