常見的關系運算符(縮減運算符)


寫在前面的話

縮減運算符是單目運算符,也有與或非運算。其與或非運算規則類似於位運算符的與或非運算規則,但其運算過程不同。位運算是對操作數的相應位進行與或非運算,操作數是幾位數則運算結果也是幾位數。而縮減運算則不同,縮減運算是對單個操作數進行與或非遞推運算,最后的運算結果是一位的二進制數。縮減運算的具體運算過程是這樣的:第一步先將操作數的第一位與第二位進行與或非運算,第二步將運算結果與第三位進行與或非運算,依次類推,直到最后一位。例如:

reg[3:0]B;

reg C;

C=&B;

相當於

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

工程實例

下面,夢翼師兄給大家編寫一個實例,通過仿真波形來驗證運算結果是否如我們所說。可綜合模塊代碼如下

    /****************************************************          

    *   Engineer        :   夢翼師兄

    *   QQ               :   761664056

    *   The module function:縮減語句運算模塊

    *****************************************************/

01  module reduce(clk,rst_n,c);

02  input clk;//系統時鍾輸入

03  input rst_n;//系統復位

04

05  output reg c;//輸出寄存器定義

06

07  reg [3:0]B;//內部寄存器定義

08

09  always@(posedge clk or negedge rst_n)

10      begin

11          if(!rst_n)

12              begin

13                  c<=0;

14                  B<=4'b1111;

15              end 

16          else

17              begin

18                  c<=&B;

19              end 

20      end 

21

22  endmodule

 

編寫測試代碼如下

    /****************************************************          

    *   Engineer        :   夢翼師兄

    *   QQ               :   761664056

    *   The module function:縮減語句測試模塊

    *****************************************************/

01  `timescale 1ns/1ps 

02  module tb;

03  reg clk;    

04  reg rst_n;

05

06  wire c;

07

08  initial

09      begin

10          clk=0;

11          rst_n=0;

12          # 1000.1 rst_n=1;

13      end 

14

15  always #10 clk=~clk;    

16      

17  reduce reduce(

18      .clk(clk),

19      .rst_n(rst_n),

20      .c(c)

21    );

22  endmodule 

查看仿真波形如下:

通過該波形可以看出,當變量B的四個位全部為高時,由於是“邏輯與”的運算,所以最終輸出的變量C為高電平。

那么如果我們在變量B中加入一個零,結果會如何呢?我們仿真如下:

可以看到,如果變量B中存在零,那么輸出結果由於“邏輯與”會得到低電平。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM