- 主题:请问这种RTL写法是正确的么? 信号的复位值是一个变量?
【 在 atlandis 的大作中提到: 】
: 既然可综合,而且arm的cpu也有这种写法, 那么怎么能知道电路和仿真的差别在哪呢?
:
https://bbs.eetop.cn/thread-919034-3-1.html
eetop上之前就讨论过,简单来说就是rtl前仿的时候可能q只会在rst下降沿的时候随着bw_32的值变化一次,而网表后仿和实际电路的行为就是rst低电平时q一直随着bw_32的变化而变化,引起这个差别的原因是vcs理解时序触发的条件就是你always后面括号里的posedge和negedge,但是写的人又希望实际逻辑是下面的if(!rst)的逻辑,把组合的连续赋值逻辑和时序触发逻辑搞在一起了,vcs看到这样的写法也很难办啊。至于dc综合出来的电路在上面的链接里有人贴出来了
--
FROM 116.236.47.*
sta的角度set和reset是要特殊处理?b动态变的话异步复位会有毛刺?dft的角度是复位不可控?如果b可控是不是dft没问题?
--
FROM 119.136.31.*
nlint没报error或者warning不代表没问题啊,检查一下你的nlint规则是不是设置太宽松
【 在 atlandis 的大作中提到: 】
: 我本来也觉得会报错,或者有warning,但是vcs nlint dc 这三个我试过warning都没有,而且 formal 也是success。。。。
:
--
FROM 1.83.125.*
对,这种是常规解决方案,不需要通过异步reset来赋值,干嘛非要挑战工具和后端
【 在 scholar000 的大作中提到: 】
: 在同事的代码中见过这种风格,本意是通过一个寄存器配置某些信号的默认值,比如PAD IO的默认值希望可以配置。
: 应该是可以综合的,也可以上FPGA,对后端的影响未知。
: 但lint是会报出这种问题的,我就是在lint上检查出同事的代码问题。。。。后来把它改掉了,其实就是加个类似同步reset的信号进行控制就可以了。
: ...................
--
FROM 1.83.125.*
是的,我最近的项目也这样写的,然后仿真很容易出错,最后还是改掉了,这样写比较简单,但是容易出错,虽然实际工作时不一定会出错。
【 在 ucom 的大作中提到: 】
:
https://bbs.eetop.cn/thread-919034-3-1.html: eetop上之前就讨论过,简单来说就是rtl前仿的时候可能q只会在rst下降沿的时候随着bw_32的值变化一次,而网表后仿和实际电路的行为就是rst低电平时q一直随着bw_32的变化而变化,引起这个差别的原因是vcs理解时序触发的条件就是你always后面括号里的posedge和negedge,但是写的人又希望实际逻辑是下面的if(!rst)的逻辑,把组合的连续赋值逻辑和时序触发逻辑搞在一起了,vcs看到这样的写法也很难办啊。至于dc综合出来的电路在上面的链接里有人贴出来了
--
FROM 122.224.135.*
这要设计者这么写的时候有这种需求就好。
比如这个rst是一个局部的复位,rst值来源于另外部分的准静态信号。的确见过这种写法。
这种写法不推荐。因为不注意的话会有其他风险
--
FROM 114.93.188.*
一群人东拉西扯的。就这兄弟说得很清楚了。既然是可综合语句,综合器必须要知道到底调用哪种类型复位的dff
【 在 jthuster 的大作中提到: 】
: 异步复位要么是1要么是0,因为stdcell就是这么做的。异步复位用变量的话,综合出来是啥?除非是parameter或者genvar之类的。否则工具(vcs spyglass dc之类的)应该会报错。
: 发自「今日水木 on K40」
--
FROM 180.167.241.*
综合工具比你想的聪明多了,即使没有拿来就能完全符合的dff,人家也可以对复位信号进行处理再用普通的带复位置位的dff来实现,永远不要小看经过几十年检验的工具和几百上千号做工具的人,说实话现在流传的很多所谓的代码技巧在编译器和综合工具眼里都是笑话了,不管是软件还是硬件
【 在 frank1123 的大作中提到: 】
: 一群人东拉西扯的。就这兄弟说得很清楚了。既然是可综合语句,综合器必须要知道到底调用哪种类型复位的dff
--
FROM 116.236.47.*
千万不要挑战工具
【 在 ucom 的大作中提到: 】
:
: 综合工具比你想的聪明多了,即使没有拿来就能完全符合的dff,人家也可以对复位信号进行处理再用普通的带复位置位的dff来实现,永远不要小看经过几十年检验的工具和几百上千号做工具的人,说实话现在流传的很多所谓的代码技巧在编译器和综合工具眼里都是笑话了,不管是软件还是硬件
: 【 在 frank1123 的大作中提到: 】
: : 一群人东拉西扯的。就这兄弟说得很清楚了。既然是可综合语句,综合器必须要知道到底调用哪种类型复位的dff
:
#发自zSMTH@EVR-L29
--
FROM 111.65.69.*
这么写库里找不到对应的flop cell,reset值都是确定的,不知道综合器会怎么翻译。
如果真有这样的function,还不如写成这样:
assign addr = (drst_n == 1'b0) ? ~addr_tmp & bw_32 : addr_tmp;
always@(posedge dclk or negedge drst_n)
if(~drst_n)
addr_tmp <= 0;
else
--
FROM 27.115.119.*