数字ic设计技巧:添加debug信号

数字ic设计技巧:添加debug信号

文章目录

  • 数字ic设计技巧:添加debug信号
    • 1. 握手方式读取数据的debug信号o_wait_read
    • 2. FIFO的空满信号
    • 3. 输入错误
    • 4. 多状态机的debug信号
    • 5. 使用FIFO记录log

在数字ic设计的过程中,我们常常通过添加一些debug信号来调试代码,以便快速定位问题;比如我们用一个芯片读取很多设备的数据进行处理,有个设备一直没返回数据,导致芯片一直在等待这个数据,卡住了,这时候就需要有个芯片引脚(debug信号),让我们能知道是哪个设备的问题;

1. 握手方式读取数据的debug信号o_wait_read

我们向一个设备发送req请求信号,该设备接收到请求信号后,将准备好的dat数据和ack有效信号一起发送给我们;我们在ack有效时候接收数据,完成握手;代码如下所示:

output        req;
input          ack;
input [3: 0] dat;always@(posedge click or negedge rstn)
if(!rstn)req <= 1‘d0;
else if(clr | (req & ack))req <= 1’b0;   //握手成功,接收到数据后不再请求
else if(req_vld)req <= 1’b1; //拉起请求 always@(posedge clk or negedge rstn)
if(!rstn)dat_rec <= ‘d0;
else if(req&ack)dat_rec<= dat; //req和ack均为1时,接收数据

但现在有个问题,如果我们输出req之后,对应的模块一直没有返回ack数据,怎么办?这时我们需要设计一个最大等待时间MAX_DELAY_TIME,超过这个时间,就发送一个脉冲告诉芯片的控制模块这儿卡住了,然后由控制模块再根据具体需要来决定怎么处理(一般是清零,重新运行)

reg [12 :  0] delay_cnt;always@(posedge click or negedge rstn)
if(!rstn)delay_cnt <= 0else if(clr | req&ack)delay_cnt <= 0//清零或正常握手
else if(req)delay_cnt <= delay_cnt+1; //有req为1,但ack为0assign o_wait_read = delay_cnt == MAX_DELAY_TIME;

2. FIFO的空满信号

数字ic设计中经常会用到FIFO,如果FIFO为空时,我们却发起了读请求;或者FIFO为满时,我们发起了写请求;这肯定是会导致丢失数据,有一定风险,需要我们认真检查,因此这两种情况都应该在调试中用$display打印出来;

always@(posedge clk)    
if(full & write) //对一个满状态的FIFO进行写操作$diplay(‘write FIFO error’)always@(posedge clk)    
if(empty & read) //对一个空状态的FIFO进行读操作$diplay(‘read FIFO error’)

3. 输入错误

比如我们根据算法分析,认为输入信号a的数值必定是小于b的,但是芯片中的模块接收到了一个a > b的信号,这时应该返回一个error信号,而不是直接进行正常的运算;

always@(posedge clk  or negedge rstn)
if(!rstn)error = 0;
else if(clr)error = 0;
else if(a > b & dat_vld) //a>b且该数据有效 error = 1

4. 多状态机的debug信号

在多个状态机中,有时会将状态机外接出去。这样将来芯片实际运行时,如果卡住,或者出其他问题,我们就能很快知道他卡在哪个状态了;

5. 使用FIFO记录log

在网上看到一种方法,用一个FIFO储存芯片运行的关键结点的log信息,如果出错,就通过芯片预留的端口将该log信息读取出来,从而达到快速定位问题的效果。

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

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

相关文章

Java常见CodeReview及编码规范

鉴于自己的开发经验,以及常见容易产生bug及性能问题的点做个记录. 1.数据库 如果开发人员的经验不足,Java通过ORM(Mybatis)对数据库的操作的性能问题比较隐蔽.因为不压测或者异常case没发生的时候一般发现不了问题.特别是异常case发生的时候. 除配置表以外的sql都要经过expl…

LINQ【C#】

1LINQ概述&#xff1a; 集成查询&#xff0c;在对象领域和数据领域之间架起了一座桥梁。 LINQ主要由3部分组成&#xff1a;LINQ to ADO.NET、LINQ to Objects和LINQ to XML。其中&#xff0c;LINQ to ADO.NET可以分为两部分&#xff1a;LINQ to SQL 和LINQ to DataSet。 var…

Learning Memory-guided Normality for Anomaly Detection 论文阅读

Learning Memory-guided Normality for Anomaly Detection 摘要1.介绍2.相关工作3.方法3.1网络架构3.1.1 Encoder and decoder3.1.2 Memory 3.2. Training loss3.3. Abnormality score 4.实验5.总结总结&代码复现&#xff1a; 文章信息&#xff1a; 发表于&#xff1a;cvpr…

消息中间件之间的区别

一.单机吞吐量 ActiveMQ&#xff1a;万级&#xff0c;吞吐量比RocketMQ和Kafka要低了一个数量级 RabbitMQ&#xff1a;万级&#xff0c;吞吐量比RocketMQ和Kafka要低了一个数量级 RocketMQ&#xff1a;10万级&#xff0c;RocketMQ也是可以支撑高吞吐的一种MQ Kafka&#xff…

Python的requests库实现HTTPS

嘿&#xff0c;Python程序员们&#xff01;今天我们要来点刺激的——使用Python的requests库实现HTTPS请求&#xff01;是的&#xff0c;你没有听错&#xff0c;我们要一起迈入HTTPS的神秘世界&#xff01; 首先&#xff0c;我们来了解一下HTTPS是什么。HTTPS是HTTP Secure的缩…

