FPGA-结合协议时序实现UART收发器(六):仿真模块SIM_uart_drive_TB

FPGA-结合协议时序实现UART收发器(六):仿真模块SIM_uart_drive_TB

仿真模块SIM_uart_drive_TB,仿真实现。

vivado联合modelsim进行仿真。


文章目录


一、SIM_uart_drive_TB仿真代码

c 复制代码
`timescale 1ns / 1ns   //时间单位/时间精度
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/09/12 14:52:47
// Design Name: 
// Module Name: SIM_uart_drive_TB
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module SIM_uart_drive_TB();

/****仿真语法、产生时钟与复位****/

localparam CLK_PERIOD = 20 ;

reg clk,rst;

initial begin   //过程语句,只在仿真里可以使用,不可综合
    rst = 1;    //上电开始复位
    #100;       //延时100ns
    @(posedge clk) rst = 0;    //上电复位释放
end

always begin//过程语句,只在仿真里可以使用,不可综合
    clk = 0;
    #(CLK_PERIOD/2);
    clk = 1;
    #(CLK_PERIOD/2);
end

localparam P_USER_DATA_WIDTH = 8;

reg  [P_USER_DATA_WIDTH - 1 : 0]    r_user_tx_data  ;
reg                                 r_user_tx_valid ;
wire                                w_user_tx_ready ;     
wire [P_USER_DATA_WIDTH - 1 : 0]    w_user_rx_data  ;
wire                                w_user_rx_valid ;
wire                                w_user_active   ;
wire                                w_user_clk      ;
wire                                w_user_rst      ;
assign w_user_active = r_user_tx_valid & w_user_tx_ready;


uart_drive#(
    .P_SYSTEM_CLK       (50_000_000             ),   //输入时钟频率
    .P_UART_BUADRATE    (9600                   ),   //波特率
    .P_UART_DATA_WIDTH  (P_USER_DATA_WIDTH      ),   //数据宽度
    .P_UART_STOP_WIDTH  (1                      ),   //1或者2
    .P_UART_CHECK       (2                      )    //None=0 Odd-1 Even-2
)
uart_drive_u0
(                  
    .i_clk              (clk),
    .i_rst              (rst),  

    .i_uart_rx          (o_uart_tx              ),
    .o_uart_tx          (o_uart_tx              ),

    .i_user_tx_data     (r_user_tx_data         ),
    .i_user_tx_valid    (r_user_tx_valid        ),
    .o_user_tx_ready    (w_user_tx_ready        ),

    .o_user_rx_data     (w_user_rx_data         ),
    .o_user_rx_valid    (w_user_rx_valid        ),
    .o_user_clk         (w_user_clk             ) ,
    .o_user_rst         (w_user_rst             )                 
);

/****激励信号****/
always@(posedge w_user_clk,posedge w_user_rst)
begin
    if(w_user_rst)
        r_user_tx_data <= 'd0;
    else if(w_user_active)
        r_user_tx_data <= r_user_tx_data + 1;
    else 
        r_user_tx_data <= r_user_tx_data;
end

always@(posedge w_user_clk,posedge w_user_rst)
begin
    if(w_user_rst)
        r_user_tx_valid <= 'd0;
    else if(w_user_active)
        r_user_tx_valid <= 'd0;
    else if(w_user_tx_ready)
        r_user_tx_valid <= 'd1;
    else 
        r_user_tx_valid <= r_user_tx_valid;
end

endmodule

二、仿真结果



总结

还得练,要熟练使用modelsim进行仿真,因为比vivado快。

要会写仿真代码文件,继续多练。
结合协议时序实现UART收发器也算完结了。

相关推荐
ARM+FPGA+AI工业主板定制专家6 小时前
国产化RK3576+FPGA架构|晶圆传输机器人高速定位+AI瑕疵检测一体化方案
fpga开发·架构·机器人·嵌入式·fpga·工控·机器人运控
Eloudy1 天前
FPGA (QSFP28 + CMAC US+ RoCEv2) 与 Ubuntu22 + Mellanox 网卡直连分析
fpga开发
szxinmai主板定制专家1 天前
RK3568+FPGA高速并行采集|半导体探针测试设备多通道同步数据采集系统设计
人工智能·嵌入式硬件·计算机视觉·fpga开发
ARM|X86+FPGA工业主板厂家2 天前
RK3588+FPGA+EtherCAT异构架构解析|工业场景如何同时保住AI算力与微秒级运动实时性
人工智能·fpga开发·架构
zlinear数据采集卡2 天前
从“脏信号”到“纳伏级纯净”:硬核拆解DABL7606的多级抗混叠滤波与24位过采样算法
arm开发·科技·嵌入式硬件·fpga开发·开源
尤老师FPGA2 天前
HDMI数据的接收发送实验(二十)
fpga开发
千寻xun3 天前
三、实战篇-NVME SSD控制之FPGA实现(一)
fpga开发·nvme ssd·nvme协议
XMAIPC_Robot3 天前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
upper20203 天前
从零开始设计riscv cpu记录之七
fpga开发·riscv·riscv设计·btb·分支预测
ARM|X86+FPGA工业主板厂家3 天前
AI视觉跟随运动控制实战|RK3588 NPU检测+FPGA EtherCAT多轴联动精准跟随方案,适用于半导体视觉对位等
人工智能·fpga开发·硬件工程·ethercat·实时系统