本程序发送模块与接收模块分开来写,波特率为9600,当然也可以由用户自行设置
现象:用串口精灵送向FPGA发一个0~7的自然数,在串口精灵返回的值比你输入的值大2
(程序是基于周立功公司的fusion_startkit板子,有这块板的朋友可以直接下载程序)
具体功能如下:
/******UART_send.v************************
**模块名称:UART_send
**功能描述:UART串口发送程序
module UART_send(
//input
clk, //时钟
rst, //高电平复位
WR, //写信号
Datain,
//output
clkout, //输出时钟
TXD, //UART发送引脚
TI //发送中断
);
............
/********************波特率发生进程*****************************************************/
parameter frequency_in=48000000; //输入时钟
parameter baud_rate =9600; //设置波特率
parameter cout=frequency_in/baud_rate; //根据具体时钟和波特率设置分频系数(5000)
..
.
串口send使用 : 本模块有三个输入,三个输出
其中clk为输入时钟(采用48M)
rst高电平复位,平时工作状态为"0"
WR 高电平时写入要发送的字节
低电平(下降沿开始)发送数据
Datain为8位输入数据
clkout为输出备用时钟=波特率
TXD, //UART发送引脚
TI //发送中断标志位,当TI=1表示发送完毕,或者等待状态(等待新的字节输入)
//***********************************************************************************************
/************************* UART_rec.v**********************************
**模块名称:UART_rec
**功能描述:UART串口接收模块,接收采样率为波特率的的16倍
module UART_rec(
//input
clk,
RXD,
//output
clkout,
Dataout,
RI
);
当RI=1,表示接收完一个字节,告诉你可以再接收下一个字节,RXD为接收管脚,不过采样时钟=16*9600;
因为要对每个BIT进行16次采样,具体价绍请看程序
Compile report:
===============
CORE Used: 267 Total: 13824 (1.93%)
IO (W/ clocks) Used: 3 Total: 119 (2.52%)
Differential IO Used: 0 Total: 58 (0.00%)
GLOBAL (Chip+Quadrant) Used: 1 Total: 18 (5.56%)
PLL Used: 0 Total: 2 (0.00%)
RAM/FIFO Used: 0 Total: 24 (0.00%)
Low Static ICC Used: 0 Total: 1 (0.00%)
FlashROM Used: 0 Total: 1 (0.00%)
User JTAG Used: 0 Total: 1 (0.00%)
RC oscillator Used: 0 Total: 1 (0.00%)
XTL oscillator Used: 0 Total: 1 (0.00%)
NVM Used: 0 Total: 2 (0.00%)
AB Used: 0 Total: 1 (0.00%)
AnalogIO Used: 0 Total: 46 (0.00%)
VRPSM Used: 0 Total: 1 (0.00%)
No-Glitch MUX Used: 0 Total: 2 (0.00%)
Global Information:
Type | Used | Total
----------------|--------|-------------
Chip global | 1 | 6 (16.67%)
Quadrant global | 0 | 12 (0.00%) |