基于FPGA的串口指令帧接收与解析的verilog代码 网上的verilog串口指令帧接收与解析源码很多,但大多数都说不到点子上,对初学者来说很不友好,今天分享一个自己调通的小工程。 串口指令帧格式如下: 串口接收模块直接用的正点原子的源码,个人感觉正点原子的代码虽然写得冗杂,但严谨性还行,数据在波特率计数周期的中间点采集,源码如下:
module uart_recv(
input sys_clk, //系统时钟
input sys_rst_n, //系统复位,低电平有效
(*mark_debug ="true"*) input uart_rxd, //UART接收端口
(*mark_debug ="true"*) output reg uart_done, //接收一帧数据完成标志信号
(*mark_debug ="true"*) output reg [7:0] uart_data //接收的数据
);
//parameter define
parameter CLK_FREQ = 100_000_000; //系统时钟频率
parameter UART_BPS = 230400; //串口波特率
localparam BPS_CNT = CLK_FREQ/UART_BPS; //为得到指定波特率,
//需要对系统时钟计数BPS_CNT次
//reg define
reg uart_rxd_d0;
reg uart_rxd_d1;
reg [15:0] clk_cnt; //系统时钟计数器
reg [ 3:0] rx_cnt; //接收数据计数器
reg rx_flag; //接收过程标志信号
reg [ 7:0] rxdata; //接收数据寄存器
//wire define
wire start_flag;
//*****************************************************
//** main code
//*****************************************************
//捕获接收端口下降沿(起始位),得到一个时钟周期的脉冲信号
assign start_flag = uart_rxd_d1 & (~uart_rxd_d0);
//对UART接收端口的数据延迟两个时钟周期
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n) begin
uart_rxd_d0
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?