使用generate在Verilog中的环形振荡器

时间:2018-08-17 17:19:07

标签: module verilog

我正在寻找在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个以上的反相器)。这是正确的还是我错过了什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

对于环形振荡器,您需要延迟。您使用的//service getData(url: string): Observable<any> { return this.http.get(url).pipe( map(this.extractData), catchError(this.handleErrorObservable)); } private extractData(res: Response) { let body = res; console.log(res) return body || {}; } refreshData(data) { this.getData(this._url) .subscribe(result => { data = result console.log(data) }); } 门是理想模型,因此在仿真中没有延迟。

最简单的方法是在闸门上添加延迟:

not

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

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