回覆列表
  • 1 # 使用者6064416536743

    建議你先將BZQ,TSQ設成常數,再試試。

    看了你的程式碼,覺得除了設計之外,有幾個問題。

    1.verilog不是C語言。實現乘除法時,直接寫運算子雖然可以綜合,但邏輯很深,時序會很差。例如:if(cnt=(BZQ/TSQ)*duty/100),這樣的邏輯深度是可怕的,估計只能跑到幾MHz。你所遇到的問題不排除是時序問題(timing issue)。

    2.第一個always塊很不規範,而且不是同步電路。更好的實現方法是:

    always @(posedge BCLK)

    begin

    if(~START)

    begin

    start

    end

    end

    3.系統沒有復位訊號。所有的數字系統應當有系統復位。always塊應當用這樣的模板:

    always @(posedge mclk or posedge mrst)

    begin

    if(mrst)

    begin

    reg1

    end

    else

    begin

    if (...)

    begin

    reg1

    end

    else

    begin

    reg1

    end

    end

    end

    4.訊號或暫存器名稱不能靠大小寫區分。雖然verilog大小寫是敏感的,但沒有公司會允許大小寫混用,一般都規定統一大寫或小寫,更何況是一樣的名稱,僅靠大小寫區分。如START,可以改成,start_in。

  • 中秋節和大豐收的關聯?
  • 窗套和窗做一個色好嗎?