国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

高速串行通信常用的編碼方式-8b/10b編碼/解碼解析

OpenFPGA ? 來源:OpenFPGA ? 作者:碎碎思 ? 2021-09-26 09:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

論序

8b/10b編碼/解碼是高速串行通信,如PCle SATA(串行ATA),以及Fiber Channel中常用的編解碼方式。在發送端,編碼電路將串行輸入的8比特一組的數據轉變成10比特一組的數據并輸出;在接收端,解碼器將10比特一組的輸入數據轉換成8比特一組的輸出數據。編碼和解碼采用相同算法,整個過程就是8b/10b編碼/解碼過程。

這種編碼方式的0-1、1-0跳變豐富,0和1分布均勻,不會出現長連0和長連1。例如,8b/10b編碼比特流中連續出現的0或1的最大數量是5。這有助于為數據流提供DC平衡,可以為接收端時鐘恢復提供足夠的比特翻轉(1-0,0-1)。在1983年,這種編碼方式首次由IBM工程師奧爾?韋迪莫和皮特?弗蘭斯科發明,之后IBM申請了發明專利。

8b/10b編碼方式

進行8b/10b編碼時,輸入的每8比特數據轉化為10比特數據,這10比特數據稱為一個編碼符號或編碼字符,如圖6.20所示。

編碼時,將8比特數據分成兩個子組,即低5位子組和高3位子組。低5位編碼后為一個6比特值,高3位編碼后為一個4比特值,此后將二者拼接,可以得到一個10比特字符。對于8比特輸人,會有256種可能的組合,然而對于10比特,就會有1024(1K)種組合,除了有過多連0和連1的編碼組合被丟棄不用外,還要選擇部分10比特組合作為控制字符,或者稱為K字符。

這些特殊的控制符具有不同用途,例如,作為包的開始標識、包的結束標識,以及特殊COMMA符號。還有一些編碼字符既不屬于控制字符也不屬于和256種8比特輸入數據對應的編碼字符,它們都是非法字符,正常工作時不會出現在編碼比特字符流中。在數據傳輸出錯時可能會出現非法字符。圖6.20詳細介紹了低5比特和高3比特轉換成10比特編碼字符的具體方式。

多字節8b/10b編碼

在一些應用中,每個時鐘周期需要對多字節進行編碼。圖6.21是對16比特數據進行8b/10b編碼的一種實現方案,它可以在每個時鐘周期進行兩字節數據的8b/10b編碼。

56a6f75a-1111-11ec-8fb8-12bb97331649.png

編碼器1輸岀的disparity信號被當成編碼器2的disparity輸入。兩個編碼器的編碼和disparity計算在相同的時鐘周期內進行。最終的disparity(編碼器2的輸出)經過一個寄存器后作為16比特數據的disparity,也就是當前運行的disparity,同時它還作為編碼器1下一個時鐘周期的disparity輸入。

disparity選擇8b/10b編碼方案

當進行8b/10b編碼的并行數據字節數增加時(例如,4字節),編碼延遲會增大,從而使編碼器不能滿足高速工作時的定時要求。對于四級級聯譯碼器來說,最后一級的disparity和10b編碼結果的計算延遲最大。計算disparity的邏輯處于關鍵延遲路徑上,只有等前面各級計算結束后才能計算組后一級的disparity值。改進定時特性,提高編碼速度的一種重要方法是采用disparity選擇機制。

圖6.22給出了disparity選擇編碼電路的結構。對除第一級之外的每一級編碼器,單獨計算每一級的disparity值,包括一個正disparity值和一個負disparity值,最終的disparity值需要根據前一級的輸出進行選擇,由于選擇器的延遲小于disparity計算邏輯,因此這種方法可以提高電路的工作速度。這種方案由于增加了disparity十算電路的數量,因此會消耗更多的邏輯電路資源。

56c86bc4-1111-11ec-8fb8-12bb97331649.png

代碼舉例

端口說明

##Encoder###Ports

