国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于串口通訊的Verilog設計

發布時間:2010-8-16 15:55    發布者:lavida
關鍵詞: verilog , 串口通訊
1 串口通信基本特點  

隨著多微機系統的應用和微機網絡的發展,通信功能越來越顯得重要。串行通信是在一根傳輸線上一位一位地傳送信息.這根線既作數據線又作聯絡線。串行通信作為一種主要的通信方式,由于所用的傳輸線少,并且可以借助現存的電話網進行信息傳送,因此特別適合于遠距離傳送。在串行傳輸中,通信雙方都按通信協議進行,所謂通信協議是指通信雙方的一種約定。約定對數據格式、同步方式、傳送速度、傳送步驟、糾錯方式以及控制字符定義等問題做出統一規定,通信雙方必須共同遵守。異步起止式的禎信息格式為:每禎信息由四部分組成:  

a.1位起始位。  

b.5"8位數據位。傳送順序是低位在前,高位在后.依次傳送。  

c.一位校驗位,也可以沒有。  

d.最后是1位或是2位停止位。  

FPGA(Field Pmgrammable Gate Array)現場可編程門陣列在數字電路的設計中已經被廣泛使用。這種設計方式可以將以前需要多塊集成芯片的電路設計到一塊大模塊可編程邏輯器件中,大大減少了電路板的尺寸,增強了系統的可靠性和設計的靈活性。本文詳細介紹了已在實際項目中應用的基于FPGA的串口通訊設計。  

本設計分為硬件電路設計和軟件設計兩部分,最后用仿真驗證了程序設計的正確性。  

2 系統的硬件設計  

本方案的異步串行通信的硬件接口電路圖如圖1所示,主要由四部分組成:RS-485數據發送模塊、FPGA串口模塊、MAX3223和DB9。各部分功能簡述如下:  

RS-485數據發送模塊是將前續電路的數據發送到FPGA,供本電路處理,亦即本電路的輸入。RS485是符合RS-485和RS-4225串口標準的低功耗半雙工收發器件,有3.3V和5V兩種,在本設計中選用了3.3V的器件SP3485。SP3485的內部結構示意圖如圖2所示  

在本設計中。485的7腳和8腳與前端信號相連接,用于接收輸入的數據。數據格式是這樣的:一幀數據有25位,報頭是16個高電平和1個低電平,接下來是8位有效的數據。傳輸速率為700k波特率。2腳是使能端,與FPGA的I/O口相連,由FPGA提供邏輯控制信號。1腳和4腳也與FPGA相連,由FPGA對輸入數據進行處理。  


  
圖1異步串行通信硬件接口功能框圖  



  
圖2 SP3485的內部結構示意圖  

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

1.時鐘分頻模塊。模塊的功能是用來產生所需要的數據采集時鐘和數據傳輸時鐘。系統主頻是40M的。數據采集時鐘是2.8M的,發送時鐘是11.2k。  

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

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

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

3 系統軟件設計  

FPGA模塊是本設計的主體,使用Verilog硬件描述語言進行編寫,本段代碼共有兩個子模塊,分別實現提取八位數據和串行數據發送的功能。  

下面是verilog源代碼  

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

input din; //串行輸入數據  

input clk; //時鐘信號  

input vat; 復位信號  

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

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

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

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

reg txclk; //發送數據時鐘。發數據取11.2k的波特率  

integer bitpos=7; //當前位  

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

reg[2:0]state;  

reg[4:0]counter; //用來計算報頭報尾中1的個數  

reg tag,tag1;  

reg[2:0]cnt3;  

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

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

always@ (posedge nclk or posedge rst) begin  

if(rst)  

begin  

statecountertag1=0;  

tag=0;  

indata_bufdout_bufbitpos=7;  

cnt3end  

else case(state)  

s0:begin  

tag=0;//表示數據沒有裝好  

if(din)  

begin  

counterstateif(counter==15)//如果檢測到16個1則轉入s1狀態檢測接下來的是不是0  

begin  

statecounterend  

end  

else begin  

counterstateend  

end  

s1:if(!din)//如果是0的話,轉入s2狀態,提取八位有效數據  

stateelse //否則轉到s0狀態重新檢測  

states2:if(cnt3==3)//是否采集四次數據  

begin  

cnt2indata_buf[bitpos]bitpos=bitpos-1;  

if(bitpos==-1)  

begin  

bitpos=7;stateend  

else cnt3s3:begin  

tag1=tag;  

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

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

dout_bufstateend  

endcase  

end  

//***********發送數據模塊  

reg[3:0] state_tx=0;  

always@(posedge txclk or posedge rst)  

begin  

if(rst)  

begin  

dout_serstate_txtxdone=1;  

end  

else  

case(state_tx)  

0:begin  

dout_ser1:begin  

dout_ser2:begin  

dout_ser3:begin  

dout_ser4:begin  

dout_ser5:begin  

dout_ser6:begin  

dout_ser7:begin  

dout_ser8:begin  

dout_ser9:begin  

dout_serendcase  

end  

endmodule  

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

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

由輸入輸出波形圖可以看出:本段程序實現了對輸入數據的有效數據位的提取,并按照一定的波特率進行串行輸出。程序中,波特率可以根據需要通過分頻程序進行改動。硬件電路搭建簡單,程序代碼書寫容易。數據傳輸穩定可靠,可以滿足串口通信的要求。
本文地址:http://m.qingdxww.cn/thread-21648-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
sili0937 發表于 2010-9-12 00:00:15
學習了,謝謝
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 想要避免發生災難,就用MPLAB® SiC電源仿真器!
  • 無線充電基礎知識及應用培訓教程2
  • 無線充電基礎知識及應用培訓教程3
  • 了解一下Microchip強大的PIC18-Q24 MCU系列
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲男人的天堂久久精品 | 爱福利视频 | 国产亚洲综合精品一区二区三区 | 国产三级精品三级在线专区91 | 日韩欧美在线看 | 国内精品一级毛片免费看 | 欧美另类在线观看 | 国产精品一二区 | av短片 | 四虎黄色影视 | 狠狠狠色丁香婷婷综合久久88 | 精品国产不卡一区二区三区 | 91在线观| 婷婷丁香亚洲 | 欧美www在线观看 | 日韩精品片 | 青青热久免费精品视频网站 | 国产有码视频 | 欧美日韩一区二区三区在线视频 | 99热这里只有精品首页精品 | 成人黄色在线视频 | 免费国产一级特黄久久 | 久久国内免费视频 | 欧美视频在线免费播放 | 乱一色一一区二区三区 | 亚欧精品在线观看 | 成人免费高清视频 | 国产一久久香蕉国产线看观看 | 日本在线视频免费观看 | 天天射夜夜骑 | 日本特黄在线观看免费 | 91麻豆精品国产片在线观看 | 2021国产精品自拍 | 久久国产热这里只有精品 | 青青青青草原国产免费 | 四虎影视免费永久在线观看 | www.日韩在线 | 开操网| 国产精品久久久久久久久免费 | 性色吧| 欧美啄木乌成人系列影片 |