微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 计数器的代码不能被综合

计数器的代码不能被综合

时间:10-02 整理:3721RD 点击:

用verilog写了个计数器的代码,异步复位,clk的高电平期间对fin计数,clk的下降沿输出计数值,modelsim里面做功能仿真没啥问题,但是DC综合的话就不行,报cout[6:0]和counter_buf[6:0]被多个源驱动,但是我查不出错误在哪儿,请教各位帮忙看看

  1. //Verilog HDL for "pll_system_sim", "COUNTER_AFC" "verilog"

  2. module COUNTER_AFC(clk,fin,reset,cout);
  3.   input clk,fin,reset;
  4.   output [6:0]cout;
  5.   reg [6:0]cout;
  6.   reg [6:0]counter_buf;
  7.   
  8.   always @(posedge reset or posedge fin)
  9.     if (reset)
  10.       begin                                    
  11.         counter_buf[6:0] <= 7'b0000000;
  12.         cout[6:0] <= 7'b1111111;
  13.       end
  14.     else if (clk)   
  15.       counter_buf[6:0] <= counter_buf[6:0] + 1;
  16.   always @(negedge clk)
  17.     if (!reset)
  18.             begin
  19.               cout[6:0] <= counter_buf[6:0];
  20.         counter_buf[6:0] <= 7'b0000000;
  21.       end
  22. endmodule

复制代码



错误比较多
reg只能在一个always块里赋值,你用了2个
15行中的clk怎么做为使能信号?
建议把时序图先画出来再理解透彻了再写代码吧。
看得比较乱

一个寄存器不能在2个always块里赋值,而且一般同步时序设计里面把clk信号用作时钟而非使能。
一般clk的频率要远大于fin的频率,感觉你对计数器电路的实现原理没弄透,做这个设计不像C语言,还是要看硬件时序的。



    我这个计数器是对fin计数,fin的频率远高于clk,clk上升沿开始对fin计数,计数方式是采集fin的上升沿,clk下降沿计数结束并输出结果,如果没有异步复位倒也不难弄,有这个异步复位就不知道怎么弄了。本人是搞模拟的,数字方面接触不多。



    这个电路的电路图应该是怎样的呢?
画一下你就知道为什么了。

1、使用fin得到clk的沿
2、上升沿计数。 不知道你的下降沿是否清0
3、下降沿输出


不太明白你的意思
clk下降沿输出计数值并保持到下一个下降沿来临之前,cout不用清零,但counter_buf要清零的

就这点东西,function能对才怪呢。回家好好看看书,基础的东西自己多学习

1、使用fin得到clk的沿,不知道同步异步的关系,假定为同步
2、下降沿输出
always @(posedge fin or posedge reset)
    if(reset)
        clk_d1 <= 1'b0;
    else
        clk_d1 <= clk;
assign        clk_negedge = clk_d1==1'b1 && clk==1'b0;
always @(posedge fin or posedge reset)
    if(reset)
        counter_buffer <= 7'b0;
    else (clk) //饱和翻转
        counter_buffer <= counter_buffer + 1;
    else
        counter_buffer <= 7'b0
always @(posedge fin or posedge reset)
    if(reset)
        counter <= 7'b0;
    else if(clk_negedge)
        counter <= counter_buffer;

另外,fin不是时钟的话怎么能写到敏感列表里?这是绝对错误的。



    小编这个很给力,特别是下降沿的判断……

呵呵,做射频的哥们来写代码了!求一点AFC资料啊!

比较乱,还是学习了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top