FPGA實現(xiàn)UART(RS232)串口通信
參考:正點原子ZYNQ,野火升騰FPGA

UART_RX接收端

uart_rx作為接收端,輸入信號uart_xd先延遲兩個時鐘同步到系統(tǒng)時鐘clk域中,組合邏輯檢測uart_tx的下降沿作為數(shù)據(jù)接受起始信號。設置本次傳輸波特率為9600bps,則對于50MHZ的時鐘而言,每個波特率周期計數(shù)次數(shù)為50M/9600=5208次。每當計數(shù)器記到5208次中間時,此時數(shù)據(jù)相對穩(wěn)定便于提取當前傳輸?shù)臄?shù)據(jù),把bit_flag提取一位數(shù)據(jù)標志信號拉高,bit_cnt計數(shù)一次。通過case語句,當bit_flag拉高時,把對應的數(shù)據(jù)寄存到rxd_data_t臨時寄存器內(nèi),最后uart_en傳輸有效信號拉低時把rxd_data_t賦值給rxd_data并發(fā)出去。



UART_TX發(fā)送端

TX端輸入有uart_din數(shù)據(jù)接口和uart_data_en數(shù)據(jù)有效接口,當檢測到uart_data_en為高電平時,把uart_din輸入數(shù)據(jù)寄存。計數(shù)器開始計數(shù)(0~5207),每當計數(shù)器為1時,bit_flag拉高,且bit_cnt累加。通過case語句,當bit_flag拉高,根據(jù)此時bit_cnt給uart_txd賦值,從而把數(shù)據(jù)發(fā)送出去。




UART(RS232)環(huán)回

uart_rx和uart_tx與電腦串口助手連接

FPGA按鍵控制發(fā)送字符數(shù)據(jù)給電腦


通過按鍵按下開始把char_send模塊里寫入的字符數(shù)據(jù)傳給uart_tx模塊發(fā)送給電腦串口助手

按下按鍵,F(xiàn)PGA自動發(fā)送字符數(shù)據(jù)給電腦串口(按鍵模塊沒寫好,觸發(fā)了兩次)