assign相當於連線,一般是將一個變量的值不間斷地賦值給另一個變量,就像把這兩個變量連在一起,所以習慣性的當做連線用,比如把一個模塊的輸出給另一個模塊當輸入。
例如:
wire A,B,SEL,L;//聲明4個線型變量
assign L=(A&~SEL)|(B&SEL);//連續賦值
在assign語句中,左邊變量的數據類型必須是wire型。input和output如果不特別聲明類型,默認是wire類型。
舉例2選1的數據選擇器:
module mux2x1_df(A,B,SEL,L);
input A,B,SEL;
output L;
assign L=SEL?A:B;
endmodule
注意事項
assign的功能屬於組合邏輯的范疇,應用范圍可概括為以下三點:
1、持續賦值;
2、連線;
3、對wire型變量賦值,wire是線網,相當於實際的連接線,如果要用assign直接連接,就用wire型變量。wire型變量的值隨時變化。其實以上三點是相通的。
要更好的把握assign的使用,Verilog中有幾個要點需要深入理解和掌握:
1、在Verilog module中的所有過程塊(如initial塊和always塊)、連續賦值語句(如assign語句)和實例引用都是並行的。在同一module中這三者出現的先后順序沒有關系。
2、只有連續賦值語句assign和實例引用語句可以獨立於過程塊而存在於module的功能定義部分。
3、連續賦值assign語句獨立於過程塊,所以不能在always過程塊中使用assign語句。