Verilog数字系统设计教程【夏宇闻】笔记5

本文详细介绍了VerilogHDL语言中的逻辑运算符、关系运算符、等式运算符、移位运算符、位拼接运算符,以及赋值语句的非阻塞和阻塞两种方式。此外,还讲解了顺序块和并行块的执行特点。

各种运算符、赋值语句、结构说明语句等

  1. 逻辑运算符
    在Verilog HDL 语言中存在3种逻辑运算符
    (1)&& 逻辑与
    (2)|| 逻辑或
    (3)! 逻辑非
    为了提高程序的可读性,明确表达各运算符间的优先关系,建议使用括号。
  2. 关系运算符
    关系运算符共有以下 4种:
    (1)a<b a小于b
    (2)a>b a大于 b
    (3)a<=b a 小于或等于b
    (4)a>=b a大于或等于b
    在进行关系运算时,如果声明的关系是假的(flase),则返回值是0;如果声明的关系是真的(true),则返回值是 1;如果某个操作数的值不定,则关系是模糊的,返回值是不定值。
  3. 等式运算符
    在 Verilog HDL 语言中存在4种等式运算符
    (1)(等于);
    (2)!=(不等于);
    (3)
    =(等于);
    (4)!==(不等于)。
  4. 移位运算符
    在 Verilog HDL中有两种移位运算符“<<”(左移位运算符)和“>>”(右移位运算符)。其使用方法如下
    a>>n或 a<<n
    a 代表要进行移位的操作数,n代表要移几位。这两种移位运算都用0来填补移出的空位。
  5. 位拼接运算符
    在Verilog HDL语言中有一个特殊的运算符:位拼接运算符(Concatation){}。用这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作,其使用方法如下:
    {信号1的某几位,信号2的某几位,……信号n的某几位}
    即把某些信号的某些位详细地列出来,中间用逗号分开,最后用大括号括起来表示一个整体信号。见下例:
    {a,b[3:0],w,3’b101}
    在位拼接表达式中不允许存在没有指明位数的信号。这是因为在计算拼接信号位宽的大小时必须知道其中每个信号的位宽。
    位拼接还可以用重复法来简化表达式:
    {4{w}}//这等同于{w,w,w,w}
    位拼接还可以用嵌套的方式来表达:
    {b,{3{a,b}}} //这等同于{b,a,b,a,b,a,b}
    用于表示重复的表达式,如上例中的4和3,必须是常数表达式。
  6. 缩减运算符
    缩减运算符(reduction operator)是单目运算符,也有与、或、非运算。其与、或、非运算规则类似于位运算符的与、或、非运算规则,但其运算过程不同。位运算是对操作数的相应位进行与、或、非运算,操作数是几位数则运算结果也是几位数。而缩减运算则不同,缩减运算是对单个操作数进行或、与、非递推运算,最后的运算结果是 1位的二进制数。缩减运算的具体运算过程是这样的:第一步先将操作数的第 1位与第2位进行或、与、非运算;第二步将运算结果与第 3 位进行或、与、非运算,依次类推,直至最后1位。
    例如:reg [3;0] B;
    reg C;
    C=&B;
    相当于:
    C=((B[0]&B[1])& B[2])&B[3];

赋值语句和块语句

  1. 赋值语句
    在Verilog HDL 语言中,信号有两种赋值方式:
    (1)非阻塞(non_blocking)赋值方式(如b<=a;)
    •块结束后才完成赋值操作;
    •b 的值并不是立刻就改变的:
    •这是一种比较常用的赋值方法(特别在编写可综合模块时)
    (2)阻塞(blocking)赋值方式(如b=a;)
    •赋值语句执行完后,块才结束;
    •b 的值在赋值语句执行完后立刻就改变的
    •在沿触发的always 块中使用时,综合后可能会产生意想不到的结果。
  2. 块语句
    块语句通常用来将两条或多条语句组合在一起,使其在格式上看更像一条语句。块语句有两种,一种是begin_end 语句,通常用来标识顺序执行的语句,用它来标识的语句称为顺序块;一种是 fork_ioin 语句,通常用来标识并行执行的语句,用它来标识的块称为并行块。
    (1)顺序块
    顺序块有以下特点:
    •块内的语句是按顺序执行的,即只有上面一条语句执行完后下面的语句才能执行。
    •每条语句的延迟时间是相对于前一条语句的仿真时间而言的。
    •直到最后一条语句执行完,程序流程控制才跳出该语句块。
    (2)并行块
    并行块有以下 4个特点:
    •块内语句是同时执行的,即程序流程控制一进入到该并行块,块内语句则开始同时并行地执行。
    •块内每条语句的延迟时间是相对于程序流程控制进入到块内的仿真时间的。
    •延迟时间是用来给赋值语句提供执行时序的。
    •当按时间时序排序在最后的语句执行完后,或一个 disable 语句执行时,程序流程控制跳出该程序块。
    (3)起始时间和结束时间
    在并行块和顺序块中都有一个起始时间和结束时间的概念。对于顺序块,起始时间就是第一条语句开始被执行的时间,结束时间就是最后一条语句执行完的时间。而对于并行块来说,起始时间对于块内所有的语句是相同的,即程序流程控制进人该块的时间,其结束时间是按时间排序在最后的语句执行结束的时间。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值