<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 基于串口通訊的Verilog設計

基于串口通訊的Verilog設計

作者: 時(shí)間:2012-09-03 來(lái)源:網(wǎng)絡(luò ) 收藏

FPGA串口模塊是將由RS-485發(fā)送過(guò)來(lái)的數據進(jìn)行處理,提取出8位有效數據,并按異步的格式要求輸出到MAX3223的12腳。FPGA選用Xilinx公司的Spartan II系列xc2s50。此部分為該設計的主體。如上所述,輸入數據的傳輸速率為700k波特率。為了使FPGA能夠正確地對輸入數據進(jìn)行采樣,提高分辨率能力和抗干擾能力,采樣時(shí)鐘必須選用比波特率更高的時(shí)鐘,理論上至少是波特率時(shí)鐘的2倍。在本設計中選用4倍于波特率的時(shí)鐘,利用這種4倍于波特率的接收時(shí)鐘對串行數據流進(jìn)行檢測和定位采樣,接收器能在一個(gè)位周期內采樣4次。如果沒(méi)有這種倍頻關(guān)系,定位采樣頻率和傳送波特率相同,則在一個(gè)位周期中,只能采樣一次,分辨率會(huì )差。比如,為了檢測起始位下降沿的出現,在起始位的前夕采樣一次之后,下次采樣要到起始位結束前夕才進(jìn)行。而假若在這個(gè)周期期間,因某種原因恰恰使接收時(shí)鐘往后偏移了一點(diǎn)點(diǎn),就會(huì )錯過(guò)起始位。造成整個(gè)后面位的檢測和識別錯誤。針對本設計,FPGA的軟件共分了三個(gè)模塊:

1.時(shí)鐘分頻模塊。模塊的功能是用來(lái)產(chǎn)生所需要的數據采集時(shí)鐘和數據傳輸時(shí)鐘。系統主頻是40M的。數據采集時(shí)鐘是2.8M的,發(fā)送時(shí)鐘是11.2k。

2.提取數據模塊。由RS485發(fā)送過(guò)來(lái)的數據共有25位,其中只有8位是有效數據。為了發(fā)送這8位有效數據。必須先將其提取出來(lái)。提取的辦法是這樣的:通過(guò)連續檢測到的16個(gè)高電平和一個(gè)低電平。判斷8位有效數據的到來(lái)。然后按照串行數據傳輸的格式,在加上起始位和停止位后,將其存儲于輸出緩沖寄存器中。在這里,我們的串行數據輸出格式是這樣規定的,一位起始位,八位數據位,一位停止位,無(wú)校驗位。

3.串行數據輸出模塊。這一模塊相對比較簡(jiǎn)單,波特率選為11.2k,模塊的功能是在移位輸出脈沖的作用下,將輸出緩沖寄存器中的數據移位輸出。

MAX3223是實(shí)現電平轉換的芯片。由于RS-232c是用正負電壓來(lái)表示邏輯狀態(tài)。與TTL以高低電平表示邏輯狀態(tài)的規定不同。因此,為了能夠同計算機接口或終端的TTL器件連接,必須在RS-232與TTL電路之間進(jìn)行電平和邏輯關(guān)系的變換。實(shí)現這種變換的方法可用分立元件,也可用集成電路芯片。MAXIM公司的MAX3223是為滿(mǎn)足RS-232c的標準而設計的具有功耗低、波特率高、價(jià)格低等優(yōu)點(diǎn),外接電容僅為0.1uF或1uF,為雙組RS232收發(fā)器。由MAX3223的12腳輸入的數據,經(jīng)過(guò)電平轉換后由8腳輸出,再經(jīng)過(guò)DB9的TxD端輸出,由PC機接收并做后續處理。

3 系統軟件設計

FPGA模塊是本設計的主體,使用硬件描述語(yǔ)言進(jìn)行編寫(xiě),本段代碼共有兩個(gè)子模塊,分別實(shí)現提取八位數據和串行數據發(fā)送的功能。

下面是verilog源代碼

module SIMO(din,clk,rst,dout_ser);

input din; //串行輸入數據

input clk; //時(shí)鐘信號

input vat; 復位信號

reg[7:0] indata_buf; //輸入緩沖寄存器,存提取的有效位

reg[9:0] dout_buf; //輸出緩沖寄存器,加了起停位

output reg dout_ser; //串行數據輸出

reg nclk; //提取八位有效數據的采樣時(shí)鐘.是4倍于波特率的時(shí)鐘

reg txclk; //發(fā)送數據時(shí)鐘。發(fā)數據取11.2k的波特率

integer bitpos=7; //當前位

parameter s0=0,s1=1,s2=2,s3=3;

reg[2:0]state;

reg[4:0]counter; //用來(lái)計算報頭報尾中1的個(gè)數

reg tag,tag1;

reg[2:0]cnt3;

reg txdone=1'b1;//一個(gè)字節數據傳輸完畢標志

*********提取有效數據位并按串行通訊格式裝載數據********

always@ (posedge nclk or posedge rst) begin

if(rst)

begin

state=0;

counter=0;

tag1=0;

tag=0;

indata_buf=8'bz;

dout_buf=10'bz;

bitpos=7;

cnt3=0;

end

else case(state)

s0:begin

tag=0;//表示數據沒(méi)有裝好

if(din)

begin

counter=counter+1;

state=s0;

if(counter==15)//如果檢測到16個(gè)1則轉入s1狀態(tài)檢測接下來(lái)的是不是0

begin

state=s1;

counter=0;

end

end



關(guān)鍵詞: Verilog 串口通訊

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>