找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 3577|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

異或 ^ 的幾個(gè)作用

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:104287 發(fā)表于 2016-1-30 03:52 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
一、交換兩個(gè)整數(shù)的值而不必用第三個(gè)參數(shù)
a = 9;
b = 11;

a=a^b; 1001^1011=0010
b=b^a; 1011^0010=1001
a=a^b;  0010^1001=1011

a = 11;
b = 9;

二、奇偶判斷

^a操作就是將a中的每一位按位逐一進(jìn)行異或,例如a=4'b1010,則b=1^0^1^0=0,由此可以判斷a中為1的位數(shù)是奇數(shù)還是偶數(shù),是一個(gè)便捷的操作。

三、格雷碼(Gray code)

    格雷碼(Gray code)是由貝爾實(shí)驗(yàn)室的Frank Gray在1940年提出,用于在PCM(Pusle Code Modulation)方法傳送訊號(hào)時(shí)防止出錯(cuò),并于1953年三月十七日取得美國專利。格雷碼是一個(gè)數(shù)列集合,相鄰兩數(shù)間只有一個(gè)位元改變,為無權(quán)數(shù)碼,且格雷碼的順序不是唯一的。
直接排列
    以二進(jìn)制為0值的格雷碼為第零項(xiàng),第一項(xiàng)改變最右邊的位元,第二項(xiàng)改變右起第一個(gè)為1的位元的左邊位元,第三、四項(xiàng)方法同第一、二項(xiàng),如此反覆,即可排列出n個(gè)位元的格雷碼。

1、自然二進(jìn)制碼轉(zhuǎn)換成二進(jìn)制格雷碼
  自然二進(jìn)制碼轉(zhuǎn)換成二進(jìn)制格雷碼,其法則是保留自然二進(jìn)制碼的最高位作為格雷碼的最高位,而次高位格雷碼為二進(jìn)制碼的高位與次高位相異或,而格雷碼其余各位與次高位的求法相類似。



2、二進(jìn)制格雷碼轉(zhuǎn)換成自然二進(jìn)制碼 
  二進(jìn)制格雷碼轉(zhuǎn)換成自然二進(jìn)制碼,其法則是保留格雷碼的最高位作為自然二進(jìn)制碼的最高位,而次高位自然二進(jìn)制碼為高位自然二進(jìn)制碼與次高位格雷碼相異或,而自然二進(jìn)制碼的其余各位與次高位自然二進(jìn)制碼的求法相類似。


    二進(jìn)制數(shù)轉(zhuǎn)格雷碼
(假設(shè)以二進(jìn)制為0的值做為格雷碼的0)
格雷碼第n位 = 二進(jìn)制碼第(n+1)位+二進(jìn)制碼第n位。不必理會(huì)進(jìn)制。

     Verilog 代碼:gray=(binary>>1)^binary;

     格雷碼轉(zhuǎn)二進(jìn)制數(shù)
二進(jìn)制碼第n位 = 二進(jìn)制碼第(n+1)位+格雷碼第n位。因?yàn)槎M(jìn)制碼和格雷碼皆有相同位數(shù),所以二進(jìn)制碼可從最高位的左邊位元取0,以進(jìn)行計(jì)算。
      verilog 代碼://------假設(shè) reg [n-1] gray,binary;
             integer i;
             for(i=0;i<=n-1;i=i+1)
              binary[i]= ^(gray>>i)//gray移位后,自身按位異或
放一段代碼這,用于參考:
/*Logic to convert binary numbers into Gray coded binary numbers is implemented in the following Verilog Code.
*/
module binary2gray();
reg clk;
reg rstn;
reg [5:0] counter_binary, counter_binary_reg, counter_gray, counter_gray_reg;
integer count, file_wr;

/* Initial block to generate clock and reset */ 
initial  begin
    clk = 0; rstn = 0;  #100 rstn = 1;
    forever begin
        #10 clk = !clk; 
 end end    

/* Synchronous Logic for registering the data and incrementing the counter for binary data */
always @ (posedge clk or negedge rstn)
begin
    if (!rstn) begin
        counter_binary_reg <= 'b0;
        counter_gray_reg <= 'b0;  end
    else begin 
        counter_binary_reg <= counter_binary + 1;
        counter_gray_reg <= counter_gray;
        $display("binary number= 6'b%b : gray en-coded binary number = 6'b%b", counter_binary_reg, counter_gray_reg);   end end

/* Logic is to get Gray code from Binary code */
function[5:0] binary2gray ;
    input[5:0] value;
    integer i;
    begin 
        binary2gray[5] = value[5];
        for (i=5; i>0; i = i - 1)
            binary2gray[i-1] = value[i] ^ value[- 1];
    end
endfunction

/* Get gray encoded output */
always @(*)
begin 
  counter_gray = counter_gray_reg;
  counter_binary = counter_binary_reg;
  counter_gray = binary2gray(counter_binary_reg); end
endmodule
 

四、奇數(shù)分頻

奇數(shù)分頻電路:

  奇數(shù)分頻電路常用的是錯(cuò)位“異或”法的原理。如進(jìn)行三分頻,通過待分頻時(shí)鐘的上升沿觸發(fā)計(jì)數(shù)器進(jìn)行模三技術(shù),當(dāng)計(jì)數(shù)器計(jì)數(shù)到鄰近值進(jìn)行兩次翻轉(zhuǎn)。比如計(jì)數(shù)器在計(jì)數(shù)到1時(shí),輸出時(shí)鐘進(jìn)行翻轉(zhuǎn),計(jì)數(shù)到2時(shí)再進(jìn)行翻轉(zhuǎn),即在鄰近的1和2時(shí)刻進(jìn)行兩次翻轉(zhuǎn)。這樣實(shí)現(xiàn)的三分頻占空比為1/3或2/3.如果要實(shí)現(xiàn)占空比為50%的三分頻時(shí)鐘,可通過待分頻的時(shí)鐘上升沿觸發(fā)計(jì)數(shù)器和下降沿觸發(fā)計(jì)數(shù)器進(jìn)行三分頻,然后將上升沿和下降沿產(chǎn)生的三分頻時(shí)鐘進(jìn)行相或預(yù)算,即可得到占空比為50%的三分頻時(shí)鐘。

      錯(cuò)位“異或”法推廣:

  對(duì)于實(shí)現(xiàn)占空比為50%的N倍奇數(shù)分頻,首先進(jìn)行上升沿觸發(fā)的模N計(jì)數(shù),計(jì)數(shù)到某一選定值時(shí),進(jìn)行輸出時(shí)鐘翻轉(zhuǎn),然后進(jìn)過(N-1)/2再次進(jìn)行翻轉(zhuǎn)得到一個(gè)占空比非50%的技術(shù)分頻時(shí)鐘。再者同時(shí)進(jìn)行下降沿觸發(fā)的模N計(jì)數(shù),到和上升沿觸發(fā)輸出時(shí)鐘翻轉(zhuǎn)選定值相同時(shí),進(jìn)行輸出時(shí)鐘翻轉(zhuǎn),同樣經(jīng)過(n-1)/2時(shí),輸出時(shí)鐘再次翻轉(zhuǎn)生成占空比非50%的奇數(shù)N分頻時(shí)鐘。兩個(gè)占空比非50%的時(shí)鐘相或運(yùn)算,得到占空比為50%的奇數(shù)N分頻時(shí)鐘。

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
暗光 + 35 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表