My title page contents

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

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

软件:Quartus

语言:Verilog

代码功能:

串口通信控制模块发送端

编写波特率可设置的串口通信控制程序,使得发送端(通过FPGA的四个拨码开关发送

0~15内的整数),接收端(在PC上通过串口调试助手进行显示)观察数据是否与发送端一样。

要求.jpg

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

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

演示视频:

设计文档:

设计文档.doc

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

代码文件(付费下载):



1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 串口通信控制模块发送端Verilog代码Quartus DE2-115开发板

发表评论

模板文件不存在: ./template/plugins/comment/pc/index.htm

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员