<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 > 設計應用 > 基于FPGA的參數可調RS422接口電路設計實(shí)現

基于FPGA的參數可調RS422接口電路設計實(shí)現

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

當前應用廣泛的串行通信接口標準主要有RS232,和RS485,其中RS232串行通信方式采用單端輸入輸出,傳輸距離短、通信速率低、抗干擾性能差;RS485與均采用差分串行輸入輸出,但RS485只有一對雙絞線(xiàn),只能工作于半雙工模式;采用全雙工通信模式,通過(guò)兩對雙絞線(xiàn)可實(shí)現雙向收發(fā)互不影響,且傳輸速率可達10 Mbit·s-1,傳輸距離可達2 000 m。以RS422通信協(xié)議為代表的串行通信在數據通信吞吐量較小的微處理電路中應用更加簡(jiǎn)便、靈活,尤其在遠距離信息傳輸中更發(fā)揮著(zhù)不可替代的作用。

本文引用地址:http://dyxdggzs.com/article/201610/308313.htm

1 硬件電路設計

設計主要使用Altera公司的EP3C80F78017和ADI公司的ADM2687EBRIZ。RX+、RX-為差分信號輸入端口,差分信號經(jīng)U2解差分后傳輸到U1中,通過(guò)其中數據接收模塊的處理,傳送并行數據給CPU。CPU發(fā)送的并行數據,經(jīng)U1中的數據發(fā)送模塊處理輸出待處理的TTL信號,通過(guò)U2差分處理后輸出差分信號到總線(xiàn)上,TX+、TX-為差分信號輸出端口。U1同時(shí)接收CPU輸出的控制信號,以完成對通信參數的調整。其設計原理如圖1所示。

基于FPGA的參數可調RS422接口電路設計實(shí)現

2 軟件程序設計

2.1 整體模塊

clk為全局時(shí)鐘輸入端,rst_n為全局復位端,syn_awe為寫(xiě)使能命令端,syn_are為讀使能命令端,syn_aoe為輸出使能命令端,EA為地址總線(xiàn)數據端,ED為數據總線(xiàn)數據端,rxd_xi為串行數據輸入端,txd_xo為串行數據輸出端。

divider為時(shí)鐘產(chǎn)生模塊,主要產(chǎn)生通信波特率采樣時(shí)鐘;txd為UART數據發(fā)送模塊,進(jìn)行數據并串轉換;rxd為UART數據接收模塊,進(jìn)行數據串并轉換;uart_wr_ctl為總線(xiàn)解析模塊,主要負責解析CPU總線(xiàn)命令,控制其他模塊的工作狀態(tài);uart422_state_reg為UART工作狀態(tài)模塊,綜合rxd和txd的工作狀態(tài)并輸出;uart_rdout_sel為數據輸出選擇模塊,其主要控制總工作狀態(tài)數據與UART接收數據的選擇輸出。

2.2 時(shí)鐘產(chǎn)生模塊

模塊主要為UART數據收發(fā)模塊提供了工作時(shí)鐘,根據時(shí)鐘分頻系數對輸入的全局時(shí)鐘進(jìn)行計數處理,輸出UART通信波特率16倍的分頻時(shí)鐘頻率。將時(shí)鐘分頻系數加1,除去全局時(shí)鐘頻率,則等于分頻時(shí)鐘頻率。

基于FPGA的參數可調RS422接口電路設計實(shí)現

clk為全局時(shí)鐘輸入端,rst_n為模塊復位端,enable為模塊使能端,factor為時(shí)鐘分頻系數輸入端,clk_out為分頻時(shí)鐘輸出端。本模塊采用計數分頻的設計思想,當計數值大于factor值1/2時(shí),clk_out輸出為高電平,反之則輸出低電平。

2.3 UART數據發(fā)送模塊

UART數據發(fā)送模塊設計簡(jiǎn)單,主要根據輸入的控制信號,對輸入的并行數據進(jìn)行并串轉換,并以控制信號要求的數據幀格式和波特率采用LSB模式發(fā)送出去。模塊在接收到有效的8位并行數據后,根據控制信號命令,按串行數據幀格式,起始增加1位起始位0,然后根據控制信號命令決定是否添加奇偶校驗位,再在尾部增加1位或2位停止位1,最后組成通信雙方約定的數據幀格式發(fā)送出去。

基于FPGA的參數可調RS422接口電路設計實(shí)現

clk為模塊工作時(shí)鐘輸入端,rst_n為模塊復位端,clk_en為時(shí)鐘使能端,enable為模塊使能端;ctrl_i為控制信號輸入端。其中,ctrl_i[3]控制使能發(fā)送奇偶校驗,ctrl_i[2]控制奇偶校驗選擇,ctrl_i[1]控制停止位的個(gè)數,ctrl_i[0]控制數據啟動(dòng)發(fā)送;data_i為待發(fā)送數據輸入端,frame_bits_i為幀數據位數輸入端,txd_xo為數據發(fā)送端,st at_o為發(fā)送狀態(tài)輸出端。其中,stat_o[1]為發(fā)送器完成發(fā)送標記位,star_o[0]為發(fā)送緩沖器數據載入完成標記位。UART數據發(fā)送模塊狀態(tài)機,如圖5所示。

基于FPGA的參數可調RS422接口電路設計實(shí)現

2.4 UART數據接收模塊

