【问题标题】:Ring Oscillator in Verilog using generateVerilog中使用generate的环形振荡器
【发布时间】:2018-08-17 17:19:07
【问题描述】:

我希望在 Verilog 中创建一个环形振荡器,使用逆变器并生成。 到目前为止,这是我尝试过的:

module ringOsc(outclk);
    parameter SIZE = 8; // This needs to be an even number
    output outclk;
    wire [SIZE : 0] w;

    genvar i;
    generate
        for (i=0; i<SIZE; i=i+1) begin : notGates
            not notGate(w[i+1], w[i]);
        end
        not notGateFirst(w[0], w[SIZE]);
    endgenerate

    assign outclk = w[0];

endmodule

这将被加载到 FPGA 上并测量振荡频率(当然有超过 9 个逆变器)。这是正确的还是我错过了什么?任何帮助将不胜感激。

【问题讨论】:

    标签: module verilog


    【解决方案1】:

    对于环形振荡器,您需要有一个延迟。您使用的not 门在仿真中没有这样的延迟,因为它们是理想的模型。

    最简单的就是给门加一个延迟:

    not #(5,5) notGate(w[i+1], w[i]);
    
    not #(5,5) notGateFirst(w[0], w[i]);
    

    en 启用也是一个好习惯:其中一个门是 NAND 门。

    您还需要告诉该工具不要优化您的环形振荡器。为此,您必须查看 FPGA 的综合工具,尤其是防止逻辑优化的约束设置。将中间网络定义为“保持”可能有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      相关资源
      最近更新 更多