首页 > 其他分享 >调试逻辑及变量声明顺序

调试逻辑及变量声明顺序

时间:2024-03-31 15:33:44浏览次数:34  
标签:触发 顺序 变量 状态机 state 信号 调试

模型功能

  • 使用ILA观察信号
  • 观察变量的转化
  • 触发信号的设立
  • ILA调试状态机的编写
  • VIO的手动控制

模型框图

ila_0 u_ila_0(
  .clk(clk),
  .probe0(probe_0)
);

实现步骤

  1. ILA调试核的使用
  • 直接调用该IP核,可以实现一个在线逻辑分析仪的功能
  • ILA核的设置包括信号个数(对应位宽在第二页)、比较器个数、TRG输入输出、高级功能
  • 其中比较器个数和高级功能为调试状态机提供条件
    • 设置2比较时,只能进行两次同变量的比较,
  1. 观察变量的转化
  • 通过wire可以将变量转化为方便观察的量,然后连接到多个probe
  • 也可利用ila自定义端口进行转化
    • 但是这种转化出来的变量只能用于等于判断,不能用于大小判断
    • 所以最好使用probe对每个变量独立观测
  • 变量的除法除了输入触发信号,还可以利用观测信号进行自触发
    • 这个操作和示波器是一致的
  1. 触发信号的设置
  • 使用专用触发信号
    • 在这里选择触发类型
    • 将输入的信号作为专用触发信号
  • 如果要使用自触发,修改为默认的BASIC即可
  • 至于高级模式,就是状态机触发
  1. 状态机触发的实现
  • 官方的状态机触发例子,主要结构就是状态机不带case的写法,且每个if后面增加then,类似PYTHON的语法
  • 基于上述修改一个
##################################################
#
# For info on creating trigger state machines:
#   1) In the main Vivado menu bar, select
#      Window > Language Templates
#   2) In the Templates window, select
#      Debug > Trigger State Machine
#   3) Refer to the entry 'Info' for an overview
#      of the trigger state machine language.
#
# More information can be found in this document:
#
#   Vivado Design Suite User Guide: Programming
#   and Debugging (UG908)
#
##################################################
state S0:
if ( r_cnt == 32'h0000_0010 ) then
goto S1;
else 
goto S0;
endif
state S1: 
goto S2;
state S2: 
goto S3;
state S3:
trigger;


  • 编写完成后可以点击编译按钮,观察是否存在语法错误
    • 从这个文件调试中发现以下的要点:
      (1)位宽必须严格对应(和GUI设置自触发一样)
      (2)不支持d十进制匹配,而是使用u代替,这里和verilog不一致
      (3)trigger语句代表状态机结束,不能在进行其他逻辑
      (4)一个变量只能出现一种形式的比较,也就是不能进行同信号的多种判断,这个可能是触发信号简化的结果
    • 上述的文件等效于 r_cnt == 32'h0000_0010,但是触发延时了三个周期
      • 当信号很多的时候,利用这个状态机可以实现触发条件的复杂联动,实现某些特殊的判断
      • 状态负责进行新的判断扫描,直达获取到对应的条件,然后再按照跳转条件进行触发
      • 如果真的需要实现硬件状态机,则需要将每个条件都通过独立的通道进行导入
        • 这样才能实现真正的非即时断言的功能
  1. VIO的手动控制
  • 除了检测信号,xilinx提供了VIO进行虚拟信号的生成
  • 主要是搭建一个简易的信号控制,可以用于无指令系统时的简易控制
  • 这个使用比较简单,就不再展开

最终效果

  • 延时3个周期后触发

调用接口

标签:触发,顺序,变量,状态机,state,信号,调试
From: https://www.cnblogs.com/electricdream/p/18106717

相关文章

  • 调试远程云服务器
    最近在复现论文里面的代码,结果实验室里面的2080和论文结果相差有点多,同时我的笔记本调试显卡显存太小,因此尝试使用云服务器上面的GPU跑,下面是采用Deepln的云服务器跑的代码的一些总结,这是他们的网址https://www.deepln.com/#/设置进程保护指令sudoapt-getupdate&&sudo......
  • 【数据结构与算法篇】动态顺序表及相关OJ算法题
    【数据结构与算法篇】动态顺序表及相关OJ算法题......
  • Java顺序查找知识点(含面试大厂题和源码)
    顺序查找(SequentialSearch),也称为线性查找,是一种简单直观的查找算法。它通过逐个检查数据集中的每个元素来查找目标值。顺序查找不要求数据集是有序的,因此它适用于任何形式的数据集,包括数组、链表、列表等。顺序查找的工作原理:开始查找:从数据集的起始位置开始。逐个比较:将......
  • GDB调试指令
    GDB流程控制命令功能命令简写重新运行调试的程序runr继续运行continuec执行下一步nextn执行N次下一步nextNnN执行上次执行的命令[Enter]单步进入steps执行完当前函数返回到调用它的函数finishf指定程序直到退出当前循环体until......
  • nukkit maven 项目调试插件
    首先添加配置选择添加jar应用然后填入配置信息最后当每次重新构建重构后,手动更新plugins下的插件,当你服务器的jar包与构建出来的jar包一致时即可在idea中给插件代码打断点。......
  • 自学-C语言-基础-注释、变量、运算符、判断、循环
    运行环境DevC++DevC++官网认识C语言C语言是一种通用的、面向过程式的计算机程序设计语言。1972年,为了移植与开发UNIX操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了C语言。C语言是一种广泛使用的计算机语言,它与Java编程语言一样普及,二者在现代软件程序员......
  • LInux: fork()究竟是如何工作的?为何一个变量能够接受两个返回值?
    LInux:fork函数究竟是如何工作的?为何一个变量能够接受两个返回值?前言一、fork()用法二、fork()应用实例展示三、fork()工作原理3.1为什么要创建子进程?3.2fork()究竟干了些什么?3.3fork为什么会存在两个返回值?3.5为何fork函数中父进程返回子进程的pid、子进程返回0?3.......
  • python面向对象封装,私有变量
    一、私有变量“_”单下划线开头的变量:_var ,表示这些函数和变量是元素私有的或内部使用的,为非强制性(实际可修改也可引用)。"__"双下划线开头的变量:__var,表示这些函数和变量是元素私有的或内部使用的,为强制性,对象外不可修改或引用。单下划线例子classPeople():def__ini......
  • springBoot AOP 深入原理,及 @Before,@Around,@After,@AfterReturn,@AfterThrowing执行
    连接点(Joinpoint):程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。——可以理解为被aop拦截的类或者方法就是连接点。通知(Advice):通知定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个工作。——可以理解为被......
  • 在 Vivado 中执行远程调试
    在Vivado中执行远程调试远程调试需求可能在各种情况下出现。在产品原型设计阶段可能需要远程调试以便您在无法实地访问实验室的情况下对实验室中的设计进行调试,或者供您在组织内部共享资源。执行现场调试以诊断问题或者延长产品生命周期时也可能需要远程调试。......