请问,
如下代码:
reg [1:0] led;
always @ ( posedge clk )
if ( !rst_n )
led <= 2'b00;
else if (cnt == 1'b1)
led <= B;
其中 led 会综合成什么?
我认为应该是带clock gating 的 dff , 对么?
[ 本帖最后由 lionking_2046 于 2008-9-6 22:11 编辑 ]



最新回复
liuxiaowei (2008-9-05 19:07:18)
还有,你这段代码有问题:
reg [1:0] led;
led <= 1'b1; //led是2 bits
图是用Synplify综合出来的结果,rst应该是个同步信号
Synplify-9.4 result.jpg
liuxiaowei (2008-9-05 19:11:33)
dff的reset信号一般是异步的,这个地方用Synplify综合出来成为一个同步的,这是为什么?
kevin249 (2008-9-05 19:23:57)
lionking_2046 (2008-9-06 22:11:40)
led 是2 bit 的, 这是个笔误.(已经修改)
上面的写法的rst 是同步的,你把rst放在触发列表里,就是异步的,三楼说的没错.
我的问题主要是这样的不完全赋值, 综合出来的是怎样的存储器件.
因为是clk触发, 并且在always中赋值, 所以是个dff , 但又不是基本的dff, 因为在条件赋值中,缺少了一个else赋值, 所以我认为是clock gating 的dff .
我用ise综合的,但是看不到综合出来的dff里面到底是怎样,所以上来问问.
怎样能进入这个综合出来的dff看个究竟?
sun82 (2008-9-06 22:42:17)
dulianwei (2008-9-07 12:03:15)
而且是同步复位的并且是带Enable的。
shaweikang1984 (2008-9-07 21:54:43)
liuxiaowei (2008-9-08 09:13:57)
latch在组合逻辑的综合中会出现,条件写的不完全会综合出latch。
所以在写代码的时候要了解一些硬件的结构会很有帮助,希望上面的这些能对你有所帮助
lionking_2046 (2008-9-08 10:10:58)
用clk触发的当然会是触发器,而不是latch ,这个是自然.
简化一下我的问题是,这个代码综合出的dff ,它带有enable控制,
这个enable具体是怎么实现控制的?
clock gating ?
确实不能进入这个cell来看个究竟.
liuxiaowei (2008-9-08 10:26:50)
这个你找一本数电的书,或者找芯片的Datasheet也许能找到答案
icdesigner2004 (2008-9-09 00:12:48)
根据综合的工具对库的支持可能有两种电路:
1、当综合库里有Clockgating的寄存器,且综合工具支持,则可以综合出clockgate 的寄存器;
2、若以上2条件不满足,则综合出一个D触发器,可能带有E端可能没有啊,与库有关的;
icdesigner2004 (2008-9-09 00:14:30)
sunsibing (2008-9-09 08:21:27)
QUOTE:
应该是一个二选一的mux,选择端为enable信号,两个输入信号一个为B,一个就是D触发器的Q端,输入接到D触发器的D端上hover_edacn (2008-9-09 09:16:58)
assign reg_in[1:0] = (!rst)? 2'b00 : (cnt == 1'b1)? B : led;
always @(posedge clk)
led <= reg_in;
lionking_2046 (2008-9-09 11:33:27)
上述代码改为全条件赋值后, 综合出一个基本DFF,这没问题.
而上述代码,因为是不完全赋值,所以综合出一个带clock enabel端 的DFF ,
没有查到clock enabel的具体实现,认为其就是一个clock gating .
14楼说的mux, 没有出现,我换了几种形式都没有mux,只有 带clock enabel端 的DFF .
可能xilinx的库中只有这种形式, 也许在ASIC的库中有带mux的DFF?
这个讨论就是想确定, clock 触发下的不完全条件赋值,综合出的触发器是什么样子.
现在基本确定就是个带clock gating 的DFF,
谢谢以上同学们的讨论
hitten (2008-9-22 00:03:20)
应该是带有反馈逻辑的触发器
boyzuo (2008-9-22 07:38:37)
always @ ( posedge clk or negedge rst_n)
if ( ! rst_n )
reg_A <= 1'b0;
else if ( !bypass)
reg_A <= Some_Data;
这样一来,只有在某个使能信号有效的时候DFF才工作, 达到减少power的目的. 这种coding style几年前是不推荐的,因为当时工具不能很好的辨认clk路径,你相当与加了一些逻辑在clk路径上. 现在随着工具的进步,不在是问题了.
mafan88 (2008-9-23 21:10:01)
QUOTE:
楼上高见!!!!jayh (2008-9-23 22:05:06)
QUOTE:
直接在DC脚本里设置clock gating相关条件就可以了吧,跟代码风格有关?lionking_2046 (2008-9-25 14:01:01)
QUOTE:
你可以用DC试试,综合一下缺少else赋值的clk触发的reg,比如:always @ ( posedge clk or negedge rst_n)
if ( ! rst_n )
reg_A <= 1'b0;
else if ( !bypass)
reg_A <= Some_Data;