由于外部使用環(huán)境的影響,RX輸入線(xiàn)上可能產(chǎn)生毛刺。為減小這一影響,該模塊設計時(shí)采用“多數表決法”,具體處理方法是在一個(gè)數據位中間取3個(gè)點(diǎn)的采樣電平值,若少于2個(gè)點(diǎn)為電平“1”,則將該數據位判為電平“0”,否則判為電平“1”。

基于FPGA的參數可調RS422接口電路設計實(shí)現

clk為模塊工作時(shí)鐘輸入端,rst_n為模塊復位端,clk_en為時(shí)鐘使能端,enable為模塊使能端,rxd_xi為UART數據接收端,ctrl_i為控制信號輸入端。其中,ctrl_i[2]控制使能接收奇偶校驗,ctrl_i[1]控制奇偶校驗選擇,ctrl_i[0]控制讀UART數據緩沖器使能,frame_bits_i為幀數據位數輸入端,data_o為已接收數據輸出端,stat_o為接收狀態(tài)輸出端。其中,stat_o[3]為幀錯誤標記位,stat_o[2]為接收緩沖器數據溢出標記位,stat_o[1]為校驗錯誤標記位,stat_o[0]為數據完成接收標記位。UART數據接收模塊狀態(tài)機,如圖7所示。

基于FPGA的參數可調RS422接口電路設計實(shí)現

2.5 總線(xiàn)解析模塊

本模塊主要根據地址總線(xiàn)數據和數據總線(xiàn)數據,以及輸出使能和讀寫(xiě)使能命令信號,產(chǎn)生對其他模塊的控制信號和片選信號,即解析了總線(xiàn)命令。

基于FPGA的參數可調RS422接口電路設計實(shí)現

clk為全局時(shí)鐘輸入端,rst_n為模塊復位端,syn_awe為寫(xiě)使能命令端,syn_are為讀使能命令端,syn_aoe為輸出使能命令端,EA為地址總線(xiàn)數據端,ED為數據總線(xiàn)數據端,divider_factor為輸出時(shí)鐘產(chǎn)生模塊時(shí)鐘分頻系數,divider_enable為輸出時(shí)鐘產(chǎn)生模塊使能命令信號,rxd_clk_en為輸出UART數據接收模塊時(shí)鐘使能命令信號,rxd_ctrl_i為輸出UART數據接收模塊控制命令信號,rxd_frame_bits_i為輸出UART數據接收模塊幀數據位數,rxd_enable為輸出UART數據接收模塊使能命令信號;txd_clk_en為輸出UART數據發(fā)送模塊時(shí)鐘使能命令信號,txd_data_i為輸出UART數據發(fā)送模塊待發(fā)送數據,txd_enable為輸出UART數據發(fā)送模塊使能命令信號,txd_ctrl_i為輸出UART數據發(fā)送模塊控制命令信號,txd_frame_bits_i為輸出UART數據發(fā)送模塊幀數據位數;data_rd_cs為讀UART接收數據命令選擇端,uart_state_reg_cs為讀總工作狀態(tài)數據命令選擇端。

2.6 UART工作狀態(tài)模塊

模塊主要是將輸入的UART數據接收模塊狀態(tài)數據與UART數據發(fā)送模塊狀態(tài)數據合并為總工作狀態(tài)數據,并進(jìn)行輸出。

基于FPGA的參數可調RS422接口電路設計實(shí)現

rx_stat_o為UART數據接收模塊狀態(tài)數據的輸入端,tx_stat_o為UART數據發(fā)送模塊狀態(tài)數據的輸入端,uart422_state_out為總工作狀態(tài)數據輸出端。

2.7 數據輸出選擇模塊

模塊主要根據輸入的讀數據命令選擇信號,對輸入的總工作狀態(tài)數據和UART接收數據,進(jìn)行選擇輸出。

基于FPGA的參數可調RS422接口電路設計實(shí)現

clk為全局時(shí)鐘輸入端,uart_sta_reg_out為總工作狀態(tài)數據輸入端,data_out為UART接收數據輸入端,data_rd_cs為讀UART接收數據命令選擇端,uarrt_state_reg_cs為讀總工作狀態(tài)數據命令選擇端,EDO_422為所選數據輸出端。

3 仿真結果

在Modelsim_SE10.1b的開(kāi)發(fā)環(huán)境下,對源代碼進(jìn)行邏輯綜合仿真,其仿真結果如圖11~圖18所示。仿真結果表明,設計實(shí)現了預期的各種邏輯功能,收發(fā)數據準確無(wú)誤。圖19和圖20分別為CPU發(fā)送和接收的數據,圖中所示數據與仿真結果一致。

基于FPGA的參數可調RS422接口電路設計實(shí)現
基于FPGA的參數可調RS422接口電路設計實(shí)現

4 結束語(yǔ)

設計靈活簡(jiǎn)單,并可動(dòng)態(tài)調整通信波特率和數據位及停止位長(cháng)度,還可選擇是否使能數據奇偶校驗功能,較好地實(shí)現了RS422串行總線(xiàn)之間的數據傳輸,從而大幅增強了設計的可靠性和通用性。后期測試使用證明了,該設計具有較高的穩定性和實(shí)用性,并可用于RS422通信的諸多場(chǎng)合。



關(guān)鍵詞: FPGA RS422 接口電路

評論


相關(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>