(笔记)关于Verilog中的一元约简运算符

从毕业到现在已经接触Verilog有段时间了,然后今日在一个文件中见到一段Verilog代码,让我有些摸不着头,代码内容如下:

if (&compare_valid & rdata_valid_flag_reg & pnf_persist_compare)
    pnf_persist1 <= 1'b1;
else 
    pnf_persist1 <= 1'b0;
对于第一个运算符硬是没想起来怎么用到如此用法,实为惭愧。只好借助强大的谷歌了,经查后得知,原来这个叫一元约简运算符。具体解释是这样的:一元约简运算符是单目运算符,其运算规则类似于位运算符中的与、或、非,但其运算过程不同。约简运算符对单个操作数进行运算,最后返回一位数,其运算过程为:首先将操作数 的第一位和第二位进行与、或、非运算;然后再将运算结果和第三位进行与、或、非运算; 依次类推直至最后一位。

常用的约简运算符的关键字和位操作符关键字一样,仅仅由单目运算和双目运算的区别。

如果看到这里依然不能理解的我给出一个一元简约运算符的 Verilog 实例如下:

wire    [3 : 0] wire1;
wire            wire2;

assign wire1 = 4'b1010;
assign wire2 = &wire1;       //&即为一元约简运算符“与”

其等效为:

wire    [3 : 0] wire1;
wire            wire2;

assign wire1 = 4'b1010;
assign wire2 = wire1[0] & wire1[1] & wire1[2] & wire1[3];       //即为一元约简运算符“与” 等效效果

相信这些可以让更多人理解了吧。

posted @ 2013-04-02 20:56  Kuvon  阅读(2847)  评论(0编辑  收藏  举报