*`clk`-inputClock
*`rst`-inputReset(Active-HIGH)
*`en`-inputEnable(Active-HIGH)
*`kin`-K-orD-symbolselection(`1-K`,`0-D`)
*`din`-8-bitdatainput
*`dout`-10-bitdataoutput
*`disp`-Disparityflagoutput
*`kin_err`-K-symbolerroroutput

##Decoder###Ports

*`clk`-inputClock
*`rst`-inputReset(Active-HIGH)
*`en`-inputEnable(Active-HIGH)
*`din`-10-bitdatainput
*`dout`-8-bitdataoutput
*`kout`-K-orD-symbolflag(`1-K`,`0-D`)
*`code_err`-Codeerrorflagoutput
*`disp`-Disparityoutput
*`disp_err`-Disparityerrorflagoutput

decoder_8b10b.v

`timescale1ns/1ps
//////////////////////////////////////////////////////////////////////////////////
//Company:
//Engineer:DmitryMatyunin(https://github.com/mcjtag)
//
//CreateDate:06.04.20212330
//DesignName:
//ModuleName:decoder_8b10b
//ProjectName:v8b10b
//TargetDevices:
//ToolVersions:
//Description:
//
//Dependencies:
//
//Revision:
//Revision0.01-FileCreated
//AdditionalComments:
//
//////////////////////////////////////////////////////////////////////////////////

moduledecoder_8b10b(
inputwireclk,
inputwirerst,
inputwireen,
inputwire[9:0]din,
outputwire[7:0]dout,
outputwirekout,
outputwirecode_err,
outputwiredisp,
outputwiredisp_err
);

reg[7:0]do;
regk;
regce;
reg[2:0]e;
regp;
reg[3:0]pe;
wire[9:0]d;

assignd=din;
assigndisp_err=pe?1'b1:1'b0;
assigndout=do;
assignkout=k;
assigncode_err=ce;
assigndisp=p;

always@(posedgeclk)begin
if(rst)begin
k<=?0;
??do<=?8'b0;
endelsebegin
if(en==1'b1)begin
k<=?(((d[7]&d[6]&d[5]&d[4])|(!d[7]&!d[6]&!d[5]&!d[4]))|(((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&(!d[5]&d[4]&d[2]&d[1]&d[0]))|(((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&(d[5]&!d[4]&!d[2]&!d[1]&!d[0])));
???do[7]<=?((d[0]^d[1])&!((!d[3]&d[2]&!d[1]&d[0]&!(!(d[7]|d[6]|d[5]|d[4])))|(!d[3]&d[2]&d[1]&!d[0]&(!(d[7]|d[6]|d[5]|d[4])))|(d[3]&!d[2]&!d[1]&d[0]&!(!(d[7]|d[6]|d[5]|d[4])))|(d[3]&!d[2]&d[1]&!d[0]&(!(d[7]|d[6]|d[5]|d[4])))))|(!d[3]&d[2]&d[1]&d[0])|(d[3]&!d[2]&!d[1]&!d[0]);
???do[6]<=?(d[0]&!d[3]&(d[1]|!d[2]|!(!(d[7]|d[6]|d[5]|d[4]))))|(d[3]&!d[0]&(!d[1]|d[2]|(!(d[7]|d[6]|d[5]|d[4]))))|(!(!(d[7]|d[6]|d[5]|d[4]))&d[2]&d[1])|((!(d[7]|d[6]|d[5]|d[4]))&!d[2]&!d[1]);
???do[5]<=?(d[0]&!d[3]&(d[1]|!d[2]|(!(d[7]|d[6]|d[5]|d[4]))))|(d[3]&!d[0]&(!d[1]|d[2]|!(!(d[7]|d[6]|d[5]|d[4]))))|((!(d[7]|d[6]|d[5]|d[4]))&d[2]&d[1])|(!(!(d[7]|d[6]|d[5]|d[4]))&!d[2]&!d[1]);
???do[4]<=?d[5]^(((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!d[5])|(!d[7]&!d[6]&!d[5]&!d[4])|(!d[9]&!d[8]&!d[5]&!d[4]))|((((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[9]&!d[7]&(!(d[5]^d[4])))|(((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))?&?!d[9]?&?!d[8]))&!d[4]))|((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&d[6]&d[5]&d[4])|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[8]&!d[7]&(!(d[5]^d[4])))));
???do[3]<=?d[6]^(((d[9]&d[8]&d[5]&d[4])|(!d[7]&!d[6]&!d[5]&!d[4])|(((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&d[4]))|((((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&d[9]&d[7]&(!(d[5]^d[4])))|(((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!d[5]))|((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&d[6]&d[5]&d[4])|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[8]&!d[7]&(!(d[5]^d[4])))));
???do[2]<=?d[7]^(((((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[9]&!d[7]&(!(d[5]^d[4])))|(((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!d[5]))|((((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&d[4])|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&d[8]&d[7]&(!(d[5]^d[4])))|(((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&d[6]&d[5]&d[4]))|((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!d[5])|(!d[7]&!d[6]&!d[5]&!d[4])|(!d[9]&!d[8]&!d[5]&!d[4])));
???do[1]<=?d[8]^(((d[9]&d[8]&d[5]&d[4])|(!d[7]&!d[6]&!d[5]&!d[4])|(((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&d[4]))|((((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&d[4])|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&d[8]&d[7]&(!(d[5]^d[4])))|(((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&d[6]&d[5]&d[4]))|((((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&d[9]&d[7]&(!(d[5]^d[4])))|(((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!d[5])));
???do[0]<=?d[9]^(((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&d[6]&d[5]&d[4])|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[8]&!d[7]&(!(d[5]^d[4]))))|((((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[9]&!d[7]&(!(d[5]^d[4])))|(((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!d[5]))|((d[9]&d[8]&d[5]&d[4])|(!d[7]&!d[6]&!d[5]&!d[4])|(((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&d[4])));
??end
?end
end
???
always?@(posedge?clk)?begin
?if(rst)begin
p<=?1'b0;
pe<=?4'hF;
ce<=?1'b1;
e=3'b000;
endelsebegin
if(en==1'b1)begin
p<=?(((!((d[3]&d[2])|(!d[3]&!d[2])))&d[1]&d[0])|(!((d[1]&d[0])|(!d[1]&!d[0]))&d[3]&d[2]))|(((d[5]&d[4]&!(((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!p))|((((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&p))&(d[5]|d[4]))|(((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&p))&((d[3]&d[2]&!d[1]&!d[0])|(!d[3]&!d[2]&d[1]&d[0])|(!((d[3]&d[2])|(!d[3]&!d[2]))&!((d[1]&d[0])|(!d[1]&!d[0])))))?;
???pe[0]?<=?((p&((((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&(d[5]|d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&d[5]&d[4])))|(((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!(d[5]&d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[5]&!d[4]))&!p))|((p&!((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!(d[5]&d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[5]&!d[4]))&d[3]&d[2]));
???pe[1]?<=?((p&d[9]&d[8]&d[7]))|((p&!((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!(d[5]&d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[5]&!d[4]))&(((!((d[3]&d[2])|(!d[3]&!d[2])))&d[1]&d[0])|(!((d[1]&d[0])|(!d[1]&!d[0]))&d[3]&d[2]))));
???pe[2]?<=?((!p&!((((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&(d[5]|d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&d[5]&d[4]))&!d[3]&!d[2]))|((!p&!d[9]&!d[8]&!d[7]));
???pe[3]?<=?((!p&!((((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&(d[5]|d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&d[5]&d[4]))&((!((d[3]&d[2])|(!d[3]&!d[2]))&!d[1]&!d[0])|(!((d[1]&d[0])|(!d[1]&!d[0]))&!d[3]&!d[2]))))|((((((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&(d[5]|d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&d[5]&d[4]))&(((!((d[3]&d[2])|(!d[3]&!d[2])))&d[1]&d[0])|(!((d[1]&d[0])|(!d[1]&!d[0]))&d[3]&d[2])))|(((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!(d[5]&d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[5]&!d[4]))&((!((d[3]&d[2])|(!d[3]&!d[2]))&!d[1]&!d[0])|(!((d[1]&d[0])|(!d[1]&!d[0]))&!d[3]&!d[2]))));
???e[0]?<=?((d[9]&d[8]&d[7]&d[6])|(!d[9]&!d[8]&!d[7]&!d[6]))|((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!d[5]&!d[4]))|((((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&d[5]&d[4]))|((d[3]&d[2]&d[1]&d[0])|(!d[3]&!d[2]&!d[1]&!d[0]))|((d[5]&d[4]&d[3]&d[2]&d[1])|(!d[5]&!d[4]&!d[3]&!d[2]&!d[1]))|((d[5]&!d[4]&d[2]&d[1]&d[0])|(!d[5]&d[4]&!d[2]&!d[1]&!d[0]))|((((d[5]&d[4]&!d[2]&!d[1]&!d[0])|(!d[5]&!d[4]&d[2]&d[1]&d[0]))&!((d[7]&d[6]&d[5])|(!d[7]&!d[6]&!d[5]))))|((!((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&d[5]&!d[4]&!d[2]&!d[1]&!d[0]))|((!((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!d[5]&d[4]&d[2]&d[1]&d[0]));
???e[1]?<=?((((((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&(d[5]|d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&d[5]&d[4]))&(((!((d[3]&d[2])|(!d[3]&!d[2])))&d[1]&d[0])|(!((d[1]&d[0])|(!d[1]&!d[0]))&d[3]&d[2])))|(((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!(d[5]&d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[5]&!d[4]))&((!((d[3]&d[2])|(!d[3]&!d[2]))&!d[1]&!d[0])|(!((d[1]&d[0])|(!d[1]&!d[0]))&!d[3]&!d[2]))))|((d[3]&d[2]&!d[1]&!d[0]&((((!((d[9]&d[8])|(!d[9]&!d[8]))&d[7]&d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&d[9]&d[8]))&(d[5]|d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&d[5]&d[4]))))|((!d[3]&!d[2]&d[1]&d[0]&((((!((d[9]&d[8])|(!d[9]&!d[8]))&!d[7]&!d[6])|(!((d[7]&d[6])|(!d[7]&!d[6]))&!d[9]&!d[8]))&!(d[5]&d[4]))|(((d[9]&d[8]&!d[7]&!d[6])|(d[7]&d[6]&!d[9]&!d[8])|(!((d[9]&d[8])|(!d[9]&!d[8]))&!((d[7]&d[6])|(!d[7]&!d[6]))))&!d[5]&!d[4]))));
???e[2]?<=?((d[9]&d[8]&d[7]&!d[5]&!d[4]&((!d[3]&!d[2])|((!((d[3]&d[2])|(!d[3]&!d[2]))&!d[1]&!d[0])|(!((d[1]&d[0])|(!d[1]&!d[0]))&!d[3]&!d[2])))))|((!d[9]&!d[8]&!d[7]&d[5]&d[4]&((d[3]&d[2])|(((!((d[3]&d[2])|(!d[3]&!d[2])))&d[1]&d[0])|(!((d[1]&d[0])|(!d[1]&!d[0]))&d[3]&d[2])))))|((d[7]&d[6]&d[5]&d[4]&!d[3]&!d[2]&!d[1]))|((!d[7]&!d[6]&!d[5]&!d[4]&d[3]&d[2]&d[1]));
???ce?<=?e???1'b1:1'b0;
end
end
end

endmodule

encoder_8b10.v

`timescale1ns/1ps
//////////////////////////////////////////////////////////////////////////////////
//Company:
//Engineer:DmitryMatyunin(https://github.com/mcjtag)
//
//CreateDate:06.04.20212328
//DesignName:
//ModuleName:encoder_8b10
//ProjectName:v8b10b
//TargetDevices:
//ToolVersions:
//Description:
//
//Dependencies:
//
//Revision:
//Revision0.01-FileCreated
//AdditionalComments:
//
//////////////////////////////////////////////////////////////////////////////////

