基于FPGA的CPU与保密机之间的UART通信设计
本文设计的基于FPGA的UART通信模块,旨在实现CPU与保密机之间的串行通信接口电路的设计。该模块采用自顶而下的设计方法,主要分为UART发送模块和UART接收模块两大模块。UART发送模块的设计中,FPGA采用状态机设计,并在每一位数据的中点进行数据采样。该模块可以省去16倍波特率时钟和复杂的状态机,实现同样的串口功能及性能。
UART发送模块的设计:
在CPU控制/查询保密机状态时,在固定波特率(38400 Hz)下,FPGA将CPU发送的控制信令转化成UART帧数据格式串行数据流发送给保密机。UART串口发送时序如图1所示。根据图1设计了串口发送程序,伪代码示例如下:
parameter CLK_FREQ = 60_000_000;//主时钟
parameter UART_BPS = 38400;//波特率
parameter BPS_CNT = CLK_FREQ/UART_BPS;//找到使能uart_en的上升沿
assign en_flag = (~ uart_en_d1) & uart_en_d0;
uart_en_d0 <= uart_en;
uart_en_d1 <= uart_en_d0;
//通过计数器控制tx_flag的长度为9.5个波特率周期
if (en_flag)
tx_flag <= 1'd1;
else if ((tx_cnt == 4'd9) && (clk_cnt == BPS_CNT/2 - 1'b1))
tx_flag <= 1'd0;
//一个波特率周期
if (tx_flag & clk_cnt < BPS_CNT - 1'b1)
clk_cnt <= clk_cnt + 1'd1;
//串口一次发送的比特数
if (tx_flag & clk_cnt == BPS_CNT - 1'b1)
tx_cnt <= tx_cnt + 1'd1;
UART接收模块的设计:
UART接收模块的设计与UART发送模块相似,主要区别在于UART接收模块需要在串行数据流中检测到保密机的状态信息,并将其转化成CPU可识别的格式。
本文的设计可以在卫星通信系统的信道加密业务中应用,实现CPU与保密机之间的可靠的全双工串口通信。该设计的优点是操作简单、实用性强,可以满足实际设计的需求。
关键词:FPGA;UART通信;always块