名稱:串行數(shù)據(jù)通信系統(tǒng)設(shè)計(jì)Verilog代碼VIVADO仿真
軟件:VIVADO
語言:Verilog
代碼功能:
一種串行數(shù)據(jù)通信系統(tǒng)
圖1為一種數(shù)據(jù)通信系統(tǒng)的示意圖,圖2為數(shù)據(jù)包格式。
圖1 數(shù)據(jù)通信系統(tǒng)示意圖
圖2 數(shù)據(jù)包格式
要求1:系統(tǒng)為同步設(shè)計(jì)。TX模塊通過串行通道向RX模塊發(fā)送串行數(shù)據(jù),串行數(shù)據(jù)中包含有效數(shù)據(jù)和無效數(shù)據(jù),串行通道僅有1位時(shí)鐘和1位數(shù)據(jù),RX應(yīng)正確接收TX發(fā)來的有效數(shù)據(jù),不接收無效數(shù)據(jù)。自定義標(biāo)記有效數(shù)據(jù)和無效數(shù)據(jù)的方法。
要求2:在要求1的基礎(chǔ)上,TX模塊以數(shù)據(jù)包的形式向RX發(fā)送串行數(shù)據(jù),TX發(fā)送的數(shù)據(jù)包來源于TS0、TS1、TS2...TSn等源節(jié)點(diǎn)模塊(n不小于3)。每個(gè)源節(jié)點(diǎn)模塊產(chǎn)生獨(dú)立的數(shù)據(jù)包,產(chǎn)生數(shù)據(jù)包的事件由輸入端口控制(該輸入端口有脈沖信號則產(chǎn)生一個(gè)數(shù)據(jù)包)。數(shù)據(jù)包格式如圖2所示。header字段為數(shù)據(jù)包包頭,格式自定義,但須包含
源節(jié)點(diǎn)模塊序號信息。payload字段為需要傳輸?shù)臄?shù)據(jù)載荷,格式自定義。TX與各源節(jié)點(diǎn)模塊之間的接口自定義。
要求3:RX接收TX發(fā)送的數(shù)據(jù)包,并對收到的數(shù)據(jù)包進(jìn)行解析,識別數(shù)據(jù)包來源于哪個(gè)源節(jié)點(diǎn)模塊,并將數(shù)據(jù)包中的payload(不含header)發(fā)送給具有相同序號的阱節(jié)點(diǎn)模塊。RS0、RS1、RS2...RSn為阱節(jié)點(diǎn)模塊(n不小于3,且與源節(jié)點(diǎn)模塊數(shù)量相同)。RX與各阱節(jié)點(diǎn)模塊之間的接口自定義。
要求4:編寫Testbench,對設(shè)計(jì)進(jìn)行仿真。其中一個(gè)源節(jié)點(diǎn)模塊產(chǎn)生的數(shù)據(jù)包中的payload應(yīng)包含學(xué)號、姓名拼音的ASCII碼等信息,并在文檔中有清晰截圖和文字說明。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
部分代碼展示:
//接收 module?RX( input?clock,//時(shí)鐘 input?data?,//數(shù)據(jù) input?reset,//復(fù)位 output?[55:0]?receive_data//接收到的有效數(shù)據(jù) ); //數(shù)據(jù)包格式: //header:ABCD //paylod:?0123456789 //使用數(shù)據(jù)接收 reg?[55:0]?data_receive; always@(posedge?clock?or?posedge?reset) if(reset) data_receive<=56'd0;//復(fù)位 else?begin data_receive[0]<=data;//將輸入的數(shù)據(jù)移入最低位 data_receive[55:1]<=data_receive[54:0];//原數(shù)據(jù)整體左移1位 end
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1361