moduleencoder_8b10
(
inputwireclk,
inputwirerst,
inputwireen,
inputwirekin,
inputwire[7:0]din,
outputwire[9:0]dout,
outputwiredisp,
outputwirekin_err
);

regp;
regke;
reg[18:0]t;
reg[9:0]do;
wire[7:0]d;
wirek;

assignd=din;
assignk=kin;

assigndout=do;
assigndisp=p;
assignkin_err=ke;

always@(posedgeclk)begin
if(rst)begin
p<=?1'b0;
ke<=?1'b0;
do<=?10'b0;
endelsebegin
if(en==1'b1)begin
p<=?((d[5]&d[6]&d[7])|(!d[5]&!d[6]))^(p^(((d[4]&d[3]&!d[2]&!d[1]&!d[0])|(!d[4]&!((d[0]&d[1]&!d[2]&!d[3])|(d[2]&d[3]&!d[0]&!d[1])|(!((d[0]&d[1])|(!d[0]&!d[1]))&!((d[2]&d[3])|(!d[2]&!d[3]))))&!((!((d[0]&d[1])|(!d[0]&!d[1]))&d[2]&d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&d[0]&d[1]))))|(k|(d[4]&!((d[0]&d[1]&!d[2]&!d[3])|(d[2]&d[3]&!d[0]&!d[1])|(!((d[0]&d[1])|(!d[0]&!d[1]))&!((d[2]&d[3])|(!d[2]&!d[3]))))&!((!((d[0]&d[1])|(!d[0]&!d[1]))&!d[2]&!d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&!d[0]&!d[1]))))));
???ke?<=?(k&(d[0]|d[1]|!d[2]|!d[3]|!d[4])&(!d[5]|!d[6]|!d[7]|!d[4]|!((!((d[0]&d[1])|(!d[0]&!d[1]))&d[2]&d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&d[0]&d[1]))));?
???do[9]<=?t[12]^t[0];
???do[8]<=?t[12]^(t[1]|t[2]);
???do[7]<=?t[12]^(t[3]|t[4]);
???do[6]<=?t[12]^t[5];
???do[5]<=?t[12]^(t[6]&t[7]);
???do[4]<=?t[12]^(t[8]|t[9]|t[10]|t[11]);
???do[3]<=?t[13]^(t[15]&!t[14]);
???do[2]<=?t[13]^t[16];
???do[1]<=?t[13]^t[17];
???do[0]<=?t[13]^(t[18]|t[14]);
??end
?end
end
??
always?@(posedge?clk)?begin
?if(rst)begin
t<=?0;
?end?elsebegin
if(en==1'b1)begin
t[0]<=?d[0];
???t[1]?<=?d[1]&!(d[0]&d[1]&d[2]&d[3]);
???t[2]?<=?(!d[0]&!d[1]&!d[2]&!d[3]);
???t[3]?<=?(!d[0]&!d[1]&!d[2]&!d[3])|d[2];
???t[4]?<=?d[4]&d[3]&!d[2]&!d[1]&!d[0];
???t[5]?<=?d[3]&!(d[0]&d[1]&d[2]);
???t[6]?<=?d[4]|((!((d[0]&d[1])|(!d[0]&!d[1]))&!d[2]&!d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&!d[0]&!d[1]));
???t[7]?<=?!(d[4]&d[3]&!d[2]&!d[1]&!d[0]);
???t[8]?<=?(((d[0]&d[1]&!d[2]&!d[3])|(d[2]&d[3]&!d[0]&!d[1])|(!((d[0]&d[1])|(!d[0]&!d[1]))&!((d[2]&d[3])|(!d[2]&!d[3]))))&!d[4])|(d[4]&(d[0]&d[1]&d[2]&d[3]));
???t[9]?<=?d[4]&!d[3]&!d[2]&!(d[0]&d[1]);
???t[10]?<=?k&d[4]&d[3]&d[2]&!d[1]&!d[0];
???t[11]?<=?d[4]&!d[3]&d[2]&!d[1]&!d[0];
???t[12]?<=?(((d[4]&d[3]&!d[2]&!d[1]&!d[0])|(!d[4]&!((d[0]&d[1]&!d[2]&!d[3])|(d[2]&d[3]&!d[0]&!d[1])|(!((d[0]&d[1])|(!d[0]&!d[1]))&!((d[2]&d[3])|(!d[2]&!d[3]))))&!((!((d[0]&d[1])|(!d[0]&!d[1]))&d[2]&d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&d[0]&d[1]))))&!p)|((k|(d[4]&!((d[0]&d[1]&!d[2]&!d[3])|(d[2]&d[3]&!d[0]&!d[1])|(!((d[0]&d[1])|(!d[0]&!d[1]))&!((d[2]&d[3])|(!d[2]&!d[3]))))&!((!((d[0]&d[1])|(!d[0]&!d[1]))&!d[2]&!d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&!d[0]&!d[1])))|(!d[4]&!d[3]&d[2]&d[1]&d[0]))&p);
???t[13]?<=?(((!d[5]&!d[6])|(k&((d[5]&!d[6])|(!d[5]&d[6]))))&!(p^(((d[4]&d[3]&!d[2]&!d[1]&!d[0])|(!d[4]&!((d[0]&d[1]&!d[2]&!d[3])|(d[2]&d[3]&!d[0]&!d[1])|(!((d[0]&d[1])|(!d[0]&!d[1]))&!((d[2]&d[3])|(!d[2]&!d[3]))))&!((!((d[0]&d[1])|(!d[0]&!d[1]))&d[2]&d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&d[0]&d[1]))))|(k|(d[4]&!((d[0]&d[1]&!d[2]&!d[3])|(d[2]&d[3]&!d[0]&!d[1])|(!((d[0]&d[1])|(!d[0]&!d[1]))&!((d[2]&d[3])|(!d[2]&!d[3]))))&!((!((d[0]&d[1])|(!d[0]&!d[1]))&!d[2]&!d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&!d[0]&!d[1])))))))|((d[5]&d[6])&(p^(((d[4]&d[3]&!d[2]&!d[1]&!d[0])|(!d[4]&!((d[0]&d[1]&!d[2]&!d[3])|(d[2]&d[3]&!d[0]&!d[1])|(!((d[0]&d[1])|(!d[0]&!d[1]))&!((d[2]&d[3])|(!d[2]&!d[3]))))&!((!((d[0]&d[1])|(!d[0]&!d[1]))&d[2]&d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&d[0]&d[1]))))|(k|(d[4]&!((d[0]&d[1]&!d[2]&!d[3])|(d[2]&d[3]&!d[0]&!d[1])|(!((d[0]&d[1])|(!d[0]&!d[1]))&!((d[2]&d[3])|(!d[2]&!d[3]))))&!((!((d[0]&d[1])|(!d[0]&!d[1]))&!d[2]&!d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&!d[0]&!d[1])))))));
???t[14]?<=?d[5]&d[6]&d[7]&(k|(p?(!d[4]&d[3]&((!((d[0]&d[1])|(!d[0]&!d[1]))&d[2]&d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&d[0]&d[1]))):(d[4]&!d[3]&((!((d[0]&d[1])|(!d[0]&!d[1]))&!d[2]&!d[3])|(!((d[2]&d[3])|(!d[2]&!d[3]))&!d[0]&!d[1])))));
???t[15]?<=?d[5];
???t[16]?<=?d[6]|(!d[5]&!d[6]&!d[7]);
???t[17]?<=?d[7];
???t[18]?<=?!d[7]&(d[6]^d[5]);
??end
?end
end

endmodule


VHDL文件詳見:

https://github.com/suisuisi/8b10b_encdec

其他常用編碼方式

8b/10b編碼為時鐘恢復提供了足夠的0與1翻轉,但編碼效率較低,每傳輸10比特數據,只有8比特為有效數據,編碼效率只有80%,有20%為輔助比特。64b/66b編碼中的0、1分布不如8b/10b均勻,但編碼效率高,輔助比特少,每66比特中只有2比特是輔助比特,所占比例僅為3%。64b/66b被用于10Gbit以太網中。本部分將詳細介紹64b/66b編碼。

64b/66b編碼機制

66比特的編碼塊由2比特的前導碼和64比特數據組成。

  • 當前導碼為“01”時,后面的64比特為數據;
  • 當前導碼為“10”時,其后的8比特為類型字段,后56比特為數據;
  • 其他兩個值“11”和“00”未被使用。

前導碼(10和01)可以保證每66比特中至少有一次比特翻轉,可用于時鐘恢復。與64b/66b編碼電路相連的還有一個擾碼電路。

128b/130b編碼機制

128b/130b編碼用于PCIe Gen3以取代8b/l0b編碼/解碼。8b/10b編碼中除了數據編碼字符外還有很多控制字符,用于表示包的開始始、包的結束等。然而,該編碼方式編碼效率較低,輔助比特占了20%。128b/130b編碼中輔助比特很少(約為1.5%)。
128比特的數據塊加上2比特的同步頭就可以構成一個130比特的編碼塊。同步頭編碼為2‘b01時表示后面跟隨的是訓練順序組(training ordered set),2b'10表示后面的是數據(TLP、DLLP及空閑數據),2’bl1和2’b00被保留。由于128b/130b編碼體制中沒有額外的控制字符,因此需要使用其他機制來指出包的開始和結束。

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

    關注

    45

    文章

    3953

    瀏覽量

    142644
  • 寄存器
    +關注

    關注

    31

    文章

    5608

    瀏覽量

    129994
  • 數據
    +關注

    關注

    8

    文章

    7335

    瀏覽量

    94771

原文標題:高速串行通信常用的編碼方式-8b/10b編碼/解碼

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    風華貼片電阻料號編碼的詳細解析

    風華貼片電阻的料號編碼通常遵循一套系統化的命名規則,涵蓋了產品類型、封裝尺寸、溫度系數、阻值、精度、額定功率及包裝方式等關鍵參數。以下是對風華貼片電阻料號編碼的詳細解析: 一、
    的頭像 發表于 03-04 16:23 ?69次閱讀
    風華貼片電阻料號<b class='flag-5'>編碼</b>的詳細<b class='flag-5'>解析</b>

    深入解析LM4546B AC '97多通道音頻編解碼

    深入解析LM4546B AC '97多通道音頻編解碼器 在當今的電子世界中,音頻編解碼器扮演著至關重要的角色,尤其是在PC系統、便攜式設備以及汽車電子等領域。今天,我們要深入探討一款由
    的頭像 發表于 02-03 10:50 ?187次閱讀

    深入解析CDx4HC147與CD74HCT147:高速CMOS優先編碼器的卓越之選

    深入解析CDx4HC147與CD74HCT147:高速CMOS優先編碼器的卓越之選 在電子設計領域,優先編碼器是一種常用的邏輯器件,用于將多
    的頭像 發表于 01-16 15:00 ?427次閱讀

    深入解析CD4514B與CD4515B:4位鎖存/4到16線解碼

    深入解析CD4514B與CD4515B:4位鎖存/4到16線解碼器 在電子設計領域,解碼器是實現數字信號轉換和控制的重要組件。今天,我們將深
    的頭像 發表于 01-16 14:25 ?272次閱讀

    CD4028B芯片:解碼功能與應用的深度解析

    CD4028B芯片:解碼功能與應用的深度解析 在電子設計領域,解碼器芯片是實現代碼轉換和信號處理的關鍵組件。今天,我們將深入探討德州儀器(Texas Instruments)的CD40
    的頭像 發表于 01-16 13:55 ?206次閱讀

    探索Broadcom AEAT - 901B系列增量式磁編碼器:特性、參數與應用

    探索Broadcom AEAT - 901B系列增量式磁編碼器:特性、參數與應用 在電子工程師的日常設計工作中,編碼器猶如一雙雙“電子眼睛”,為設備的運動控制和位置檢測提供關鍵信息。今天,我們就來
    的頭像 發表于 12-30 14:05 ?332次閱讀

    探索AEAT - 901B系列增量式磁編碼器:特性、應用與設計要點

    探索AEAT - 901B系列增量式磁編碼器:特性、應用與設計要點 在電子工程師的日常設計工作中,編碼器是實現精確運動控制和角度檢測不可或缺的關鍵組件。今天,我們就來深入探討一下Broadcom
    的頭像 發表于 12-30 11:50 ?451次閱讀

    BE30B4中空電渦流編碼器-DATASHEET

    電子發燒友網站提供《BE30B4中空電渦流編碼器-DATASHEET .pdf》資料免費下載
    發表于 12-23 11:21 ?1次下載

    基于8位Booth編碼的公式推導

    我們使用基于8位的Booth編碼對乘法器進行修改 首先介紹一下基于4位的Booth編碼公式推導: 對于P=A*B來說,將B以2進制碼表示,可
    發表于 10-22 07:14

    Qwen3-VL 4B/8B全面適配,BM1684X成邊緣最佳部署平臺!

    算能BM1684X上完成Qwen3-VL4B/8B模型的適配,推理速度13.7/7.2tokens/s,使其成為邊緣部署多模態大模型的最佳選擇。近日,阿里千問正式開源Qwen3-VL系列的4B
    的頭像 發表于 10-16 18:00 ?2673次閱讀
    Qwen3-VL 4<b class='flag-5'>B</b>/<b class='flag-5'>8B</b>全面適配,BM1684X成邊緣最佳部署平臺!

    JEDSD204B標準verilog實現-協議演進

    關聯轉換器采樣率,無需外部幀時鐘輸入)。 最大串行數據速率 最高3.125 Gbps(受限于8b/10b編碼及早期SerDes技術)。 最高6.25 Gbps(優化
    發表于 09-05 21:18

    使用 NPU 插件對量化的 Llama 3.1 8b 模型進行推理時出現“從 __Int64 轉換為無符號 int 的錯誤”,怎么解決?

    安裝了 OpenVINO? GenAI 2024.4。 使用以下命令量化 Llama 3.1 8B 模型: optimum-cli export openvino -m meta-llama
    發表于 06-25 07:20

    HIPERFACE DSL編碼通信協議介紹

    應用的首選。HIPERFACE DSL是由SICK AG開發的串行通信協議,專為編碼器與控制器之間的數據傳輸而設計。其中,“DSL”即“Digital Synchronous Link”(數字同步鏈路),突出了其
    的頭像 發表于 05-23 14:16 ?2182次閱讀
    HIPERFACE DSL<b class='flag-5'>編碼</b>器<b class='flag-5'>通信</b>協議介紹

    解碼未來:數字編碼器如何重塑智能世界

    標題:《解碼未來:數字編碼器如何重塑智能世界》 在數字化浪潮席卷全球的今天,每一個微小的信號轉換都可能成為推動技術革命的關鍵。而在這場無聲的變革中,數字編碼器——這個看似不起眼的技術組件,正以
    的頭像 發表于 04-07 08:44 ?777次閱讀
    <b class='flag-5'>解碼</b>未來:數字<b class='flag-5'>編碼</b>器如何重塑智能世界

    智多晶XSTC_8B10B IP介紹

    XSTC_8B10B IP(XSTC:XiST Transmission Channel)是智多晶開發的一個靈活的,輕量級的高速串行通信的IP。IP在具備SerDes(單通道或多通道)
    的頭像 發表于 04-03 16:30 ?1400次閱讀
    智多晶XSTC_<b class='flag-5'>8B10B</b> IP介紹