在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2410|回复: 18

[求助] spyglass lint检查报错:关于三态门使能信号控制

[复制链接]
发表于 2024-9-24 15:08:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在spyglass lint检查时会报错:

STARC05-2.5.1.2 (4) : Logic must not exist in tristate enable conditions


Tristate buffer 'sda' has logic in enable condition. [Hierarchy: 'tb_top_fpga.u_gm_digital.u_i2c_master_top.u_i2c_master']


Tristate buffer 'sda_in' has logic in enable condition. [Hierarchy: 'tb_top_fpga.u_gm_digital.u_i2c_master_top.u_i2c_master']


源代码是:assign sda = sda_dir ? sda_out : 1'bz;
其中sda_dir 是reg类型变量,在master的状态机中驱动,报错原因显示我三态门的使能信号存在逻辑,不明白怎么修改这的代码了。

                               
登录/注册后可看大图


 楼主| 发表于 2024-9-24 15:09:37 | 显示全部楼层
其中报错的STARC Rule具体文档是这样的

                               
登录/注册后可看大图
发表于 2024-9-25 09:41:55 | 显示全部楼层
对于芯片设计代码,双向口是在最顶层例化对应双向PAD来实现的,内部逻辑不能出现
assign sda = sda_dir ? sda_out : 1'bz;
这种写法。

需要把sda_dir, sda_out, sda信号连到所例化的PAD上。
 楼主| 发表于 2024-9-25 10:04:26 | 显示全部楼层


liuguangxi 发表于 2024-9-25 09:41
对于芯片设计代码,双向口是在最顶层例化对应双向PAD来实现的,内部逻辑不能出现
assign sda = sda_dir ? s ...


您好,有点不明白的是,比如我的芯片最顶层是A,那么我A的IO应该是sda_dir、sda_out还是sda;
如果是sda_dir、sda_out,那么三态门的逻辑在哪里实现呢;
如果是sda,那么在顶层A里也要有“assign sda = sda_dir ? sda_out : 1'bz;”这种逻辑吧;
忘解答,感谢!!!
发表于 2024-9-25 12:14:54 | 显示全部楼层


Patrick0809 发表于 2024-9-25 10:04
您好,有点不明白的是,比如我的芯片最顶层是A,那么我A的IO应该是sda_dir、sda_out还是sda;
如果是sda_ ...


顶层例化的PAD里面就实现了双向口逻辑,你可以看看PAD的行为级仿真模型
发表于 2024-9-25 12:46:58 | 显示全部楼层


Patrick0809 发表于 2024-9-25 10:04
您好,有点不明白的是,比如我的芯片最顶层是A,那么我A的IO应该是sda_dir、sda_out还是sda;
如果是sda_ ...


顶层的端口sda是inout,iic控制逻辑的端口dir是输出,in是输入。顶层例化gpio pad。pad的en连dir(或!dir),pad的out连in,pad的in可以tie0。三态电路是做在pad里的,不写成rtl。
 楼主| 发表于 2024-9-25 14:06:03 | 显示全部楼层


liuguangxi 发表于 2024-9-25 12:14
顶层例化的PAD里面就实现了双向口逻辑,你可以看看PAD的行为级仿真模型


好的,谢谢。我是第一次自己做一颗芯片,没做过芯片顶层,不知道还需要例化PAD模型,感谢解惑。
 楼主| 发表于 2024-9-25 14:12:28 | 显示全部楼层


upsidedown 发表于 2024-9-25 12:46
顶层的端口sda是inout,iic控制逻辑的端口dir是输出,in是输入。顶层例化gpio pad。pad的en连dir(或!dir ...


感谢解惑,意思就是在顶层例化一个module PAD,然后将iic接口例化上去,现在就是没有PAD的模型了,在网上找到:

module PADUP(
   //DIN, pad driver when pad configured as output
   //OEN, pad direction(1-input, o-output)
   input        DIN, OEN ,
   inout        PAD ,
   //pad load when pad configured as input
   output       DOUT
  );
   //inputnot effect pad external input logic), output: DIN->AD
   bufif0 (PAD, DIN, OEN) ;     //0-output
   bufif1 (DOUT, PAD, OEN) ;    //1-input
   pullup (PAD);
   //pulldown (PAD);   //pulldown
endmodule

不知道可以不可以直接使用。
 楼主| 发表于 2024-9-25 15:24:00 | 显示全部楼层
谢谢大家,已经解决了,仿真pass了,spyglass也没有lint了。留个纪念

                               
登录/注册后可看大图


                               
登录/注册后可看大图

 楼主| 发表于 2024-9-25 15:58:52 | 显示全部楼层
本帖最后由 Patrick0809 于 2024-9-26 09:23 编辑

问题解决了,感谢大家的解答


您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-24 00:08 , Processed in 0.049707 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表