基于FPGA的RS232異步串行口IP核設計
1 引言
本文引用地址:http://cqxgywz.com/article/151105.htm數據采集系統常需要進行異步串行數據傳輸。目前廣泛使用的RS232異步串行接口,如8250、 NS16450等專用集成器件,雖然使用簡單,卻占用電路板面積、布線復雜等缺點。片上系統SoC(System on Chip)是以嵌入式系統為核心,以IP復用技術為基礎,集軟、硬件于一體的設計方法。使用IP復用技術,將UART集成到FPGA器件上,可增加系統的可靠性,縮小PCB板面積;其次由于IP核的特點,使用IP核可使整個系統更加靈活,還可根據需要實現功能升級、擴充和裁減。這里采用VHDL語言編寫 UART模塊,將其集成到FPGA上,與器件其他功能模塊構成片上系統SoC。
2.1 UART結構
圖1為完整的UART接口,包括由發送鎖存器、發送移位寄存器和邏輯控制組成的發送模塊(txmit),以及由接收鎖存器、接收移位寄存器和邏輯控制組成的接收模塊(rxcver)。發送模塊和接收模塊除共用復位信號、時鐘信號和并行數據線外,各自分別有輸入輸出和邏輯控制單元。

2.2 UART的幀格式
圖2為UART的幀格式。該幀格式包括線路空閑狀態(idie,高電平)、起始位 (start bit,低電平)、5~8位數據位(databit)、校驗位(parity bit,可選)和停止位(stop bit,位數可為1、1.5、2位)。該格式是由起始位和停止位實現字符同步。UART內部一般有配置寄存器,可配置數據位數(5~8位)、是否有校驗位和校驗的類型、停止位的位數等設置。

2.3 波特率時鐘的控制
由于數字量接口、工作模式選擇、實時監測接口的波特率都不同,UART核包含一個可編程的波特率發生器,可靈活配置波特率。波特率發生器給發送模塊和接收模塊提供發送數據和接收數據的基準時鐘,波特率發生器產生的時鐘mclkx16是串行數據波特率的16倍。它對系統時鐘n分頻,n=系統時鐘/波特率×16,針對不同波特率設定相應數值可得到所期望的波特率時鐘。 Script type=text/javascript>function ImgZoom(Id)//重新設置圖片大小 防止撐破表格 { var w = $(Id).width; var m = 650; if(w m){return;} else{ var h = $(Id).height; $(Id).height = parseInt(h*m/w); $(Id).width = m; } } window.onload = function() { var Imgs = $(content).getElementsByTagName(img); var i=0; for(;i
2.4 發送模塊設計
發送模塊分為空閑、載入數據、移位等3種模式。如圖3所示。當并行8位數據從總線寫入發送模塊后,發送模塊將并行數據裝入鎖存器thr中,然后在移位寄存器tsr中將數據移位,產生完整的發送序列(包括起始位,數據位,奇偶校驗位和停止位),以相應波特率從tx發送。發送模塊的輸入時鐘mclkx16是串行數據波特率的16倍,模塊內部將其16分頻后得到波特率時鐘txclk。

發送模塊部分VHDL程序如下:













評論