精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

異步FIFO設計之格雷碼

ruikundianzi ? 來源:IC的世界 ? 2023-11-01 17:37 ? 次閱讀

相鄰的格雷碼只有1bit的差異,因此格雷碼常常用于異步fifo設計中,保證afifo的讀地址(或寫地址)被寫時鐘(或讀時鐘)采樣時最多只有1bit發生跳變。

在不考慮路徑延時的情況下,因為源數據(讀寫地址)只有1bit變化,即使發生了亞穩態,最終的結果相當于被目的時鐘延遲一拍采樣。

需要注意的是:異步fifo中使用格雷碼無法避免亞穩態,它起到的作用是,即使發生了亞穩態,依舊能夠保證異步fifo的功能正確

10進制 二進制 格雷碼
0 000 000
1 001 001
2 010 011
3 011 010
4 100 110
5 101 111
6 110 101
7 111 100

1.二進制轉格雷碼



47432c84-7898-11ee-939d-92fbcf53809c.png 圖1:二進制轉格雷碼

如圖所示,二進制轉格雷碼實現簡單,二進制數據右移1bit,高位補零后與自身進行位異或得到格雷碼。代碼實現如下:waddr為二進制寫地址,waddr_gray為對應的寫地址格雷碼

assign waddr_gray[ADDR_WDTH:0]=waddr[ADDR_WDTH:0] ^ {1’b0,waddr[ADDR_WDTH:1] }; 

2.格雷碼轉二進制




4761a06a-7898-11ee-939d-92fbcf53809c.png

圖2:格雷碼轉2進制 首先需要強調一下異或操作的特點:

A、B、C為1bit二進制整數,假設等式為A^B==C,那么已知B和C的情況下,可以通過A==B^C求得A數值。此處可以使用窮舉法嘗試一下,只有4種情況。




從二進制轉格雷碼也可以反推出格雷碼轉二進制的思路。

首先:最高bit位是相等的,b7等于g7。

因為g6==b7^b6,根據異或特性(由A^B==C得到A==B^C),可得知b6=b7^g6,即b6=g7^g6

因為g5==b5^b6,根據異或特性,可得知b5=g5^b6,即b5=g5^g6^g7

依次類推:b0=g0^g1^g2^g3^g4^g6^g7



在如下Verilog代碼實現中,我們提供了3種寫法。
寫法1和寫法2都是已知確定位寬的情況下,實現格雷碼轉二進制碼,不利于參數化。

寫法3采用function函數實現,不限制位寬,支持參數化。

//寫法 1


assign bin_code[0]=gray_code[0]^gray_code[1]^gray_code[2]^gray_code[3] ;
assign bin_code[1]=gray_code[1]^gray_code[2]^gray_code[3] ;
assign bin_code[2]=gray_code[2]^gray_code[3] ;
assign bin_code[3]=gray_code[3] ;




//寫法2
assign bin_code = {gray_code[3], ^gray_code[3:2], ^gray_code[3:1], ^gray_code};






//寫法3:
function       [ADDR_WIDTH:0]   bin_out;    
   input       [ADDR_WIDTH:0]   gray_in;    
   reg         [ADDR_WIDTH:0]   gray_code;  
   reg         [ADDR_WIDTH:0]   bin_code;   
   integer i,j;                             
   reg tmp;                                 
   begin
       gray_code = gray_in;
       for(i=0;i<=ADDR_WIDTH;i=i+1)
           begin
           tmp=1'b0;
           for(j=i;j<=ADDR_WIDTH;j=j+1)
              tmp=gray_code[j]^tmp;
           bin_code[i]=tmp;
           end
       bin_out= bin_code;
   end
endfunction 

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • fifo
    +關注

    關注

    3

    文章

    387

    瀏覽量

    43559
  • 格雷碼
    +關注

    關注

    2

    文章

    34

    瀏覽量

    13178
  • 異步FIFO
    +關注

    關注

    0

    文章

    20

    瀏覽量

    8351
  • FIFO設計
    +關注

    關注

    0

    文章

    7

    瀏覽量

    4963

原文標題:

文章出處:【微信號:IP與SoC設計,微信公眾號:IP與SoC設計】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    什么是

    (Gray code),又叫循環二進制或反射二進制 在數字系統中只能識別0和1,各種數據要轉換為二進制代碼才能進行處理,
    發表于 11-11 09:34 ?7305次閱讀
    什么是<b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>

    簡介及格與二進制的轉換程序

    簡介及格與二進制的轉換程序
    發表于 04-22 09:00

    什么是BCD、8421、余三

    的是8421BCD,無權用得較多的是余三,我們通常所說的BCD
    發表于 11-03 17:36

    介紹

    介紹
    發表于 08-14 09:44

    詳細討論異步FIFO的具體實現???

    我在網上看到一篇利用來設計異步FIFO,但是看他們寫的一些源碼,小弟有些不是很理解,在設計時為什么會出現Waddr和wptr兩個關于寫
    發表于 05-19 11:04

    的規則和應用問題?

    今天看到一個計數的程序,搜了下定義,覺得還是云里霧里,定義寫的是若任意兩個相鄰的代碼只有一位二進制數不同,則這種編碼為
    發表于 08-20 14:41

    異步FIFO的VHDL設計

    給出了一個利用對地址編碼的羿步FIFO 的實現方法,并給出了VHDL 程序,以解決異步讀寫時鐘引起的問題。
    發表于 07-16 15:15 ?26次下載

    簡介及格與二進制的轉換程序

    簡介及格與二進制的轉換程序
    發表于 01-16 11:52 ?5005次閱讀

    運算研究

    運算研究 在數字系統中只能識別0和1,各種數據要轉換為二進制代碼才能進行處理,是一
    發表于 03-18 14:07 ?1450次閱讀

    循環VHDL源程序

    我們知道計數的特點就是相鄰的碼字只有一個比特不同,那么我們在設計計數時找到這個比特取
    發表于 11-11 09:32 ?2098次閱讀

    辨析

    討論了Gray Code 的由來,剖析了關于的一些不合理說法,明確了其正宗的發明者應該是弗蘭克·,正確的英文名稱是Gray Cod
    發表于 11-28 16:04 ?5620次閱讀
    <b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>辨析

    編碼規則_有什么規律

    典型的二進制簡稱,因1953年公開的弗蘭克·
    的頭像 發表于 03-02 14:29 ?5.5w次閱讀
    <b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>編碼規則_<b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>有什么規律

    如何把二進制轉換為?是如何判斷讀空寫滿呢?

    在傳遞讀寫時鐘域的指針使用來傳遞,如何把二進制轉換為
    的頭像 發表于 09-15 09:38 ?8291次閱讀
    如何把二進制轉換為<b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>?<b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>是如何判斷讀空寫滿呢?

    異步FIFO的原因有哪些

    異步FIFO通過比較讀寫地址進行滿空判斷,但是讀寫地址屬于不同的時鐘域,所以在比較之前需要先將讀寫地址進行同步處理,將寫地址同步到讀時鐘域再和讀地址比較進行FIFO空狀態判斷(同步后的寫地址一定
    的頭像 發表于 08-04 14:05 ?4400次閱讀

    異步FIFO-

    很多人在面試時被問到為什么異步FIFO中需要用到,可能大部分的答案是
    的頭像 發表于 08-26 14:20 ?977次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>-<b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>