2.設(shè)計(jì)
2.1.需求分析
此次需求提供的十分明確,給出了編碼規(guī)則及示例,明確了編解碼端口要求;仿真模塊根據(jù)設(shè)計(jì)進(jìn)行適配。
2.2.HDB3編碼模塊
對(duì)HDB3編碼規(guī)則解讀如下:
復(fù)位(RST)有效(1)時(shí),進(jìn)行初始化,輸出VALID為0、HDB3_CODE為0編碼(000)。采用異步復(fù)位、同步釋放。當(dāng)復(fù)位(RST)無(wú)效(0)時(shí)進(jìn)行編碼。
在輸入時(shí)鐘CLK的上升沿進(jìn)行轉(zhuǎn)換。
在CLK上升沿進(jìn)行判別時(shí),當(dāng)輸入READY為有效(1),DATA_IN有效,為0或1。
對(duì)READY和DATA_IN打一節(jié)拍,人為產(chǎn)生1個(gè)CLK的延時(shí)。
在CLK上升沿進(jìn)行編碼判別,DATA_IN有效為1時(shí),立即進(jìn)行編碼,若存在待轉(zhuǎn)換的0,待轉(zhuǎn)換的0也進(jìn)行編碼,并加入待輸出編碼隊(duì)列;當(dāng)DATA_IN有效為0時(shí),若存在待轉(zhuǎn)換的0的個(gè)數(shù)為(0~3)、也即當(dāng)前為第4個(gè)0,則進(jìn)行編碼,并加入待輸出編碼隊(duì)列,否則暫停編碼。
在CLK上升沿進(jìn)行編碼輸出,若存在待輸出編碼,則輸出VALID為1、HDB3_CODE為對(duì)應(yīng)編碼。
一共7種編碼形式,對(duì)應(yīng)0、±1、±B、±V;1可能被編碼為+1、-1,0可能被編碼為0、+B、-B、+V、-V。1、B極性交替(+、-交替出現(xiàn))、V極性交替;第一個(gè)編碼極性為+。當(dāng)出現(xiàn)0時(shí),若是連續(xù)的第4個(gè)0,則替換為V(極性按交替規(guī)則),然后若V極性和前一個(gè)1或B的極性不同,則將連續(xù)4個(gè)0中的第1個(gè)0替換為B且極性和V相同,其余0編碼為0.由此可見(jiàn),編碼應(yīng)在RST無(wú)效(為0)、READY有效(為1)時(shí)按照DATA_IN(0或1)、積累的待編碼0數(shù)量(0~3)、上一個(gè)1或B的極性、上一個(gè)V的極性開(kāi)展,編碼后更新待輸出編碼數(shù)量和待輸出編碼隊(duì)列。故在編碼模塊“tt_hdb3_encoder”中設(shè)置了如下信號(hào)量:
tmp_rst:std_logic_vector(1 downto 0),初始化為00,用于復(fù)位同步釋放,同時(shí)將復(fù)位輸入RST有效性由1變?yōu)?.
tmp_din,tmp_ready:std_logic,分別對(duì)DATA_IN和READY打一節(jié)拍。
tmp_dataout,深度為4、寬度為3的輸出編碼緩沖,最多4個(gè)。
flag_1BPOL、flag_VPOL:std_logic,1或B極性、V極性標(biāo)志位,表征上一個(gè)1/B/V的極性,0表示-、1表示+。
cnt_tbpo:natural range 0 to 7 := 0,待輸出編碼個(gè)數(shù),實(shí)際范圍為(0~4)。
cnt_tbc:natural range 0 to 3 := 0,待編碼0個(gè)數(shù),范圍為(0~3)。當(dāng)cnt_tbpo>0時(shí),每個(gè)clk上升沿將輸出編碼緩沖的(cnt_tbpo-1)編碼對(duì)外輸出。具體代碼實(shí)現(xiàn)使用VHDL,在ISE14.7中完成,文件為“tt_hdb3_encoder.vhd”。2.3.HDB3解碼模塊相對(duì)于編碼,HDB3解碼較為簡(jiǎn)單,輸入有效時(shí),將±1解碼為1、將0/±B/±V解碼為0;解碼模塊tt_hdb3_decoder的復(fù)位、輸入打節(jié)拍處理同編碼模塊。
具體代碼實(shí)現(xiàn)使用VHDL,在ISE14.7中完成,文件為“tt_hdb3_decoder.vhd”。2.4.編解碼仿真模塊編解碼仿真需要提供可控的輸入數(shù)據(jù)流DATA_IN。此次,通過(guò)附加test_2bit模塊來(lái)提供仿真數(shù)據(jù)流,建立一個(gè)多位的std_logic_vector(80位),在CLK時(shí)鐘上升沿從低位逐位移出。仿真準(zhǔn)備:將test_2bit、tt_hdb3_encoder、tt_hdb3_decoder例化在test_top工程下,但是將test_2bit的輸入時(shí)鐘和編解碼模塊的輸入時(shí)鐘取反,便于在編解碼仿真時(shí)輸入數(shù)據(jù)穩(wěn)定。
3.驗(yàn)證
由于預(yù)建立了仿真工程test_top,仿真文件tbw_test_top處理較為簡(jiǎn)單,設(shè)置RST和READY即可。在ISE14.7環(huán)境下使用ISim完成了仿真驗(yàn)證。
在Vivado2018.3環(huán)境下(仿真Vivado Simulator)也進(jìn)行了仿真驗(yàn)證。
資源使用情況(Target Device: xc7k325t-2ffg900,ISE14.7):
Module Name | Slices | Slice Reg | LUTs | BUFG | 說(shuō)明 |
---|---|---|---|---|---|
test_top | 1/36 | 0/47 | 1/79 | 1/1 | 測(cè)試top文件 |
Inst_test_2bit | 3/3 | 8/8 | 8/8 | 0/0 | 測(cè)試激勵(lì)文件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語(yǔ)言
+關(guān)注
關(guān)注
1文章
113瀏覽量
18110 -
編解碼
+關(guān)注
關(guān)注
1文章
140瀏覽量
19666 -
RST
+關(guān)注
關(guān)注
0文章
31瀏覽量
7427 -
CLK
+關(guān)注
關(guān)注
0文章
127瀏覽量
17241
原文標(biāo)題:【手撕代碼】HDB3編解碼
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于XC9572實(shí)現(xiàn)HDB3編解碼的完整電路及VHDL程序
基于FPGA的HDB3編解碼的實(shí)現(xiàn)
如何設(shè)計(jì)一個(gè)簡(jiǎn)單的HDB3的電路?
怎樣去設(shè)計(jì)一種基帶HDB3編解碼系統(tǒng)
基于CPLD的HDB3碼編解碼電路的設(shè)計(jì)
基于CD22103的AMI/HDB3編解碼電路設(shè)計(jì)
基于FPGA的HDB3編解碼器設(shè)計(jì)
用XC9572實(shí)現(xiàn)HDB3編解碼設(shè)計(jì)
![用XC9572實(shí)現(xiàn)<b class='flag-5'>HDB3</b><b class='flag-5'>編解碼</b>設(shè)計(jì)](https://file1.elecfans.com//web2/M00/A4/AA/wKgZomUMNTKATqQ5AAAYt_2izBs715.gif)
用XC9572實(shí)現(xiàn)HDB3編解碼設(shè)計(jì)
![用XC9572實(shí)現(xiàn)<b class='flag-5'>HDB3</b><b class='flag-5'>編解碼</b>設(shè)計(jì)](https://file1.elecfans.com//web2/M00/A5/0A/wKgZomUMNqyAanXUAAAYt_2izBs048.gif)
HDB3特點(diǎn)及編碼規(guī)則
基于Verilog HDL語(yǔ)言設(shè)計(jì)用于數(shù)字通信系統(tǒng)中的HDB3編解碼器
![基于Verilog HDL語(yǔ)言設(shè)計(jì)用于數(shù)字通信系統(tǒng)中的<b class='flag-5'>HDB3</b><b class='flag-5'>編解碼</b>器](https://file1.elecfans.com//web2/M00/A6/F3/wKgZomUMQW-AM7nCAAAU8l7SdXI739.jpg)
基于VHDL語(yǔ)言的HDB3碼編解碼器設(shè)計(jì)
![基于VHDL語(yǔ)言的<b class='flag-5'>HDB3</b>碼<b class='flag-5'>編解碼</b>器設(shè)計(jì)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論