微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 看看我这5分频器哪儿出错了

看看我这5分频器哪儿出错了

时间:10-02 整理:3721RD 点击:
module fenpinqi(fout,clock,reset);
  output fout;
  input clock,reset;
  integer i;
  reg fout;
  always @(posedge clock,reset)
  begin
    if(reset)
    begin
      i<=0;
      fout<=0;
    end
   
    if(i==2)
      begin
        fout=~fout;
        i<=i+1;
      end
    if(i==4)
      begin
        fout=~fout;
        i<=0;
      end
      i<=i+1;
    end     
  endmodule
这是测试
        module fenpinqitest;
  wire fout ;
  reg clock,reset;
  
  fenpinqi f(fout,clock,reset);
  
  initial
  begin
    clock=1'b0;
    forever #20 clock=~clock;
  end
  
  initial
  begin
    reset=1'b1;
    forever #100 reset=~reset;
  end
  
endmodule
仿真


呵呵,你这个是6分频,不是5分频;
要做奇数分频,要检测每个边沿,不止是上升沿;
因为奇数个周期里面要输出高电平和低电平,每个电平期间包含x.5个时钟周期的宽度,那么这0.5个时钟如何判断呢?这个可以自己考虑一下;
或者按你的方法可以做成占空比非50%的分频输出,高、低电平的宽度相差1个时钟周期!这个也可以自己考虑下该怎么做。

另外为什么fout一直是0 ,我写成6分频的话,输出总该有吧。能解答一下么,谢谢

这个还真回答不上来,我的硬件描述语言还没学透,上面的回答只是从其他方面的知识给你的意见,不好哦意思哈

你的testbench时间太短了,module fenpinqi_testbench_v;
  wire fout ;
  reg clock,reset;
  
  fenpinqi f(fout,clock,reset);
  
  initial
  begin
    clock=1'b0;
    forever #10 clock=~clock;
  end
  
  initial
  begin
    #10 reset=1;
         #20 reset=0;
   
  end
  
      
endmodule
改成这个就好了

是reset为0的时间太短了不足以发生变化

还是很谢谢您能回答

我用的是forever 一直在翻转,reset时间间隔为100单位,应该不短啊

我都仿过了,你按我说的试一下,你就知道问题出在哪了

你时钟周期40,reset时间才100,这才两个周期,你怎么分频呢。

明白了,原来是这样啊,谢谢谢谢啊

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

网站地图

Top