ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《Verilog数字系统设计教程》第四章笔记

2022-01-18 09:31:38  阅读:112  来源: 互联网

标签:语句 教程 end 逻辑 运算符 Verilog 执行 第四章 赋值


4.1 逻辑运算符

  (1)&&逻辑与;

  (2)||逻辑或;

  (3)!逻辑非。

  逻辑与、或的优先级别低于关系运算符,逻辑非高于算数运算符。建议使用括号来明确表达优先关系。

4.2 关系运算符

    (1) a<b,小于;

    (2) a>b,大于;

    (3) a<=b,小于等于;

    (4) a>=b,大于等于;

  若关系为假,返回0;为真,返回1;某个操作数不定,返回不定值。所有关系运算符优先级别相同,低于算术运算符。

4.3 等式运算符

  (1)==

  (2)!=

  又称逻辑等式运算符。若操作数某些位可能为不定值x和高阻值z,结果可能为不定值x。

  (3)===

  (4)!==

  会将不定值x和高阻值z也进行比较,必须完全一致才返回1,否则为0。常用于case表达式判别。

  它们的字符之间不能有空格。

 

 

if(A == 1'bx)    $display("Aisx");     //判别为x,不执行
if(A === 1'bx)    $display("Aisx");    //判别为1,执行

 4.4 移位运算符

  有左移(a>>n)和右移(a<<n),a为操作数,n为移的位数。两种都用0来填补。

 4.5 位拼接运算符

  位拼接运算符“{}”可以将多个信号的某些位拼接起来。

{信号1的某几位,信号2的某几位,...,信号n的某几位}
{a,b[3:0],w,3'b101}    //相当于{a,b[3],b[2],b[1],b[0],w,1'b1,1'b0,1'b1}

  计算拼接信号位宽大小时必须知道每个信号的位宽。

{4{w}}          //等于{w,w,w,w}
{b,{3{a,b}}}    //等于{b,a,b,a,b,a,b}

 4.6 缩减运算符

  缩减运算符为单目运算符,也有与、或、非,其规则类似于位运算符,但运算过程不同。缩减运算为递推运算,先将操作数第1位与第2位进行与、或、非,再将结果与第3位与、或、非,...,直至最后一位,得到一个1位二进制数。例如

reg [3:0] B;
reg C;
    C = &B;

  相当于:

C = ((B[0] & B[1]) & B[2]) & B[3];

 4.7 优先级别

 

 4.8 关键词

  都是小写。变量定义不要与关键词冲突。

  always, and, assign, begin, buf, bufifO, bufifl, case, casex, casez, cmos, deassign, default, defparam, disable, edge, else, end, endcase, endmodule, endf unction, end primitive, endspecify, end table, end task, event, for, force, forever, fork, function, highzO, highzl, if, initial, inout, input, integer,join, large, macromodule, medium, module, nand, negedge, nmos, nor, not, notifO,notifl, or, output, parameter, pmos, posedge, primitive, pullO, pulll, pullup, pulldown, rcmos, reg, releses, repeat, mmos, rpmos, rtran, rtranifO, rtranifl, scalared, small, specify,specparam,strength,strongO, strongl, supplyO, supplyl, table, task, time, tran, tranifO, tranifl, tri, triO, tril, triand, trior, trireg, vectored, wait, wand, weakO, weakl, while,wire,wor, xnor,xor

 4.9 赋值语句和块语句

 4.9.1 赋值语句

 1.非阻塞(Non_Blocking)赋值(如b<=a)

  (1)语句块中上面语句所赋变量值不能立即为下面语句所用;

  (2)块结束后才完成这次赋值,所赋变量值是上一次赋值得到的,例如:

always @(posedge clk)
        begin
          b <= a
          c <= b
        end

  c的值为b的初始值,而非a的值。

  (3)编写可综合的时序逻辑模块时最常用。

 2.阻塞(blocking)赋值方式(如b=a)

  (1)赋值语句执行完后块才结束;

  (2)b的值在赋值语句执行完后立刻就改变;

  (3)在时序逻辑中使用时可能会产生意想不到的结果。

 4.9.2 块语句

  用来将2或多条语句组合在一起。

 1.顺序块

  用begin和end标识。

  (1)所有语句顺序执行,上一条结束才执行下面的;

  (2)每条语句的延迟时间相对于前一条语句的仿真时间而言;

  (3)最后一条语句执行完才跳出该语句块。

  块内声明语句可以是参数、reg型、integer型和real型。

begin
    areg = breg;
    creg = areg;    //creg的值为breg的值
end

 2.并行块

  用folk和join标识。

  (1)块内语句同时执行;

  (2)每条语句延迟时间相对于程序流程进入块内的仿真时间而言;

  (3)延迟时间用来给赋值语句提供执行时序;

  (4)按延迟时间排序在最后的语句执行完后或一个disable语句执行时,跳出该程序块。

  块内声明语句可为参数、reg型、integer型、real型、time型和事件说明语句。

fork
    #50    r = 'h35;
    #100   r = 'hE2;
    #150   r = 'h00;
    #200   r = 'hF7;
    #250   -> end_wave;    //触发事件
join

  上面代码生成一个波形。

 3.块名

  可给每个块取一个名字,将名字加在begin或fork后面。

  (1)可以在块内定义局部变量;

  (2)可以允许块被其它语句调用;

  (3)Verilog中变量都是静态的,只有唯一的存储地址,进出块不影响变量内的值。

标签:语句,教程,end,逻辑,运算符,Verilog,执行,第四章,赋值
来源: https://www.cnblogs.com/yangyi2120/p/15815516.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有