FPGA串口发送16位数

近期调试FPGA,用到串口模块,之前没写过串口发送16位数的实验,最近调试通了,上来分享一下。
主要思想其实和正常的串口发送模块差不多,就是多定义几个状态变量,设置好时序就行。本模块实现的功能是:时钟来之后开始计数,计到一定值之后启动串口发送模块,将数发送出去。就是很简单的串口发送模块,主要提供给初学者参考。
module UART_Tx(
	input       clk,
	input       rst_n,
	
	output reg  txd
);

parameter S_IDLE = 5'd0;             //空闲状态
parameter S_START_L = 5'd1;          //发送低八位起始位
parameter S_BIT0_L = 5'd2;           //发送低八位数据位
parameter S_BIT1_L = 5'd3;
parameter S_BIT2_L = 5'd4;
parameter S_BIT3_L = 5'd5;
parameter S_BIT4_L = 5'd6;
parameter S_BIT5_L = 5'd7;
parameter S_BIT6_L = 5'd8;
parameter S_BIT7_L = 5'd9;
parameter S_STOP_L = 5'd10;          //发送低八位停止位

parameter S_WAIT = 5'd11;            //等待一个串口时钟周期

parameter S_START_H = 5'd12;          //发送高八位起始位
parameter S_BIT0_H = 5'd13;           //发送高八位数据位
parameter S_BIT1_H = 5'd14;
parameter S_BIT2_H = 5'd15;
parameter S_BIT3_H = 5'd16;
parameter S_BIT4_H = 5'd17;
parameter S_BIT5_H = 5'd18;
parameter S_BIT6_H = 5'd19;
parameter S_BIT7_H = 5'd20;
parameter S_STOP_H = 5'd21;          //发送高八位停止位

parameter CLK_F = 125000000;   //system clock frequency
parameter UART_BPS = 9600;    //串口波特率
localparam BPS_CNT = CLK_F/UART_BPS;  //相应波特率分频计数器

parameter cnt=60000;                    //计数器记到cnt值后串口输出该值

reg [4:0] state;
reg[15:0] bit_timer;           //用于控制波特率的计数器如果波特率是115200,每个数据位50000000/115200个时钟周期
reg[15:0] tx_data;             //串口发送接口
reg[7:0]  tx_data_h;           //串口发送的高八位数据
reg[7:0]  tx_data_l;           //串口发送的低八位数据


always&#
  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值