通訊原理 FPGA HDB3解碼

2021-08-17 12:04:59 字數 2492 閱讀 2929



參考我的上兩篇hdb3編碼,給出hdb3解碼的verilog實現

編碼)編碼--續)

解碼規則主要參考下面的資料

解碼主要參考資料)

(1)若3連「0」前後非零脈衝同極性,則將最後乙個非零元素譯為零,如+1000+1 就應該譯成「10000;若2連 「0」前後非零脈衝極性相同,則兩零前後都譯為零,如-100-1應譯為0000

(2)將-1、+1變成1,0就輸出0,即輸入為「10」或「01」時輸出「1」,輸入為「00」時輸出「0」

在判斷過程中需要對正在判斷的碼的前面的碼進行操作,需要使用移位暫存器(否則前面的碼已經輸出,無法更改),在判斷時需要特別注意在比較3連「0」或2連「0」時的前後脈衝極性時,要找準當前的codein和誰比,在3連「0」時要和buffer3(前面第4個數)比,在在2連「0」時要和buffer2(前面第3個數)比,這部分涉及時序的問題,和非阻塞賦值「<=」有關,大家如果弄不清楚可以畫個移位暫存器的圖或者波形圖,我在這地方耗費了不少時間,最後畫個圖就清楚自己錯在哪了

此外,還有乙個verilog的語法問題以前沒有注意到,這次程式設計遇到了,記錄一下,作為我的學習筆記,也希望大家不要犯這種錯誤。

error (10028): can't resolve multiple constant drivers for net "buffer1[0]" at decode.v(47)

原本移位暫存器寫在乙個單獨的always裡面的,這樣在判斷到需要將原來的v和b變為0時,因為是並行的,就會有兩個訊號同時要操作buffer0(或者buffer3),那麼就沒有辦法判斷到底該接收哪乙個的賦值,這是不允許的,所以將移位暫存器和對buffer的操作放在了乙個always裡,這時候,對於「<=」來說,若有多個賦值,會接收最後乙個賦值的訊號。

buffer0 <= codein; //移位暫存器延時

buffer1 <= buffer0;

buffer2 <= buffer1;

buffer3 <= buffer2;

buffer4 <= buffer3;

if( codein == 2'b01 || codein == 2'b10 )  begin  //輸入1

if( count0 == 2'b10 )  begin

if( codein == buffer2 ) begin  //此處非常關鍵

buffer0 <= 2'b00;

buffer3 <= 2'b00;

endend

else if( count0 == 2'b11 )  begin

if( codein == buffer3 )     //此處非常關鍵

buffer0 <= 2'b00;

endcount0 <= 0; 

codeout_2 <= buffer4;

endelse if( codein == 2'b00 )  begin  //0

count0 <= count0 + 1;

codeout_2 <= buffer4;

endend

endalways @ ( posedge clk )

begin

if( codeout_2 == 2'b00 )  begin

codeout <= 1'b0;

end

else if( codeout_2 == 2'b10 || codeout_2 == 2'b01 ) begin

codeout <= 1'b1;

end

end原輸入:

訊息碼:     1   0   0   1   1   0   0   0   0   1   0   1   1   0   1   0   0   0   0   1   1   1   1   0

ami碼:  +1  0   0  -1 +1  0   0   0   0  -1   0 +1 -1   0 +1   0   0   0   0 -1 +1 -1 +1   0

加v    :   +1  0   0  -1 +1  0   0   0+v-1   0 +1 -1   0 +1   0   0   0+v-1 +1 -1 +1   0

加b    :   +1  0   0  -1 +1  0   0   0+v-1   0 +1 -1   0 +1-b0   0-v-1 +1 -1 +1   0

通訊原理 FPGA HDB3碼編碼

樊昌信,曹麗娜 通訊原理 第7版 這個ppt給了很多啟發 hdb3碼 high density bipolar of order 3 三階高密度雙極性碼,它是ami碼的一種改進,目的是克服ami的缺點,使連續 0 的個數不超過3個。其編碼規則如下 1 先檢查連 0 個數,若小於等於3,則與ami碼相...

作業系統核心原理 3 程序原理(下) 程序通訊

程序作為人類的發明,自然也免不了脫離人類的習性,也有通訊的需求。如果程序之間不進行任何通訊,那麼程序所能完成的任務就要大打折扣。人類的通訊方式無外乎對白 通過聲音溝通 打手勢 寫信 發電報 擁抱等方法。同理,程序也可以通過同樣的方式來進行通訊。本篇我們就來看看程序的這些互動方式。人們最常用的通訊手段...

現代通訊網 第3章 分組交換原理

幀的定義 在分層的網路體系中,資料鏈路層的傳輸單元則稱為幀。在資料鏈路層,總是把來自上層的資料以幀為單位打包,然後在物理線路上傳輸。一幀通常包括 幀的開始和結尾的標識flag,控制欄位header,來自上層的淨負荷 網路層的資料 差錯檢測碼crc等。幀定界 定義 負責協調兩個通訊實體之間的資料傳輸速...