朱辉燕的个人空间 https://blog.eetop.cn/1553875 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

verilog中的表达式

已有 1736 次阅读| 2016-8-31 20:16

理解Verilog 表达式
表达式就是根据自己逻辑需要对操作数进行特定操作。
操作数的组成:常数、线网、参数、寄存器、位选择、部分选择、存储器单元、函数调用。在表达式中整数可以是有符号和无符号数,在表达式中如果是十进制整数将其看作为有符号整数;如果整数是基数型整数可以看作成无符号整数。
实例说明: 
常数 进制数 符号说明
36 100100b 有符号数(向量)
-36 111100b(补码) 有符号数(向量)
5’b100100 36(d) 无符号数
5’b111100 60d 无符号数
5’d36 100100b 无符号数
在verilog中对基数与非基数表示的无符号整数处理方式是不同的,非基数表示的负整数当做有符号处理,而用基数表示的负整数当做无符号整数来处理;
Integer  hy_03;
hy_03=-44/4;
hy_03=-10’d44;
这两个的处理方式是不同的,第一个为非基数以有符号数处理,第二个为基数型非定长的负数。因此第一个的结果为-11;而第二个的结果为1073741813;注意常数hy_03因为为非定长的,默认为32位且在计算机内以补码的形式存在。
参数(parameter):parameter local=32’d12; store =6’d4;local表示其值为12,store表示其值为4,在使用参数前的进行说明,参数类似于常量。
线网(wire):可以看作是直通连线,一旦有输入,就会立刻反映输出,本身没有驱动能力,需要进行持续的驱动,否则就会表示为Z状态,一般用在连续赋值语句中;wire型数据只能在assign语句中赋值。
寄存器(reg):有标量和向量寄存器;可以看作是一个储存单元,如若没有发生触发条件reg可以保存原来的值,一般用于过程赋值语句。默认初始值为X。
位选择:就是从向量中抽取特定的位进行操作。reg [3:0] state;state[2]=1’b1;抽取state[2]位并将其赋值为1;抽取多位即使部分位选择。State[1:0]表示抽取state向量的1位到0位。
存储器单元:直接用例子说明
reg  [31:0]  memory   [63:0];表示有64个存储器单元,每个存取器单元有32位;对于存储器单元,不能进行位选择操作与部分位选择操作,memory[2]  [2]、memory[3]  [21:9]都是非法的;不过可以将其赋值给另外一个寄存器在进行位选择。
reg  ack [31:0]; ack=memory[3],  ack[2]。
操作符类型:
算术操作符:
+(加)、-(减)、*(乘)、/(除)、%(取模);在算术操作符中如果某个操作符为X或者为Z,那么其整个结果为X ;’b101x+’b1001其运算结果结果为x。
算术操作结果的确定:算术表达式的结果的运算长度由最长操作数决定,在赋值语句的情况下,算术操作结果有操作符左端目标长度决定。
Reg [3:0] arc_o ,brc,crc;
Reg [7:0] sum;
Sum =arc_o+ brc+crc;
在上面的式子中其中arc_o、brc、crc相加的结果溢出会存储在sum中,其表示式的结果与操作结果都是sum;
Arc_0=brc+crc,在表达式中数据的结果由arc_o、brc、crc的长度决定但是算术操作结果由arc_确定,其溢出的结果由会被丢掉。注意算术表达式结果和算术操作结果。
无符号数和有符号数:
无符号数一般存储在一般寄存器、线网、基数格式表现形式的整数;
有符号数一般存储在整数寄存器、十进制形式的整数;
Reg  [7:0]  bar;
     Integer [7:0]  tab;
Bar=-8’d12;  110_100;  tab=-8’d12; 110_100 。两个值存储的内容都是一样的,但对其进行的解释确实不一样,reg存储的无符号数,所以其解释为十进制的52,而tab解释为-12。
关系运算符:==、>=、<=、>、<。注意在关系运算符中一旦某个数中包含X或者Z,拿着整个运行的结果为X。
按位操作符:&(按位与)、~(非)、|(按位或)、^(异或)、~^(异或非)。
其运算符表:
 
归约操作符:归约操作符是一元操作符,注意与面的二元操作符区分;其所有操作在一个操作数上进行,只产生一位结果。
&(归约与):操作数位值存在0,那么其结果值为0,如果位值存在X或者Z那么其整个位X。
|(归约或):如果位值存在1,那么整个值为1,如果位值存在X或者Z那么其整个值位X。
^(归约异或):操作数有偶数个1其结果为0,否则其值为1,如果位值存在X或者Z那么其整个值位X。
例: hy_01=4’b1000;mh_01=4’b1010;
&hy_01: 其结果为0;(其运算过程从最低位开始与整个参数的每位进行与运算得到一个一位的结果,待参数的每一位都进行与运算后,再将每位的结果进行与运算)
|mh_0:1其结果为1;(其运算过程从最低位开始与整个参数的每位进行或运算得到一个一位的结果,待参数的每一位都进行或运算后,再将每位的结果进行或运算)
移位运算符:<<(左移),>>(右移)
   一般表达式:
        操作数(操作符)移动的次数;
reg [7:0]  l_move; l_move =4’b0101;l_move >> 2其结果为 0000_0001;在进行移动后,其空闲位按0进行补位。其中操作符可以进行指数的运算,64’b<<numbit(0<numbit<64),可以实现其指数的运算。
条件运算符:根据条件表达式的结果来选择相应的表达式
con_num?num1:num2;如果con_num为真,就选择num;否则选择num2.


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 0

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-3 08:53 , Processed in 0.015578 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部