当前位置: 首页 > news >正文

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

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

仿真模块SIM_uart_drive_TB,仿真实现。
vivado联合modelsim进行仿真。


文章目录

  • FPGA-结合协议时序实现UART收发器(六):仿真模块SIM_uart_drive_TB
  • 一、SIM_uart_drive_TB仿真代码
  • 二、仿真结果
  • 总结


一、SIM_uart_drive_TB仿真代码

`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;    //上电复位释放
endalways begin//过程语句,只在仿真里可以使用,不可综合clk = 0;#(CLK_PERIOD/2);clk = 1;#(CLK_PERIOD/2);
endlocalparam 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)
beginif(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;
endalways@(posedge w_user_clk,posedge w_user_rst)
beginif(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;
endendmodule

二、仿真结果

仿真
仿真


总结

还得练,要熟练使用modelsim进行仿真,因为比vivado快。
要会写仿真代码文件,继续多练。
结合协议时序实现UART收发器也算完结了。

http://www.lryc.cn/news/165717.html

相关文章:

  • Spring Boot集成EasyExcel实现数据导出
  • EasyExcel3.0读(日期、数字或者自定义格式转换)
  • 浅谈C++|STL之vector篇
  • 微信、支付宝修改步数【小米运动】
  • stu02-初识HTML
  • 软件测试7大误区
  • 【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作
  • CSS宽度问题
  • 浅谈C++|STL之string篇
  • Kubernetes Dashboard安装部署
  • 在Qt的点云显示窗口中添加坐标轴C++
  • [密码学入门]凯撒密码(Caesar Cipher)
  • uboot 顶层Makefile-make xxx_deconfig过程说明三
  • c++中的多线程通信
  • IO day7
  • C语言之指针进阶篇(3)
  • SQL7 查找年龄大于24岁的用户信息
  • vite搭建vue3项目
  • Qt中表格属性相关操作,调整表格宽度高度自适应内容等
  • NLP机器翻译全景:从基本原理到技术实战全解析
  • docker四种网络模式
  • C 风格文件输入/输出---无格式输入/输出---(std::fgetc,std::getc,std::fgets)
  • 多线程之间如何进行通信 ?
  • 二叉树顺序存储结构
  • Apache HTTPD 多后缀解析漏洞复现
  • 【深入浅出C#】章节10: 最佳实践和性能优化:内存管理和资源释放
  • 我的创作纪念日——1个普通网安人的漫谈
  • Linux中执行bash脚本报错/bin/bash^M: bad interpreter: No such file or directory
  • 期权交易策略主要有哪些?期权交易策略指南
  • 算法通关村第十四关——解析堆在数组中找第K大的元素的应用