• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

串口通信控制模块发送端Verilog代码Quartus DE2-115开发板

08/11 08:59
452
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240R1202029307.doc

共1个文件

名称:串口通信控制模块发送端Verilog代码Quartus  DE2-115开发板

软件:Quartus

语言:Verilog

代码功能:

串口通信控制模块发送端

编写波特率可设置的串口通信控制程序,使得发送端(通过FPGA的四个拨码开关发送0~15内的整数),接收端(在PC上通过串口调试助手进行显示)观察数据是否与发送端一样。

要求.jpg

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在DE2-115开发板验证,DE2-115开发板如下,其他开发板可以修改管脚适配:

DE2-115开发板.png

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. 管脚分配

5. Testbench

6. 仿真图

部分代码展示:

//UART发送端
module uart_send(
    input      clock,                  //系统时钟
    input         reset,                //系统复位,低电平有效
    input         write_strobe,                  //发送使能信号
    input  [3:0]  data_in,                 //待发送数据
output        transmitinf,                //表示这种发送
    output  reg   s_out                  //UART发送端口
    );
    
//parameter define
parameter  CLK_FREQ = 50000000;             //系统时钟频率
parameter  UART_BPS = 9600;                 //串口波特率
localparam BPS_CNT  = CLK_FREQ/UART_BPS;    //为得到指定波特率,对系统时钟计数BPS_CNT次
//reg define
reg        uart_en_d0; 
reg        uart_en_d1;  
reg [15:0] clk_cnt;                         //系统时钟计数器
reg [ 3:0] tx_cnt;                          //发送数据计数器
reg        tx_flag;                         //发送过程标志信号
reg [ 7:0] tx_data;                         //寄存发送数据
//wire define
wire       en_flag;
assign transmitinf=tx_flag;
//*****************************************************
//**                    main code
//*****************************************************
//捕获uart_en上升沿,得到一个时钟周期的脉冲信号
assign en_flag = (uart_en_d1) & (~uart_en_d0);
                                                 
//对发送使能信号uart_en延迟两个时钟周期
always @(posedge clock or negedge reset) begin         
    if (!reset) begin
        uart_en_d0 <= 1'b0;                                  
        uart_en_d1 <= 1'b0;
    end                                                      
    else begin                                               
        uart_en_d0 <= write_strobe;                               
        uart_en_d1 <= uart_en_d0;                            
    end
end
//当脉冲信号en_flag到达时,寄存待发送的数据,并进入发送过程          
always @(posedge clock or negedge reset) begin         
    if (!reset) begin                                  
        tx_flag <= 1'b0;
        tx_data <= 8'd0;
    end 
    else if (en_flag) begin                 //检测到发送使能上升沿                      
            tx_flag <= 1'b1;                //进入发送过程,标志位tx_flag拉高
            tx_data <= {4'b0000,data_in};            //寄存待发送的数据,前4bit补0
        end
        else 
        if ((tx_cnt == 4'd10)&&(clk_cnt == BPS_CNT/2))
        begin                               //计数到停止位中间时,停止发送过程
            tx_flag <= 1'b0;                //发送过程结束,标志位tx_flag拉低
            tx_data <= 8'd0;
        end
        else begin
            tx_flag <= tx_flag;
            tx_data <= tx_data;
        end

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=935

  • 2-240R1202029307.doc
    下载

相关推荐