BUU SQL COURSE 1

四 发现有登录框&#xff0c;爆破半天也爆破不出来&#xff0c;只能从别的地方下手了 F12一下 发现了一个传参 进去发现id可以传参&#xff0c;sql注入一下试试 前三个都有回显&#xff0c;当id4的时候页面没有回显了&#xff0c;正好验证 了页面 有三个新闻 当order by 3的时…

ROS-ROS通信机制-服务通信

文章目录 一、服务通信基本知识二、自定义srv三、C实现四、Python实现 一、服务通信基本知识 服务通信也是ROS中一种极其常用的通信模式&#xff0c;服务通信是基于请求响应模式的&#xff0c;是一种应答机制。也即: 一个节点A向另一个节点B发送请求&#xff0c;B接收处理请求…

我想修改vCenter IP地址

部署vCenter Server Appliance后&#xff0c;您可以在vCenter修改DNS设置并选择域名服务器使用。您可以编辑vCenter Server Appliance的IP地址设置。从vSphere 6.5开始正式支持vCenter修改IP地址。因此可以更改vCenter Server Appliance的IP地址和DNS设置。 注意&#xff1a;更…

Vue--第六天

vuex概述&#xff1a; 组件通信感觉有点白雪。。。。。。。。。。 创建项目&#xff1a; 为了学习简介&#xff0c;先选几个&#xff0c;后续是要勾选很多的 建好后再进行组件导入 创建空仓库&#xff1a; 使用&#xff1a; 上面是store访问&#xff0c;下面是辅助函数的方式…

[LeetCode] 167. 两数之和 II - 输入有序数组

167. 两数之和 II - 输入有序数组 题干 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 ** 非递减顺序排列 **&#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[2] &#xff0c;则 …

centos 7.9 二进制部署 kubernetes v1.27.7

文章目录 1. 预备条件2. 基础配置2.1 配置root远程登录2.2 配置主机名2.3 安装 ansible2.4 配置互信2.5 配置hosts文件2.6 关闭防firewalld火墙2.7 关闭 selinux2.8 关闭交换分区swap2.9 修改内核参数2.10 安装iptables2.11 开启ipvs2.12 配置limits参数2.13 配置 yum2.14 配置…

HarmonyOS学习--TypeScript语言学习(二)

本章目录如下&#xff1a; 一、基础类型 二、运算符 三、变量声明 四、类型断言 五、类型推断 TypeScript支持一些基础的数据类型&#xff0c;如布尔型、数组、字符串等&#xff0c;下文举例几个较为常用的数据类型&#xff0c;我们来了解下他们的基本使用。 关于let 我们…

ctfshow sql 186-190

186大小写绕过 1 order by 3-- 发现union select被过滤&#xff0c;用大小写来绕过 1 union seleCT 1,2,database() --1 union seleCT 1,2,table_name from information_schema.tables where table_schemactfshow_web --1 union seleCT 1,2,column_name from information_schem…

Postman和Apifox针对不同环境、全局变量的使用与比较

文章目录 一、Postman1、配置环境和全局变量2、验证3、存在问题分析 二、Apifox1、配置环境和全局参数2、创建公共脚本3、测试 总结 一、Postman 1、配置环境和全局变量 在Postman的界面中&#xff0c;点击"Environment"&#xff0c;添加我们需要的环境&#xff0c…

数据库管理-第123期 Oracle相关两个参数(202301205)

数据库管理-第123期 Oracle相关两个参数&#xff08;202301205&#xff09; 最近在群聊中看到俩和Oracle数据库相关的俩参数&#xff0c;一个是Oracle数据库本身的&#xff0c;一个是来自于Weblogic的&#xff0c;挺有趣的&#xff0c;本期研究一下。&#xff08;本期涉及参数…

[英语学习][8][Word Power Made Easy]的精读与翻译优化

[序言] 下面这段话, 译者的翻译, 没有太大的问题. 就是有点小小的偏差. 大家可以看看我的优化. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家这次能学到东西, 同时加入我的社区讨论与交流英语相关的内容. [原著英文与翻译版对照][第19]…

C++-空指针调用不会引起crash

以前存在一个误解&#xff0c;只要是对空指针访问就会引起程序崩溃&#xff0c;实际上却不是&#xff0c;如下代码&#xff1a; #include <iostream>class A { public:void func(){std::cout << "call func" << std::endl;int a n; // 注释本行不…

ppt转换成pdf文件

最近用到了&#xff0c;记一下&#xff1b; ppt转pdf分为两种情况: 小于2007版本的 .ppt格式&#xff08;2003&#xff09; 与大于2007版本的 .pptx格式&#xff08;2007&#xff09; .ppt格式为 二进制文件 .pptx格式为xml格式&#xff0c;在java中有不同的jar包需要使用 引入…

uniapp踩坑之项目:使用过滤器将时间格式化为特定格式

利用filters过滤器对数据直接进行格式化&#xff0c;注意&#xff1a;与method、onLoad、data同层级 <template><div><!-- orderInfo.time的数据为&#xff1a;2023-12-12 12:10:23 --><p>{{ orderInfo.time | formatDate }}</p> <!-- 2023-1…

QList简单使用

1.插入 头插&#xff1a; QList<int> list {2, 3, 4}; list.prepend(1); // 在头部插入元素1尾插&#xff1a; list.append(5); // 在尾部插入元素5 中间插&#xff1a; QList<int> list {1, 2, 4, 5}; list.insert(2, 3); // 在索引为2的位置插入元素3list…