0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么格雷碼可以輔助解決多bit跨時鐘域的問題??求解

傅里葉的貓 ? 來源:無界邏輯 ? 2024-03-08 09:02 ? 次閱讀

為什么格雷碼可以輔助解決多bit跨時鐘域的問題?讀完這篇文章,你就會進(jìn)一步了解事情的本質(zhì)。

重要的事情講三遍,由前文可知:

單bit通過兩級同步打拍可以有效的解決亞穩(wěn)態(tài)問題。

單bit通過兩級同步打拍可以有效的解決亞穩(wěn)態(tài)問題。

單bit通過兩級同步打拍可以有效的解決亞穩(wěn)態(tài)問題。

格雷碼是一種反射二進(jìn)制碼編碼方式,它兩個連續(xù)的值只相差一位(二進(jìn)制數(shù)字)。它屬于一種被稱為最小變化碼的代碼,在這種代碼中,相鄰的兩個碼字中只有一個比特發(fā)生變化。這是一個未加權(quán)的代碼,這意味著沒有為位置分配特定的權(quán)重。

生成方式如下圖所示

8b31f5d6-dce5-11ee-a297-92fbcf53809c.png

4位寬格雷碼與十進(jìn)制二進(jìn)制的對應(yīng)關(guān)系如下:

Decimal Binary Gray
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000

如4bit的格雷碼一頭一尾也是兩個相鄰碼,一個是0000,一個是1000,它們的變換也是只有1bit。是不是很熟悉。對頭,“如果是單bit變化的話,可以采用兩級打拍的方式進(jìn)行時鐘域同步”。

按照這個思路,我們是不是可以將多bit數(shù)據(jù)轉(zhuǎn)換為格雷碼?然后采用兩級打拍的方式同步呢?如果源數(shù)據(jù)是遞增的方式,可以考慮這種處理方式的可能性。如果源數(shù)據(jù)也是變化無常的,則這種思路就只能嘎然而止了。

二進(jìn)制轉(zhuǎn)格雷碼的方法:

GrayCode最高位G[N]等于二進(jìn)制碼最高位B[N],GrayCode第n位等于二進(jìn)制碼B[n+1]位異或二進(jìn)制碼B[n]位。

以4位寬碼字為例,RTL圖如下:

8b4eaca8-dce5-11ee-a297-92fbcf53809c.png

格雷碼轉(zhuǎn)二進(jìn)制碼的方法:

二進(jìn)制碼最高位B[N]等于格雷碼最高位G[N],二進(jìn)制碼第n位B[n]等于二進(jìn)制碼B[n+1]位異或格雷碼第n位G[n]。

以4位寬碼字為例,RTL圖如下:

8b56751e-dce5-11ee-a297-92fbcf53809c.png

那么,異步FIFO是如何通過格雷碼,實現(xiàn)跨時鐘域高效處理的呢?我們下期再講。

你是否有所收獲?你肯定可以參考上述原理和電路,寫出二進(jìn)制與格雷碼之間的verilog轉(zhuǎn)換代碼。

module B2G #(
   parameter N = 4
(
input    [N-1:0]  B,
output  reg  [N-1:0]  G
);


integer i;
always @(*) begin
  G[N-1]  = B[N-1];
  for(i=N-2; i>=0; i=i-1) begin
    G[i] = B[i+1] ^ B[i];
  end
end


endmodule

module G2B #(
   parameter N = 4
(
input    [N-1:0]  G,
output  reg  [N-1:0]  B
);


integer i;
always @(*) begin
  B[N-1]  = G[N-1];
  for(i=N-2; i>=0; i=i-1) begin
    B[i] = B[i+1] ^ G[i];
  end
end


endmodule




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    795

    瀏覽量

    41653
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    388

    瀏覽量

    43682
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

    59789
  • 格雷碼
    +關(guān)注

    關(guān)注

    2

    文章

    34

    瀏覽量

    13191
  • 時鐘域
    +關(guān)注

    關(guān)注

    0

    文章

    52

    瀏覽量

    9536

原文標(biāo)題:為什么格雷碼可以輔助解決多bit跨時鐘域的問題??

