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

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

便捷登录,只需一步

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!)    创芯人才网--重磅上线啦!
查看: 345|回复: 11

[求助] 计数器的DC综合出现了问题

[复制链接]
发表于 2022-6-28 14:49:24 | 显示全部楼层 |阅读模式
20资产
我想通过DC来综合出一个那种简单的计数器,verilog代码如图一。我目标的电路结构图如图二(就是那种14个DFF的串联)。但是我综合出来的电路总是多了一些零零碎碎的东西(如图三),请问各位我该怎么去更改他呢?
image.png image.png image.png

最佳答案

查看完整内容

module dff (input clk, input rstn, input d, output reg q, output qn); always @ (posedge clk or negedge rstn) if (!rstn) q
发表于 2022-6-28 14:49:25 | 显示全部楼层
module dff (input      clk,
            input      rstn,
            input      d,
            output reg q,
            output     qn);  
   always @ (posedge clk or negedge rstn)  
     if (!rstn)  
       q <= 0;  
     else  
       q <= d;  
  
   assign qn = ~q;  
endmodule  

module Pixel_Digital_counter14b(lastcnt,counter_clear,q);
   input lastcnt;
   input counter_clear;
   output [13:0] q;

   wire [13:0] qn;
   generate
      genvar  i;
      for (i=0; i<14;i=i+1)
        if (i==0)
          dff dff_i ( .clk (lastcnt),  
                      .rstn (counter_clear),
                      .d (qn[i]),   
                      .q (q[i]),  
                      .qn (qn[i]));
        else
          dff dff_i ( .clk (qn[i-1]),  
                      .rstn (counter_clear),
                      .d (qn[i]),   
                      .q (q[i]),  
                      .qn (qn[i]));
   endgenerate
endmodule
回复

使用道具 举报

发表于 2022-6-28 14:55:36 | 显示全部楼层
你要的ripple counter, 你的代码写的是binary counter
如果你真的想要ripple counter,你应该能有上一个bit来做下一个bit的clock。
回复

使用道具 举报

发表于 2022-6-28 15:24:04 | 显示全部楼层
本帖最后由 songzijian87 于 2022-6-28 15:26 编辑

楼上正解,出问题不要怀疑工具,先反思一下自己
你想的电路和你写的电路都不一样

回复

使用道具 举报

 楼主| 发表于 2022-6-28 15:50:17 | 显示全部楼层


songzijian87 发表于 2022-6-28 15:24
楼上正解,出问题不要怀疑工具,先反思一下自己
你想的电路和你写的电路都不一样


嗯嗯好的 我是对DC没那么熟可能,我以为可以通过设置constraint来去除这些东西。原来是代码就错了。
回复

使用道具 举报

 楼主| 发表于 2022-6-28 15:51:17 | 显示全部楼层


navylin1 发表于 2022-6-28 14:55
你要的ripple counter, 你的代码写的是binary counter
如果你真的想要ripple counter,你应该能有上一个bi ...


好 我顺着您说的 再去试试 谢谢您
回复

使用道具 举报

发表于 2022-6-28 16:17:14 | 显示全部楼层
本帖最后由 ashish 于 2022-6-28 16:25 编辑

Check this out





  1. module dff (input      clk,
  2.             input      rstn,
  3.             input      d,
  4.             output reg q,
  5.             output     qn);  
  6.    always @ (posedge clk or negedge rstn)  
  7.      if (!rstn)  
  8.        q <= 0;  
  9.      else  
  10.        q <= d;  
  11.   
  12.    assign qn = ~q;  
  13. endmodule  


  14. module Pixel_Digital_counter14b(lastcnt,counter_clear,q);
  15.    input lastcnt;
  16.    input counter_clear;
  17.    output [13:0] q;


  18.    wire [13:0] qn;
  19.    generate
  20.       genvar  i;
  21.       for (i=0; i<14;i=i+1)
  22.         if (i==0)
  23.           dff dff_i ( .clk (lastcnt),  
  24.                       .rstn (counter_clear),
  25.                       .d (qn<i>),    </i><i>
  26.                       .q (q<i>),  </i><i>
  27.                       .qn (qn<i>));</i><i>
  28.         else
  29.           dff dff_i ( .clk (qn[i-1]),  
  30.                       .rstn (counter_clear),
  31.                       .d (qn<i>),    </i><i>
  32.                       .q (q<i>),  </i><i>
  33.                       .qn (qn<i>));</i><i>
  34.    endgenerate
  35. endmodule
  36. </i></i></i></i></i></i>


复制代码


回复

使用道具 举报

发表于 2022-6-28 16:30:01 | 显示全部楼层
module dff (input      clk,
            input      rstn,
            input      d,
            output reg q,
            output     qn);  
   always @ (posedge clk or negedge rstn)  
     if (!rstn)  
       q <= 0;  
     else  
       q <= d;  
  
   assign qn = ~q;  
endmodule  

module Pixel_Digital_counter14b(lastcnt,counter_clear,q);
   input lastcnt;
   input counter_clear;
   output [13:0] q;

   wire [13:0] qn;
   generate
      genvar  i;
      for (i=0; i<14;i=i+1)
        if (i==0)
          dff dff_i ( .clk (lastcnt),  
                      .rstn (counter_clear),
                      .d (qn[i]),   
                      .q (q[i]),  
                      .qn (qn[i]));
        else
          dff dff_i ( .clk (qn[i-1]),  
                      .rstn (counter_clear),
                      .d (qn[i]),   
                      .q (q[i]),  
                      .qn (qn[i]));
   endgenerate
endmodule
回复

使用道具 举报

 楼主| 发表于 2022-6-28 16:34:55 | 显示全部楼层


ashish 发表于 2022-6-28 16:30
module dff (input      clk,
            input      rstn,
            input      d,


哇塞 谢谢您 太麻烦您了(Thank you so much indeed!!!)
回复

使用道具 举报

发表于 2022-6-30 15:39:11 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

关闭

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

×

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

GMT+8, 2022-8-13 11:07 , Processed in 0.070350 second(s), 9 queries , Gzip On, Redis On.

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