參考我的上兩篇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等。幀定界 定義 負責協調兩個通訊實體之間的資料傳輸速...