Verilog HDL 语法学习(二)赋值语句,运算符语句,结构语句用法

手握残阳沥血剑,心有冷月 凝霜刀,绝顶一览 众山小, 无悔世间走一遭,过程本身就是一种快乐。

运算符概述

1.逻辑运算符(&&,||,!)

//"&&""||"优先级高于关系运算符,"!"优先级高于算数运算符
(a>b)&&(x>y)    //可以改写为a>b&&x>y
(a==b)||(x==y)  //可以改写为a==b||x==y
(!a)||(a>b)     //可以改写为!a||a>b

为提高程序可读性,明确表达各运算符间的优先关系,建议使用括号

2.关系运算符(<,>,<=,>=)

//关系运算符优先级低于算数运算符
a<b-1   //可以改写为a<(b-1)
Q-(1<a) //!!!不可以改写为 q-1<a   若1>a,前者返回的就是Q值

3.等式运算符

==等于!== 不等于
===等于!===不等于

““==”与“===”区别

if(a==1'bx)    $display("AisX")       //不会执行,因为X代表不定值

if(a===1'bx)   $display("AisX")      //会执行,因为X代表不定值,===能比较X和Z值

4.移位运算符: "<<“左移位运算符       “>>”右移位运算符

使用方法:a<<n  或a>>n  "n"代表移位的位数

例子如下

module shift;
reg[3:0]x,result;
initial;
begin
x=1;              //假设初始值为0001
result=(x<<2);    //向左移两位后 x变为 0100,赋值给result
end
endmodule

注意

移位后位数变量的位数会发生变化

4'b1000<<1  =5'b10000;

5.位拼接运算符(Concatation):"{}"

用法:{信号1的某几位,信号2的某几位,...信号n的某几位}

几种表达方式:

{a,b[3:0],c,3'b101}    //
{4(w)}                 //重复法,等同于{w,w,w,w}
{a,3{a,b}}             //嵌套法,等同于{a,a,b,a,b,a,b}

6.缩减运算符(reduction  operator):

缩减运算是对单个的操作数进行&,||,!的递推运算,最终结果为1位的二进制数

例如:

reg B[3:0];
reg D;
D=&B;//相当于 C=(((B[0]&B[1])&B[2])&B[3])

7.运算符的优先级

赋值语句和块语句

1.赋值语句:包含阻塞赋值和非阻塞赋值

非阻塞赋值(non-blocking):

b<=a;//非阻塞赋值方式
  • 块语句 结束后才完成赋值操作。意味着同步性只在块语句结束后生效
  • b的数值并不是立刻改变的
  • 这是常用的赋值方法  

阻塞赋值(blocking):

 

 

b=a;//阻塞型赋值
  • 赋值语句执行完后块语句才会结束
  • b的数值是赋值语句执行后立刻改变的

在沿触发的always块中使用,综合后会产生意想不到的结果。

 

2.块语句:begin——end (标识顺序执行) 和 fork——join (标识并行执行

用法如下:

begin 
    语句1;
    语句2;
    语句n;
end
fork :块名
      块内声明语句
    语句1;
    语句2;
join

3.块名:只需将名字加在关键字后面就行

4.起始时间和结束时间:

顺序块:第一条语句开始被执行的时间为起始时间, 最后一条语句被执行完的时间为结束时间。

并行块:所有语句起始时间相同,按时间排序结束在最后 的语句的结束的时间为结束时间。

今日学习至此,慢慢前进,加油!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值