内容为书中第4章

等式运算符

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

  Verilog中存在4种等式运算符:

        1. == (等于);
        2. != (不等于);
        3. === (等于);
        4. !== (不等于)。

  “==”与"==="的异同。

    “==” 在操作数的某些位是不定值x或高阻值z时,结果可能为不定值;

    “===”也对x和z进行比较,只有两个操作数完全一致时,输出1,否则输出0.

等式运算符的真值

== 0 1 x z
0 1 0 x x
1 0 1 x x
x x x x x
z x x x x
=== 0 1 x z
0 1 0 0 0
1 0 1 0 0
x 0 0 1 0
z 0 0 0 1

在“===”表达式种,输出只可能是 1 或者 0 。在“==”表达式中,输出可能是 0、1或 x 中的一种。

使用移位运算符 “>>”和"<<"的一点注意事项

  要注意移位前后变量的位数。

    eg: (1) 4'b1001<<1 = 5'b10010      (2) 4'b1001<<2 = 6'b100100          (3) 1<<6  = 32'b1000000...

       (4) 4’b1001>>1 = 4'b0100   (5) 4'b1001>>4 = 4'b0000

可以看出在右移过程中,会改变移位以后的值的位数。但是如果事先声明了存储值的变量的长度。则右移位后的位数仍然为声明的位数。如(3)中,由于系统默认32位。相当于预先声明数据长度是32位,则移位后仍然为32位。

位拼接运算符{}

位拼接运算符 “{}” 可以把两个或多个信号的某些位拼接起来进行位运算。

    {信号1的某几位,信号2的某几位.....}    eg:  {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}

书中P22上方代码就运用了位拼接运算符。

缩减运算符

缩减运算的与、或、非计算是对单个操作数进行或、与、非递推运算。最后结果是1位的二进制数。

缩减运算的具体过程为:第一步先将操作数的第一位与第二位进行或、与、非运算;第二步将运算结果与第三位进行或、与、非运算,依次类推,直至最后1位。

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

类似于:

C = ((B[]&B[])&B[])&B[];

问题1:在缩减运算符中,如何进行 非 的运算?

回答:

在缩减(归约)运算符中,只有上面的6种运算符,没有 ~ 运算符。书中有误。参考:(1)http://blog.sina.com.cn/s/blog_88c9ddc5010182mj.html

(2)http://forum.eepw.com.cn/thread/182573/1

赋值语句

非阻塞赋值(b<=a)

非阻塞赋值语句只有当块语句结束后才能完成这次赋值操作;在编写可综合的时序逻辑模块时,常用非阻塞赋值。

阻塞赋值(b=a)

赋值语句执行结束后,块采结束。

例子分析:

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

在上面例子中使用了非阻塞赋值方法。那么当块语句块执行结束后,才会执行3,4行赋值代码。又因为verilog在块外是并行执行。所以最后结果是,把原来a的值赋给b,同时将原来b的值赋给c(因为并行执行,在将b的值赋给c时,b的值没有更新。)。

问题2:这里面的 “块”是指的begin-end块还是always块?

块语句

快语句有两种:     1:begin_end : 标识顺序执行语句;    2 :fork_join : 用来标识并行执行语句。

在begin-end语句块中,begin-end和fork-join块可以相互嵌套,也可以自我嵌套。如果begin-end中包含有局部声明,则他必须被命名(必须有一个标志)。如果要禁止一个begin-end块,那么被禁止(disasble语句)的begin-end必须有名字。

取块名: begin:块名           fork:  块名                      注意:有冒号 :

在Veriloog语言中,所有的变量都是静态的,所有的变量都只有一个唯一的存储地址,因此进入或跳出块并不影响存储在变量内的值。

块名可以允许被其他的语句调用,也可以通过层次名进行调用; 问题2:块名的具体使用方法?,块的嵌套运行时间顺序?

Verilog_Day2_Plus的更多相关文章

随机推荐

  1. leveldb开篇

    因为工作的需求,最近看了一些项目的源码,包括nginx.tair.leveldb,一直看了下来都没有写东西的习惯,虽然作了不少记录,但都是只有自己才能看懂的笔记. 好多次都说开始写blog,锻炼一下自 ...

  2. session 之session混乱解决方法(转)

    知道了session混乱产生的原因之后,也就知道了问题的根源.同时也引出了很多的问题: 1.如何记录住在线人员(这里只有帐号的系统用户,不包括访客): 2.如何限制同一个帐号在同一时间段内只能够登陆一 ...

  3. 从Azure上构建Linux应用程序映像

    下图描述了总体的虚拟机的VHD映像生成以及发布到 Azure Azure 镜像市场的全过程: 具体步骤如下: 从Azure管理平台上Linux申请虚拟机, 安装和配置您要发布的应用软件产品,制作成映像 ...

  4. NSMapTable、NSHashTable与NSPointerArray的封装

    NSMapTable.NSHashTable与NSPointerArray的封装 说明 NSMapTable对应NSDictionary:NSHashTable对应NSSet:NSPointerArr ...

  5. lua调用c++函数返回值作用

    2015/05/28 lua调用c++接口,返回给lua函数的是压入栈的内容,可以有多个返回值.但是c++接口本身也是有返回值的,这个返回值也非常的重要,会决定最后返回到lua函数的值的个数. (1) ...

  6. Python初学者第二十三天 函数进阶(2)装饰器

    装饰器: 需求----> 写一个功能,测试其他同事函数的调用效率. 第一版:功能版 import time def func(): time.sleep(0.2) print('非常复杂') d ...

  7. C++实现一个Vector3空间向量类(转)

    转自:http://www.2cto.com/kf/201311/260139.html ector2,3,4类在DirectX中都有现成的可以调用,不过要实现其中的功能其实也不难,也都是一些简单的数 ...

  8. Mycat分片规则详解

    1.分片枚举 通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下: <tab ...

  9. in有两种用法:

    # in有两种用法: 1. 在for中. 是把每一个元素获取到赋值给前⾯的变量. 2. 不在for中. 判断xxx是否出现在str中. #len() 为内置函数,输出为1,2,3,4....., 长度 ...

  10. 从0开始搭建Element项目

    第一步:安装 Node.js/NPM 下载Node.js:https://nodejs.org/zh-cn/download/ 下载安装即可. 第二步:安装 vue-cli 打开 cmd 创建,在命令 ...