2013-04-02 55 views
4

以下代碼有什麼不同?時鐘產生的差異

initial begin 
    clk = 0 ; 
    forever begin 
    #5 clk = ~clk; 
    end 
end 


initial begin 
    clk = 0 ; 
    forever begin 
    clk = #5 ~clk; 
    end 
end 

我知道慣性和運輸延遲之間的差異,我知道時鐘在兩種情況下產生的(兩者之間的一些相位差),但我想知道模擬器的反應如何以下代碼。它是相同還是不同?就像在計算價值時考慮了多少事件?

+0

看起來很愚蠢,但它需要更深入的思考 – chitranna

回答

1

從使用點兩者之間的差:

#5 clk = ~clk;裝置等待5分時間步然後執行clk = ~clk;

電線B = #5 A;裝置B從5時間步前分配給。 A領先B 5次步。若B改變爲A = #5 A;

wire B; 
assign B= #5 A; 

用法用於引線由IEEE 1800-2012部覆蓋6.7淨聲明

從@ new2androids更新語法A = #5 B;,對於一個寄存器是從一個金屬絲的不同。 B每5個時間單位檢查一次,A立即分配值。這就是爲什麼它適用於測試平臺時鐘生成的原因。

至於模擬器如何反應,可能有一些標準的調度實踐,其他人可以評論,但程度可能取決於您正在使用的模擬器。

@ new2android倘若follwoing信息從1996 : Understanding Verilog Blocking and Non--blocking Assignments

  1. #5 A = B;脈衝寬度小於5中讀出由模擬忽略
  2. A = #5 B;輸入檢查每5個時間單位,並分配值立即

備註

  1. 延遲的所有用途僅用於模擬,不可合成。
  2. 問題&答案不包括使用延遲的非阻塞變體(B <= #5 A;,#5 B <= A;)時的差異。
+0

如果clk不是一個時鐘,它有一些隨機信號,你能告訴我模擬器是如何反應的嗎?我認爲比其他人有更多的事件,但我不知道。 – chitranna

+0

對不起,我只是使用模擬器作爲工具,不涉及它面臨的基本調度問題。表面看來,這兩種類型似乎都是做同樣的事情,所以我希望它們對模擬器來說是一樣的。 – Morgan

+0

有幾個補充你的答案, #5 A = B; //模擬器忽略寬度小於5的脈衝 A =#5 B; //輸入每隔5個時間單位檢查一次並立即賦值 – chitranna