在學習Verilog HDL語言的過程中,三種常用賦值語句常常引起學習者的困惑。其中,“=”左邊是wire類型,可在定義時用“assign”連續賦值語句,例如:wire[7:0] a; input[7:0] c,d; assign a=c+d; 這樣,在后面的程序中可以直接使用a來表示c+d的值,這對模塊間的互聯非常有用。“=”是阻塞賦值語句,也稱為串行語句,意味著所有該類賦值在所在模塊內按順序執行。例如,在一個if(ena)條件語句中,a=b; a=c; c=d; 這樣的語句將按順序執行。假設在執行前a=0,b=1,c=1,d=0,則可以這樣理解執行順序和結果:首先執行a=b,得到a=0;然后執行a=c,得到a=1;最后執行c=d,得到c=0。當該條件語句執行完時,最終得到a=1,c=0。而“<=”是非阻塞賦值語句,相當于并行語句,當該語句所在模塊結束時,所有帶“<=”的語句同時執行。例如:if(ena) begin a<=c; a=b; c=d; end 若執行前,a=0,b=1,c=1,d=0,那么在條件語句執行完時,所有帶“<=”的語句同時執行,得到a=c=1,c=d=0。這與阻塞賦值語句執行順序不同,非阻塞賦值語句會在該模塊執行結束時同時更新。理解這些賦值語句的區別和用法,對編寫高效、正確的Verilog代碼至關重要。正確使用這些語句,可以避免許多潛在的錯誤,提高代碼的可讀性和可維護性。