您当前的位置: 首页 > 

9527华安

暂无认证

  • 0浏览

    0关注

    35博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

基于FPGA的串口指令帧接收与解析的verilog代码

9527华安 发布时间:2022-02-21 09:51:25 ,浏览量:0

基于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             
关注
打赏
1659431378
查看更多评论
0.0390s