新聞中心

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

基于串口通訊的Verilog設(shè)計

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

else begin

counter=0;

state=s0;

end

end

s1:if(!din)//如果是0的話,轉(zhuǎn)入s2狀態(tài),提取八位有效數(shù)據(jù)

state=s2;

else //否則轉(zhuǎn)到s0狀態(tài)重新檢測

state=s0;

s2:if(cnt3==3)//是否采集四次數(shù)據(jù)

begin

cnt2=0;

indata_buf[bitpos]=din; //先進來的是高位數(shù)據(jù)

bitpos=bitpos-1;

if(bitpos==-1)

begin

bitpos=7;state=s3;end

end

else cnt3=cnt3+1;

s3:begin

tag1=tag;

tag=1'b1; //標志輸入寄存器滿。表明已把有用數(shù)據(jù)裝入寄存器

if(tag~tag1)txdone) //檢測到tag的上升沿以及txdone為高才把輸入緩沖數(shù)據(jù)放到輸出緩沖去

dout_buf={1'b1,indata_buf[7:0],1'b0};//停止位,高位,低位,起始位

state=s0;

end

endcase

end

//***********發(fā)送數(shù)據(jù)模塊

reg[3:0] state_tx=0;

always@(posedge txclk or posedge rst)

begin

if(rst)

begin

dout_ser=1'bz;

state_tx=0;

txdone=1;

end

else

case(state_tx)

0:begin

dout_ser=dout_buf[0];state_tx=state_tx+1;txdone=1'b0;end

1:begin

dout_ser=dout_buf[1];state_tx=state_tx+1;end

2:begin

dout_ser=dout_buf[2];state_tx=state_tx+1;end

3:begin

dout_ser=dout_buf[3];state_tx=state_tx+1;end

4:begin

dout_ser=dout_buf[4];state_tx=state_tx+1;end

5:begin

dout_ser=dout_buf[5];state_tx=state_tx+1;end

6:begin

dout_ser=dout_buf[6];state_tx=state_tx+1;end

7:begin

dout_ser=dout_buf[7];state_tx=state_tx+1;end

8:begin

dout_ser=dout_buf[8];state_tx=state_tx+1;end

9:begin

dout_ser=dout_buf[9];state_tx=state_tx+1;end

endcase

end

endmodule

注:兩個頻率信號nclk、txclk由相應(yīng)的分頻程序產(chǎn)生。由于篇幅所限未在文中列出。

FPGA模塊接收從RS-485發(fā)送過來的串行數(shù)據(jù)。25位為一個字符。數(shù)據(jù)的傳輸速率是700kbps,用四倍于波特率的速率進行采樣,這樣可以大大降低系統(tǒng)的噪聲。數(shù)據(jù)的串行輸出波特率選為11200bps。

由輸入輸出波形圖可以看出:本段程序?qū)崿F(xiàn)了對輸入數(shù)據(jù)的有效數(shù)據(jù)位的提取,并按照一定的波特率進行串行輸出。程序中,波特率可以根據(jù)需要通過分頻程序進行改動。硬件電路搭建簡單,程序代碼書寫容易。數(shù)據(jù)傳輸穩(wěn)定可靠,可以滿足串口通信的要求。


上一頁 1 2 3 下一頁

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

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