Xilinx FPGA:vivado这里记录一个小小的问题

news2024/10/7 7:29:35

问题描述:uart_data从rx模块输入到ctrl模块后就没有值了。

问题一:首先我仿真例化了两个模块,并且,我选取了单独例化的rx模块中的uart_data 的值,所以在仿真中它是有值的。

`timescale 1ns / 1ps
module test_bench_TOP(  );
   reg                sys_clk  ;
   reg                rst_n    ;
   reg                key      ;
   reg                echo     ;
   wire               trig     ;
   wire               tx_data  ;
   reg                rx_data       ; 
   wire[7:0]          uart_data     ; 
   wire               rx_done       ; 

  parameter         SYSCLK =   50_000_000  ;
  parameter         Baud   =   115200      ;
  parameter         COUNT  =   SYSCLK/Baud ;//434   传输1比特所需要的时钟周期
  parameter         MID    =   COUNT/2     ;
  initial
      begin
           sys_clk = 0 ;
           rst_n   = 0 ;
           key     = 1 ;
           #10
           rst_n   = 1 ;
           #50000
           key     = 0 ;
           #50000
           key     = 1 ;
           #50000
           key     = 0 ;
           #50000
           key     = 1 ;
           #50000
           key     = 0 ;
           #50000
           key     = 1 ;
           
           
      end
  always #1 sys_clk = ~sys_clk ; //2ns
  
  initial
        begin
            uart_out (8'h33);  //0011_0011
            uart_out (8'hff);  //1111_1111
            uart_out (8'h18);  //0001_1000
            uart_out (8'h78);
            uart_out (8'h66);
        end
  
  
  //任务函数
  task     uart_out   ;
     input      [7:0]    DATA   ;
         begin
              rx_data = 1 ;///空闲位初始
              #20 
              rx_data = 0 ;///起始位
               ///传输1bit的计时次数*1周期时间=总时间
               #(COUNT*2)  rx_data = DATA[0] ;///数据位第一位
               #(COUNT*2)  rx_data = DATA[1] ;///数据位第二位
               #(COUNT*2)  rx_data = DATA[2] ;
               #(COUNT*2)  rx_data = DATA[3] ;
               #(COUNT*2)  rx_data = DATA[4] ;
               #(COUNT*2)  rx_data = DATA[5] ;
               #(COUNT*2)  rx_data = DATA[6] ;
               #(COUNT*2)  rx_data = DATA[7] ;
               #(COUNT*2)  rx_data = 0       ;
/*这一步相当于代替了串口调试工具,串口调试工具根据选择的"偶校验"
自动在数据位后面生成"0"或者"1",我们这边只能赋值一个数"0"或者"1"。
我选择赋值为0,所以注定了"8'h31""8'hef""8'h10"是通不过的。
*/
               #(COUNT*2)  rx_data = 1       ;
               #(COUNT*2)                    ;//停止位也需要时间
               # 80000                       ;
         end
  
  
  
  endtask

  
TOP TOP_1(
             .   sys_clk ( sys_clk) ,
             .   rst_n   ( rst_n  ) ,
             .   key     ( key    ) ,
//              .   rx_data  (rx_data  ) ,  //输入串行数据distance
             .   echo    ( echo   ) ,
             .   trig    ( trig   ) ,
             .   tx_data ( tx_data)

    );
uart_rx uart_rx_1(
               .   sys_clk  (sys_clk  ) ,
               .   rst_n    (rst_n    ) ,
               .   rx_data  (rx_data  ) ,  //输入串行数据distance
               .   uart_data(uart_data) , // 输出并行数据
               .   rx_done  (rx_done  )   //数据传输完成结束信号  
         
    );


endmodule

如果选取TOP模块中的uart_data,它同样是没有值的:

问题二:TOP模块中没有uart_data输入进来,我们仿真的是TOP模块,uart_data都没有输入进来,肯定是没有值的。

改正后:

`timescale 1ns / 1ps
module test_bench_TOP(  );
   reg                sys_clk  ;
   reg                rst_n    ;
   reg                key      ;
   reg                echo     ;
   wire               trig     ;
   wire               tx_data  ;
   reg                rx_data       ; 


  parameter         SYSCLK =   50_000_000  ;
  parameter         Baud   =   115200      ;
  parameter         COUNT  =   SYSCLK/Baud ;//434   传输1比特所需要的时钟周期
  parameter         MID    =   COUNT/2     ;
  initial
      begin
           sys_clk = 0 ;
           rst_n   = 0 ;
           key     = 1 ;
           #10
           rst_n   = 1 ;
           #50000
           key     = 0 ;
           #50000
           key     = 1 ;
           #50000
           key     = 0 ;
           #50000
           key     = 1 ;
           #50000
           key     = 0 ;
           #50000
           key     = 1 ;
           
           
      end
  always #1 sys_clk = ~sys_clk ; //2ns
  
  initial
        begin
            uart_out (8'h33);  //0011_0011
            uart_out (8'hff);  //1111_1111
            uart_out (8'h18);  //0001_1000
            uart_out (8'h78);
            uart_out (8'h66);
        end
  
  
  //任务函数
  task     uart_out   ;
     input      [7:0]    DATA   ;
         begin
              rx_data = 1 ;///空闲位初始
              #20 
              rx_data = 0 ;///起始位
               ///传输1bit的计时次数*1周期时间=总时间
               #(COUNT*2)  rx_data = DATA[0] ;///数据位第一位
               #(COUNT*2)  rx_data = DATA[1] ;///数据位第二位
               #(COUNT*2)  rx_data = DATA[2] ;
               #(COUNT*2)  rx_data = DATA[3] ;
               #(COUNT*2)  rx_data = DATA[4] ;
               #(COUNT*2)  rx_data = DATA[5] ;
               #(COUNT*2)  rx_data = DATA[6] ;
               #(COUNT*2)  rx_data = DATA[7] ;
               #(COUNT*2)  rx_data = 0       ;
/*这一步相当于代替了串口调试工具,串口调试工具根据选择的"偶校验"
自动在数据位后面生成"0"或者"1",我们这边只能赋值一个数"0"或者"1"。
我选择赋值为0,所以注定了"8'h31""8'hef""8'h10"是通不过的。
*/
               #(COUNT*2)  rx_data = 1       ;
               #(COUNT*2)                    ;//停止位也需要时间
               # 80000                       ;
         end
  
  
  
  endtask

  
TOP TOP_1(
             .   sys_clk ( sys_clk) ,
             .   rst_n   ( rst_n  ) ,
             .   key     ( key    ) ,
              .   rx_data  (rx_data  ) ,  //输入串行数据distance
             .   echo    ( echo   ) ,
             .   trig    ( trig   ) ,
             .   tx_data ( tx_data)

    );
//uart_rx uart_rx_1(
//               .   sys_clk  (sys_clk  ) ,
//               .   rst_n    (rst_n    ) ,
//               .   rx_data  (rx_data  ) ,  //输入串行数据distance
//               .   uart_data(uart_data) , // 输出并行数据
//               .   rx_done  (rx_done  )   //数据传输完成结束信号  
         
//    );


endmodule

问题背景:

我没有认识到rx_data信号只能由电脑产生发送给卡发版,我以为由超声波返回的echo信号计算出的distance也可以作为输入信号让rx接收。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1868330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何高效使用 .http 文件记录和测试API接口

1. 前言 在现代软件开发中,API(应用程序接口)成为了系统间通信的重要桥梁。.http 文件作为一种轻量级的API请求描述方式,不仅便于开发者记录和分享API接口信息,还能够帮助自动化测试流程。本文将深入介绍如何有效地使…

【论文阅读】-- MultiStream:探索分层时间序列的多分辨率流图方法

MultiStream: A Multiresolution Streamgraph Approach to Explore Hierarchical Time Series 摘要1 引言2相关工作2.1 堆叠图和流图可视化2.2 时间序列的层次结构2.3 交互技术 3 需求分析4 视觉映射和功能4.1 设计原理总结4.2 概述4.3 多分辨率视图4.4 控制器4.5 层次管理器 5…

【知识学习】阐述Unity3D中FogLOD的概念及使用方法示例

在Unity3D中,Fog(雾效)和LOD(Level of Detail,细节层次)是两种用于提高场景视觉效果和性能的技术。 Fog(雾效) 雾效是一种视觉效果,用于模拟大气中的雾或烟&#xff0c…

纠结要不要选计算机专业,问问自己这个问题

又到了一年一度高考填志愿的时候,几年前我做过一个介绍计算机专业的视频。有需要的同学可以去看下 有人看完视频问我: 你到底是在推荐还是在劝退计算机? 还有人说: 我也不知道自己对计算机有没有兴趣,怎么办&#xff1…

应用案例 | 如何监测高价值货物在物流运输过程中受到的振动和冲击?全面保障货物安全

一、货物运输 不同种类的货物对运输的要求不同,钢铁、煤炭、矿石等大宗物资通常对运输要求较低,而电子产品、IT 产品、家电等高价值敏感类货物则更强调运输的安全性和时效性,往往希望能尽可能安全和快速送达这类货物,使之尽快进入…

uni-app与原生插件混合开发调试1-环境准备

uni-app与原生插件混合开发调试系列文章分为3篇,分别详细讲了《环境准备》、《搭建uni-app本地开发调试环境》和《安卓原生插件开发调试和打包》,3篇文章完整详细地介绍了“从环境安装配置到本地开发调试到原生插件打包”整个流程。 相关名词和概念解释…

计算机网络面试TCP篇之TCP三次握手与四次挥手

TCP 三次握手与四次挥手面试题 任 TCP 虐我千百遍,我仍待 TCP 如初恋。 巨巨巨巨长的提纲,发车!发车! PS:本次文章不涉及 TCP 流量控制、拥塞控制、可靠性传输等方面知识,这些知识在这篇: TCP …

神州信息与国科量子联合进军量子网络应用服务市场(中国军民两用通信技术展览会)

量子通信,智联未来 —— 神州信息与国科量子共启安全通信新纪元 在信息技术飞速发展的今天,信息安全已成为全球关注的焦点。神州数码信息服务股份有限公司(神州信息)与国科量子通信网络有限公司(国科量子)…

PyCharm 2024.1最新变化

PyCharm 2024.1 版本带来了一系列激动人心的新功能和改进,以下是一些主要的更新亮点: Hugging Face 模型和数据集文档预览:在 PyCharm 内部快速获取 Hugging Face 模型或数据集的详细信息,通过鼠标悬停或使用 F1 键打开文档工具窗口来预览。 …

【数据结构】--栈

👌个人主页: 起名字真南 🤣个人专栏:【数据结构初阶】 【C语言】 目录 1 栈1.1 栈的概念和结构1.2 栈的实现1.2.1 头文件1.2.2 初始化1.2.3 销毁1.2.4 打印所有元素1.2.5 入栈1.2.6 出栈1.2.7 获取栈顶数据1.2.8 判空1.2.9 获取元素个数 1 栈 1.1 栈的概…

Element-UI 并排显示多个 disabled按钮的时候, 不生效问题解决

目录 Element-UI 并排显示多个 disabled按钮的时候, 不生效问题解决 解决方法: 运行结果: Element-UI 并排显示多个 disabled按钮的时候, 不生效问题解决 解决方法: Element-UI 并排显示多个 disabled按钮的时候&a…

测绘局内外网文件导入导出,怎样才能效率安全两手抓?

测绘局负责进行各种基础测绘工作,如地形测量、地籍测绘、海洋测绘等,获取并更新国家基础地理信息数据。这些数据是国民经济建设、城市规划、资源调查、环境保护等各个领域的重要基础资料。对于维护国家地理信息安全、促进国民经济和社会发展具有重要意义…

空间转录组学联合单细胞转录组学揭示卵巢癌生存相关受配体对

卵巢癌,作为女性生殖系统中的一种常见恶性肿瘤,其高级别浆液性卵巢癌(HGSC)亚型尤其致命。尽管多数患者对初次治疗反应良好,但超过75%的晚期HGSC患者会在治疗后复发,并且对化疗药物产生耐药性。然而&#x…

QT+winodow 代码适配调试总结(二)

已经好多年了, linux环境下不同版本的QT程序开发和部署,突然需要适配window环境程序调试,一堆大坑,还真是一个艰巨的任务,可是kpi下的任务计划,开始吧!! 1、首先我们自定义的动态库…

Python应用开发——30天学习Streamlit Python包进行APP的构建(10)

st.map 显示一张叠加了散点图的地图。 它是 st.pydeck_chart 的包装器,用于在地图上快速创建散点图表,并具有自动居中和自动缩放功能。 使用该命令时,Mapbox 会提供地图瓦片来渲染地图内容。请注意,Mapbox 是第三方产品&#x…

品牌窜货治理:维护市场秩序与品牌健康的关键

品牌在各个渠道通常都会设定相应的销售规则,其中常见的便是区域保护制度,比如 A 地区的货物只能在 A 地区销售,各区域的产品价格和销售策略均有所不同,因此 A 地区的货物不能流向 B 地区,否则就被称为窜货。 窜货现象不…

【PHP】控制摄像头缩放监控画面大小,并保存可视画面为图片

一、前言 功能描述 调用摄像头并可以控制缩放摄像头监控画面的大小,把可视画面保存为图片。 我使用的是USB摄像头,其他摄像头此方法应该也通用。 使用技术 使用到的技术比较简单,前端使用WebcamJS插件调用摄像头,并摄像头监控…

初识前端工程化

前端工程化 一、接口文档管理 YAPI二、前端工程化1、前端工程化介绍2、环境准备 三、Vue 项目创建&简介1、Vue 项目创建2、Vue 项目简介3、运行 Vue 项目 四、Vue 组件库 Element UI1、Elment UI 简介2、Element UI 入门 五、Vue 项目中使用 axios六、Vue 路由1、Vue 路由简…

一种基于优化信息频带的旋转机械故障诊断方法(MATLAB)

特征提取是滚动轴承故障诊断及状态监测的关键,直接关系到轴承状态预示及故障识别的准确性,也是轴承故障诊断中的研究热点。考虑到轴承故障冲击会导致振动信号的形态改变,进而引起相关统计参数的变化,所以通过振动信号计算的统计量…

上海高考志愿填报小程序开发的主要功能

6月毕业季,高考学子刚经历了激烈的高考角逐,又迎来了志愿填报的大关。面对影响一生的高考志愿,如何填报显得尤为重要,面对广大学子的填报需求,上海高考志愿填报小程序为高考学子带来了福音。 一. 上海高考…