【问题标题】:clock division in two in verilogVerilog中的时钟一分为二
【发布时间】:2014-06-09 12:38:18
【问题描述】:

我正在尝试将输入时钟除以二;输出时钟应该是输入时钟频率的一半。

module clk_div(in_clk, out_clk, rst);
  input  in_clk;
  input  rst;
  output out_clk;
  reg    out_clk;

always @(posedge in_clk) begin
  if (!rst) begin
    out_clk <= 1'b0;
  end
  else 
    out_clk <= ~out_clk;
end
endmodule

测试平台是:

module dd;
  // Inputs
  reg clk_in;
  reg reset;

  // Outputs
  wire clk_out;

  // Instantiate the Unit Under Test (UUT)
  clk_div uut (
    .clk_in(clk_in), 
    .reset(reset), 
    .clk_out(clk_out)
  );

  always #10 clk_in =~clk_in ;

  initial begin
    // Initialize Inputs
    clk_in = 0;
    reset  = 0;
    #100;
    reset  = 1;
  end   
endmodule

输出波形仅显示正在生成的输入时钟。无论我尝试什么,输出时钟波形都不会出现。此代码对时钟除以 2 是否正确?

【问题讨论】:

    标签: verilog clock division


    【解决方案1】:

    您需要更改实例中的端口名称。将您的实例更改为:

    clk_div uut (
        .in_clk(clk_in), 
        .rst(reset), 
        .out_clk(clk_out)
    );
    

    通过此修复,我得到了一个除以 2 的结果。

    您的代码在我的 2 个模拟器上编译错误。

    【讨论】:

      【解决方案2】:

      我认为问题在于您需要使用逻辑否定运算符 (!) 而不是按位否定运算符 (~)。见信息here

      有关将时钟除以 2 的完整且经过验证的示例,see here

      【讨论】:

      • 对于单比特信号,这2个操作符是等价的。
      【解决方案3】:

      我将以下代码用于时钟分频器。只需更改参数并获得所需的输出...

       module clk_div(
                      clk,
                      rst,
                      count);
      
      parameter count_width=27;
      parameter count_max=25000000;
      
      output [count_width-1:0] count;
      reg [count_width-1:0] count;
      input clk,rst;
      
      
      initial
      count<=0;
      
      always@(posedge clk)
      if(rst)
      begin
          count=0;
      end
      
      
      else 
      begin
      if (count<count_max-1)
      begin
          count<=count+1;
      end
      
      
      else if (count==count_max)
      begin
          count <=~count;
      end
      
      
      else if (count>count_max)
      begin
          count<=0;
      end
      end
      endmodule
      

      【讨论】:

      • 我不认为这是合适的答案,因为它没有回答问题,当您告诉然后盲目复制您的代码时,它无助于任何人学习。
      猜你喜欢
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多