会综合出带 clock gating 的dff ?

请问,
如下代码:

  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)

    就是综合成dff啊,怎么会综合成latch了?
    还有,你这段代码有问题:
    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)

    rst_n 放到敏感表里才会综合出异步得
  • lionking_2046 (2008-9-06 22:11:40)

    回2楼的,谢谢你的回复.
    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)

    没什么可说的,就是一个D触发器。
    而且是同步复位的并且是带Enable的。
  • shaweikang1984 (2008-9-07 21:54:43)

    DFF是FPGA的最基本单元之一了,所以没法进入DFF看到门级结构
  • liuxiaowei (2008-9-08 09:13:57)

    综合是要靠软件来实现的,但是最终还是取决于硬件,比如在Altera的cyclone II器件中,其最小的结构单元是LE,LE里面有LUT和DFF,DFF好像有七个可供使用的控制端,具体的可以去查手册,同步置位,同步load,异步复位,时钟,使能等等。所以综合工具会根据代码风格来综合,比如说在这个列子中吧,always中用的posedge clk,应该会综合成一个dff,但是dff有使能端可供使用,所以不会综合成latch。
       latch在组合逻辑的综合中会出现,条件写的不完全会综合出latch。
       所以在写代码的时候要了解一些硬件的结构会很有帮助,希望上面的这些能对你有所帮助
  • lionking_2046 (2008-9-08 10:10:58)

    谢谢liuxiaowei,
    用clk触发的当然会是触发器,而不是latch ,这个是自然.
    简化一下我的问题是,这个代码综合出的dff ,它带有enable控制,
    这个enable具体是怎么实现控制的?
    clock gating ?
    确实不能进入这个cell来看个究竟.
  • liuxiaowei (2008-9-08 10:26:50)

    回楼上的
    这个你找一本数电的书,或者找芯片的Datasheet也许能找到答案
  • icdesigner2004 (2008-9-09 00:12:48)

    其实综合出的是一个带有存储功能的寄存器,这是好无疑问的,cnt为1时更新。
    根据综合的工具对库的支持可能有两种电路:
    1、当综合库里有Clockgating的寄存器,且综合工具支持,则可以综合出clockgate 的寄存器;
    2、若以上2条件不满足,则综合出一个D触发器,可能带有E端可能没有啊,与库有关的;
  • icdesigner2004 (2008-9-09 00:14:30)

    我在coding是就是这么描述的啊,综合时工具可以识别成门控时钟电路的,俺们自家的库
  • sunsibing (2008-9-09 08:21:27)

    QUOTE:

    原帖由 lionking_2046 于 2008-9-8 10:10 发表
    谢谢liuxiaowei,
    用clk触发的当然会是触发器,而不是latch ,这个是自然.
    简化一下我的问题是,这个代码综合出的dff ,它带有enable控制,
    这个enable具体是怎么实现控制的?
    clock gating ?
    确实不能进入这个cell来 ...
    应该是一个二选一的mux,选择端为enable信号,两个输入信号一个为B,一个就是D触发器的Q端,输入接到D触发器的D端上
  • hover_edacn (2008-9-09 09:16:58)

    lz的代码等效如下:
    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)

    ISE 中综合试验后,
    上述代码改为全条件赋值后, 综合出一个基本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)

    最近我在修改我之前的代码, 刚好就是为了 clock gating. 我问了一下老工程师, clock gating是当你需要减少power 的时候,把已经综合好的网表输入 power compiler进行power优化(前提是你的RTL符合以下格式). 比如我们是这样写的:

    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:

    原帖由 boyzuo 于 2008-9-22 07:38 发表
    最近我在修改我之前的代码, 刚好就是为了 clock gating. 我问了一下老工程师, clock gating是当你需要减少power 的时候,把已经综合好的网表输入 power compiler进行power优化(前提是你的RTL符合以下格式). 比如我们是 ...
    楼上高见!!!!
  • jayh (2008-9-23 22:05:06)

    QUOTE:

    原帖由 boyzuo 于 2008-9-22 07:38 发表
    最近我在修改我之前的代码, 刚好就是为了 clock gating. 我问了一下老工程师, clock gating是当你需要减少power 的时候,把已经综合好的网表输入 power compiler进行power优化(前提是你的RTL符合以下格式). 比如我们是 ...
    直接在DC脚本里设置clock gating相关条件就可以了吧,跟代码风格有关?
  • lionking_2046 (2008-9-25 14:01:01)

    QUOTE:

    原帖由 jayh 于 2008-9-23 22:05 发表

    直接在DC脚本里设置clock gating相关条件就可以了吧,跟代码风格有关?
    你可以用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;