发信人: iNero (fantastic), 信区: METech
标 题: Re: 请问这种RTL写法是正确的么? 信号的复位值是一个变量?
发信站: 水木社区 (Wed Feb 9 14:25:15 2022), 站内 [累计积分奖励: 300/0]
一堆人不动手试试就在那里扯coding style,stdcell,lz也是自己动手试试不就知道了?这么简单的问题还要问。
首先说结论,这种写法肯定是可以综合的。
从逻辑角度分析,需要在drst_n有效时复位,复位的值可能是0可能是1。一般来说只带set或者reset的dff只能复位到1或者0,所以综合的结果有两种:
1. 如果综合的lib里面有同时带set和reset的dff(一般都有),那综合出来就是bw_32与drst_n做组合逻辑后分别接到dff的set和reset端。组合逻辑其实就是满足,drst_n有效时,bw_32若为1,则set端有效(q输出1),bw_32若为0,则reset端有效(q输出0)。如果bw_32只是一个简单信号,set和reset前的组合逻辑非常简单,就是简单的与/或门,如果bw_32本身是一堆组合逻辑产生,那set和reset前的这堆组合逻辑可能非常复杂,不过原理都是一样。
2. 如果综合的lib里面没有同时带set和reset的dff,则综合出来应该有两个dff,一个带set,一个带reset,然后根据bw_32 mux一下,类似于上面有网友用fpga实现的效果。
再说coding style,确实不好,主要的问题是仿真的时候x可能传播,比如bw_32是x。另外会让做reset tree和做dff到set/reset端timing分析变得复杂。正标准的做法一般都是复位到0或者1,然后通过一个用步的enable来复位到bw_32,比如
always@(posedge dclk or negedge drst_n)
if(~drst_n)
addr <= 1’b0;
else if (bw_32_chg_en)
addr <= bw_32;
else
…..
更新一下:
刚才用dc试了,第一种情况跟分析的预期一致。第二种情况跟上面分析的不一致,因为找不到对应的lib cell(dont use了),dc没法mapping。
【 在 atlandis (atlandis) 的大作中提到: 】
: 发信人: atlandis (atlandis), 信区: METech
: 标 题: 请问这种RTL写法是正确的么? 信号的复位值是一个变量?
: 发信站: 水木社区 (Mon Feb 7 09:21:02 2022), 站内 [累计积分奖励: 100/0]
:
--
发自xsmth (iOS版)
--
※ 修改:·iNero 于 Feb 9 14:59:06 2022 修改本文·[FROM: 171.218.38.*]
※ 来源:·水木社区
http://m.mysmth.net·[FROM: 171.218.38.*]
修改:iNero FROM 171.218.38.*
FROM 171.218.38.*