2.設計
2.1.需求分析
此次需求提供的十分明確,給出了編碼規則及示例,明確了編解碼端口要求;仿真模塊根據設計進行適配。
2.2.HDB3編碼模塊
對HDB3編碼規則解讀如下:
復位(RST)有效(1)時,進行初始化,輸出VALID為0、HDB3_CODE為0編碼(000)。采用異步復位、同步釋放。當復位(RST)無效(0)時進行編碼。
在輸入時鐘CLK的上升沿進行轉換。
在CLK上升沿進行判別時,當輸入READY為有效(1),DATA_IN有效,為0或1。
對READY和DATA_IN打一節拍,人為產生1個CLK的延時。
在CLK上升沿進行編碼判別,DATA_IN有效為1時,立即進行編碼,若存在待轉換的0,待轉換的0也進行編碼,并加入待輸出編碼隊列;當DATA_IN有效為0時,若存在待轉換的0的個數為(0~3)、也即當前為第4個0,則進行編碼,并加入待輸出編碼隊列,否則暫停編碼。
在CLK上升沿進行編碼輸出,若存在待輸出編碼,則輸出VALID為1、HDB3_CODE為對應編碼。
一共7種編碼形式,對應0、±1、±B、±V;1可能被編碼為+1、-1,0可能被編碼為0、+B、-B、+V、-V。1、B極性交替(+、-交替出現)、V極性交替;第一個編碼極性為+。當出現0時,若是連續的第4個0,則替換為V(極性按交替規則),然后若V極性和前一個1或B的極性不同,則將連續4個0中的第1個0替換為B且極性和V相同,其余0編碼為0.由此可見,編碼應在RST無效(為0)、READY有效(為1)時按照DATA_IN(0或1)、積累的待編碼0數量(0~3)、上一個1或B的極性、上一個V的極性開展,編碼后更新待輸出編碼數量和待輸出編碼隊列。故在編碼模塊“tt_hdb3_encoder”中設置了如下信號量:
tmp_rst:std_logic_vector(1 downto 0),初始化為00,用于復位同步釋放,同時將復位輸入RST有效性由1變為0.
tmp_din,tmp_ready:std_logic,分別對DATA_IN和READY打一節拍。
tmp_dataout,深度為4、寬度為3的輸出編碼緩沖,最多4個。
flag_1BPOL、flag_VPOL:std_logic,1或B極性、V極性標志位,表征上一個1/B/V的極性,0表示-、1表示+。
cnt_tbpo:natural range 0 to 7 := 0,待輸出編碼個數,實際范圍為(0~4)。
cnt_tbc:natural range 0 to 3 := 0,待編碼0個數,范圍為(0~3)。當cnt_tbpo>0時,每個clk上升沿將輸出編碼緩沖的(cnt_tbpo-1)編碼對外輸出。具體代碼實現使用VHDL,在ISE14.7中完成,文件為“tt_hdb3_encoder.vhd”。2.3.HDB3解碼模塊相對于編碼,HDB3解碼較為簡單,輸入有效時,將±1解碼為1、將0/±B/±V解碼為0;解碼模塊tt_hdb3_decoder的復位、輸入打節拍處理同編碼模塊。
具體代碼實現使用VHDL,在ISE14.7中完成,文件為“tt_hdb3_decoder.vhd”。2.4.編解碼仿真模塊編解碼仿真需要提供可控的輸入數據流DATA_IN。此次,通過附加test_2bit模塊來提供仿真數據流,建立一個多位的std_logic_vector(80位),在CLK時鐘上升沿從低位逐位移出。仿真準備:將test_2bit、tt_hdb3_encoder、tt_hdb3_decoder例化在test_top工程下,但是將test_2bit的輸入時鐘和編解碼模塊的輸入時鐘取反,便于在編解碼仿真時輸入數據穩定。
3.驗證
由于預建立了仿真工程test_top,仿真文件tbw_test_top處理較為簡單,設置RST和READY即可。在ISE14.7環境下使用ISim完成了仿真驗證。
在Vivado2018.3環境下(仿真Vivado Simulator)也進行了仿真驗證。
資源使用情況(Target Device: xc7k325t-2ffg900,ISE14.7):
Module Name | Slices | Slice Reg | LUTs | BUFG | 說明 |
---|---|---|---|---|---|
test_top | 1/36 | 0/47 | 1/79 | 1/1 | 測試top文件 |
Inst_test_2bit | 3/3 | 8/8 | 8/8 | 0/0 | 測試激勵文件1 |
Inst_tt_hdb3_decoder | 4/4 | 8/8 | 3/3 | 0/0 | 解碼模塊 |
Inst_tt_hdb3_encoder | 28/28 | 31/31 | 67/67 | 0/0 | 編碼模塊 |
審核編輯:劉清
-
VHDL語言
+關注
關注
1文章
113瀏覽量
18001 -
編解碼
+關注
關注
1文章
140瀏覽量
19614 -
RST
+關注
關注
0文章
31瀏覽量
7394 -
CLK
+關注
關注
0文章
127瀏覽量
17158
原文標題:【手撕代碼】HDB3編解碼
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論