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

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


在数字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为0

assign 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信息读取出来,从而达到快速定位问题的效果。

参考资料

IC设计高级007:异常处理设计三要素

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
经纬恒润数字ic设计是指在数字电路设计领域中,采用经纬恒润公司的相关技术和产品进行集成电路设计的过程。 经纬恒润是一家专注于数字ic设计领域的公司,拥有丰富的经验和先进的技术,提供全面的解决方案和设计服务。其数字ic设计涵盖了多个领域,包括通信、计算机、嵌入式系统等。公司拥有一支专业的设计团队,能够根据客户的需求和要求进行定制化设计,确保设计的符合客户的要求。 这种数字ic设计涵盖了多个方面。首先是流程设计,包括从需求分析、算法设计、系统设计到电路实现等,整个设计过程按照一定的流程和标准进行。其次是芯片设计,包括数字逻辑设计、时钟设计、功耗优化等。最后是芯片验证,包括功能验证、时序验证、模拟仿真等,确保设计的正确性和可靠性。 经纬恒润数字ic设计的优势在于其丰富的行业经验和专业的团队。公司已经在多个项目中积累了宝贵的经验,能够快速准确地理解客户的需求,并提供符合要求的解决方案。团队成员经过专业培训和实践,具备了扎实的专业知识和技能,能够熟练运用各种设计工具和方法。 总之,经纬恒润数字ic设计是一种通过应用经纬恒润公司的技术和产品进行集成电路设计的过程。它包括了流程设计芯片设计芯片验证等多个方面。经纬恒润数字ic设计的优势在于其丰富的行业经验和专业的团队,能够为客户提供定制化的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮宽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值