首页 > 其他分享 >小梅哥课程学习——串口通信的发送与调试(重在调试过程)

小梅哥课程学习——串口通信的发送与调试(重在调试过程)

时间:2023-02-21 15:24:31浏览次数:52  
标签:20 tx 1000000000 bps 调试 串口 input DR 小梅哥



源代码
module uart_byte_tx(
    clk,
    reset_n,
    data,
    send_en,
    baud_set,
    uart_tx,
    tx_done
);
    input clk;
    input reset_n;
    input [7:0] data;
    input send_en;
    input [2:0] baud_set;
    output reg uart_tx;
    output reg tx_done;
    //设置可选择选择波特率的模式
    reg [17:0] bps_DR;
    always@(*)
    case(baud_set)
        0:bps_DR=1000000000/9600/20;
        1:bps_DR=1000000000/19200/20;
        2:bps_DR=1000000000/38400/20;
        3:bps_DR=1000000000/57600/20;
        4:bps_DR=1000000000/115200/20;
        default:bps_DR=1000000000/9600/20;
    endcase
    
    
    //设置分频计数器,满足最低的波特率的位数,18位。
    reg [17:0] div_cnt;
    always @(posedge clk or negedge reset_n)
    if(!reset_n)
        div_cnt<=0;
    else if(send_en)begin
        if(div_cnt==bps_DR-1)
            div_cnt<=0;
        else
            div_cnt<=div_cnt+1'b1;
    end
    else
        div_cnt<=0;
        
    wire bps_clk;
    assign bps_clk=(div_cnt==1);
    //开始讲每个时间段连接起来。
    reg [3:0] bps_cnt;
    always@(posedge clk or negedge reset_n)
    if(!reset_n)
        bps_cnt<=0;
    //1、这里的等于div_cnt==1是为了让计数器从0计数到1时时间比较段,二不产生太大延迟,
    //2、加入send_en是为了让计数完及时清零。
    else if(send_en)begin
    
        if(div_cnt==1) begin//每次计数到11清零,其他时间进行加一的操作。
            if(bps_cnt==11)
                bps_cnt<=0;
            else
                bps_cnt<=bps_cnt+1'b1;    
        end
    end
    else
        bps_cnt<=0;
    //开始发送数据
    always@(posedge clk or negedge reset_n)
    if(!reset_n)begin
        uart_tx<=1'b1;
        tx_done<=0;
    end
    else case(bps_cnt)
//如果从0开始的话,会在中间间隔时间(空窗期),使得uart_tx=0;
//因为发送初始位置时(0时刻),就让uart_tx<=0了.
          1:begin uart_tx<=0;tx_done<=0; end
          2:uart_tx<=data[0];
          3:uart_tx<=data[1];
          4:uart_tx<=data[2];
          5:uart_tx<=data[3];
          6:uart_tx<=data[4];
          7:uart_tx<=data[5];         
          8:uart_tx<=data[6];
          9:uart_tx<=data[7];
          10:uart_tx<=1;
          11:begin uart_tx<=1;tx_done<=1;end
          default uart_tx<=1;
    endcase
    
endmodule

仿真代码
`timescale 1ns/1ns
module uart_byte_tx_tb();
    reg clk;
    reg reset_n;
    reg [7:0] data;
    reg send_en;
    reg [2:0] baud_set;
    wire uart_tx;
    wire tx_done;
    uart_byte_tx uart_byte_tx_inst0(
    .clk(clk),
    .reset_n(reset_n),
    .data(data),
    .send_en(send_en),
    .baud_set(baud_set),
    .uart_tx(uart_tx),
    .tx_done(tx_done)
    );
    initial clk=1;
    always #10 clk=!clk;
    
    initial begin
        reset_n=0;
        data=0;
        baud_set=4;
        send_en=0;
        #201;
        reset_n=1;
        #20;
        
        data=8'h57;
        send_en=1;
        
        @(posedge tx_done)
        send_en=0;
        #2000;
        data=8'h75;
        send_en=1;
        #20;
        @(posedge tx_done)
        send_en=0;
        #20000;
        $stop; 
    end
    

endmodule

 

 

 

标签:20,tx,1000000000,bps,调试,串口,input,DR,小梅哥
From: https://www.cnblogs.com/wangwin4/p/17141109.html

相关文章

  • 基于CANoe和Visual Studio实现Classic 和Adaptive AUTOSAR应用层调试
    “转载自维克多汽车技术(上海)有限公司,作者VectorChina”伴随“软件化”和“敏捷化”的推进,从基于域(Domain)架构到基于区域(Zonal)架构的发展,亦或OEM成立软件中心参与软件开发......
  • 搭建 spring boot + mybatis plus 项目框架并进行调试
    本文为博主原创,未经允许不得转载:1.创建一个spring boot的工程应用:File---->New----->Project----> 然后选中SpringInitializr 继续创建:  2.添加sprin......
  • Chrome 调试元素技巧
    当一个元素需要鼠标hover才能显示,但你又需要用inspect去查看DOM的个属性,可以这么做:ctrl+`,在控制台输入debugger,然后再去选择元素 当你不知道代码什么地方插入了新的DOM......
  • windows下dapr的代码调试--非docker部署
    上一篇大概的整理了一下在vm虚拟机下通过docker部署dapr应用,作服务之间调用的例子。今天整理一下windows下dapr的非docker部署调试,毕竟大部分开发不需要花费太多时间做部......
  • C# VB 如何跨进程调试COM
    本文实现了在VB6外壳启动的进程中,调试VB6调用的C#COM工程。1,用C#编写一个窗体程序CSharpStart.exe。在此窗体中Process.Start("vb6exe路径")。(用于保持调试进程)2,将......
  • xcode 4.2 如何调试 EXC_BAD_ACCESS
    打开NSZombieEnabled来调试EXC_BAD_ACCESS在写iOS程序时,无论你是新手还是牛人,都有可能会碰到EXC_BAD_ACCESS。而此时你的debugarea中不会显示任何信息可以来帮助你找出......
  • 前端程序调试打断点的方式
                参考:https://blog.csdn.net/m0_45382009/article/details/122252339......
  • android studio,不管调试还是release,在android12上都报错。
    Listofapks:[0]'/Users/xxxx/Documents/Android/Test/app/build/outputs/apk/debug/test.apk'Installationfaileddueto:'Failedtocommitinstallsession2065883......
  • 使用Serverless红利的云调试,APP启动出现安全限制,肿么办
    ​ 关于AGC云调试安全限制的问题。问题背景:cp反馈使用云调试服务时,所有的调试机器,在app启动时候都会出现“因安全限制,该项操作被禁止”,而在自己手机上运行是正常的,咨询......
  • 注意注意!!!!关于keil的问题,调试时候的bug
    1.keil变量不区分大小写;2.KEIL调试debug时误报,未定义某变量但是实际定义了的。今天用keil写代码感觉逻辑上没问题但是始终不是那个效果检查了半天错误问题。最后debu......