(基于FPGA的uart发送逻辑设计)

一, 设计要求

FPAG作为下位机将要发送的数据通过串口uart232逻辑将数据发送到上位机中,并在串口助手的接收区域内显示出对应的接收数据,同时对比接收收据和发送的数据是否一直。

二, 设计分析

FPAG作为下位机将通过串行数据发送线txd将数据发送给上位机,那么txd线为下位机的输出信号。对于要发送的并行数据就作为下位机的输入信号也可以在下位机内部自行产生。

我们规定发送数据的波特率为115200,数据位8位,校验位1位(偶校验),停止位2位,采用10倍的波特率时钟作为驱动时钟。

forum.jpg

1-11

txd作为输出信号,那么我们就能够控制其在任意时刻拉低,这个任意时刻表示在要传输的并行数据确定以后再任意时刻拉低txd信号。在一次传输的过程中,要确保要传输的数据在数据位上保持稳定。

在cnt=11时,将要传输的并行数据低位给到txd=data[0];

在cnt=21时,将要传输的并行数据低位给到txd=data[1];

在cnt=31时,将要传输的并行数据低位给到txd=data[2];

在cnt=41时,将要传输的并行数据低位给到txd=data[3];

在cnt=51时,将要传输的并行数据低位给到txd=data[4];

在cnt=61时,将要传输的并行数据低位给到txd=data[5];

在cnt=71时,将要传输的并行数据低位给到txd=data[6];

在cnt=81时,将要传输的并行数据低位给到txd=data[7];

在cnt=91时,到达校验位:txd = ^data

在cnt=101时,停止位,将txd=1;

计数器cnt循环为0到119循环。

通过一个按键控制什么时候发送数据,通过按键控制计数器开始计数,rom地址变化只能够变化32次,我们通过按键控制发送rom存储的数据只进行一次发送。

假设data=10110101,按位异或结果为:1;

三:设计架构

forum.jpg

1-12

发送模块txd_ctrl设计分析:

开始标志信号控制发送计数器cnt开始循环计数,当其循环计数32次后停止计数。我们采用有限状态机进行设计

第一个状态:空闲状态,跳转条件为:对开始按键进行一次操作。

第二个状态:循环计数状态,循环计数器开始从0到119循环计数,当计数器cnt=119时,我们产生一个发送数据个数的计数信号data_cnt,进行加一,当data_cnt= 31且cnt=119时,跳转到第一个状态。

然后根据我们产生的循环计数器cnt,将要发送的并行数据由低位到高位依次给到串行数据线。