文章出處:【微信號:傅里葉的貓,微信公眾號:傅里葉的貓】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于時鐘信號的處理方法

    我在知乎看到了bit信號時鐘的問題,于是整理了一下自己對于時鐘
    的頭像 發(fā)表于 10-09 10:44 ?6213次閱讀

    異步FIFO設(shè)計之

    相鄰的只有1bit的差異,因此常常用于異
    的頭像 發(fā)表于 11-01 17:37 ?1419次閱讀
    異步FIFO設(shè)計之<b class='flag-5'>格</b><b class='flag-5'>雷</b><b class='flag-5'>碼</b>

    如何處理好FPGA設(shè)計中時鐘問題?

    手到擒來。這里介紹的三種方法時鐘處理方法如下:打兩拍;異步雙口 RAM;轉(zhuǎn)換。01方法
    發(fā)表于 09-22 10:24

    探尋FPGA中三種時鐘處理方法

    手到擒來。這里介紹的三種方法時鐘處理方法如下:打兩拍;異步雙口 RAM;轉(zhuǎn)換。01方法
    發(fā)表于 10-20 09:27

    三種時鐘處理的方法

    的三種方法時鐘處理方法如下:  1. 打兩拍;  2. 異步雙口RAM;  3. 轉(zhuǎn)換
    發(fā)表于 01-08 16:55

    三種FPGA界最常用的時鐘處理法式

    。對于使用異步雙口RAM來處理bit數(shù)據(jù)的時鐘,相信大家還是可以理解的。當(dāng)然,在能使用異步
    發(fā)表于 02-21 07:00

    FPGA初學(xué)者的必修課:FPGA時鐘處理3大方法

    。對于使用異步雙口RAM來處理bit數(shù)據(jù)的時鐘,相信大家還是可以理解的。當(dāng)然,在能使用異步
    發(fā)表于 03-04 09:22

    如何處理好FPGA設(shè)計中時鐘間的數(shù)據(jù)

    介紹3種時鐘處理的方法,這3種方法可以說是FPGA界最常用也最實用的方法,這三種方法包含了單bit
    發(fā)表于 07-29 06:19

    FPGA界最常用也最實用的3種時鐘處理的方法

    介紹3種時鐘處理的方法,這3種方法可以說是FPGA界最常用也最實用的方法,這三種方法包含了單bit
    發(fā)表于 11-15 20:08 ?1.4w次閱讀

    如何把二進(jìn)制轉(zhuǎn)換為?是如何判斷讀空寫滿呢?

    在傳遞讀寫時鐘的指針使用來傳遞,如何把二進(jìn)制轉(zhuǎn)換為
    的頭像 發(fā)表于 09-15 09:38 ?8332次閱讀
    如何把二進(jìn)制轉(zhuǎn)換為<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>是如何判斷讀空寫滿呢?

    CDC單bit脈沖時鐘的處理介紹

    ,基本原理就是把脈沖信號進(jìn)行展寬。 脈沖同步器應(yīng)用場景: 適用單bit脈沖信號時鐘。慢到快,快到慢均可,源脈沖間隔至少要為2個目的時鐘
    的頭像 發(fā)表于 03-22 09:54 ?3524次閱讀

    如何解決單bitbit時鐘處理問題?

    一、簡要概述: 在芯片設(shè)計過程中,一個系統(tǒng)通常是同步電路和異步電路并存,這里經(jīng)常會遇到CDC也就是時鐘處理的問題,常見的處理方法,可能大家也已經(jīng)比較熟悉了,主要有單bit
    的頭像 發(fā)表于 03-22 10:28 ?6832次閱讀

    FPGA時鐘處理方法(二)

    上一篇文章已經(jīng)講過了單bit時鐘的處理方法,這次解說一下bit
    的頭像 發(fā)表于 05-25 15:07 ?1041次閱讀
    FPGA<b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>處理方法(二)

    FPGAbit時鐘(一)

    FPGAbit時鐘適合將計數(shù)器信號轉(zhuǎn)換為
    的頭像 發(fā)表于 05-25 15:21 ?2767次閱讀
    FPGA<b class='flag-5'>多</b><b class='flag-5'>bit</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><b class='flag-5'>碼</b>(一)

    CDC時鐘處理及相應(yīng)的時序約束

    CDC(Clock Domain Conversion)時鐘分單bitbit傳輸
    的頭像 發(fā)表于 06-21 14:59 ?1837次閱讀