連續賦值:
1)語法上,有關鍵詞“assign”來標識;
2)左側被賦值的數據類型必須是線網型數據(wire);
3)連續賦值語句不能出現在過程快中(initial/always);
4)連續賦值語句主要用來對組合邏輯進行建模以及線網數據間進行描述;
5)連續賦值語句產生作用后,賦值表達式中信號的任何變化都將立即被反映到賦值線網型數據的取值上;
過程賦值:
1)語法上,沒有關鍵詞“assign”;
2)左側被賦值的數據類型必須是寄存器類型的變量(reg);
3)過程性連續賦值語句只能出現在過程塊中;
4)過程性連續賦值語句主要用來對時序邏輯電路進行行為描述;
5)在過程賦值語句的情況下,只有在過程賦值語句被執行時才執行賦值操作,語句執行完后被賦值變量的取值不再受到賦值表達式的影響;
過程性連續賦值語句:
在verilog HDL中,有兩組過程性連續賦值語句可以實現連續賦值:assign-deassign,只能用於對寄存器型變量的連續賦值操作,而不能用來對線網型數據進行連續賦值操作;force-release,它不僅能對寄存器型變量產生作用,也對線網型數據產生作用。force語句的優先級高於assign 。
deassign 撤銷對某一個寄存器型變量的連續賦值后,該寄存器變量仍然保持deassign操作之前的取值。
過程性連續賦值語句比普通的過程賦值語句有更高的優先級。
舉例:異步清零的D觸發器;
module dff_asyn_clear(clk,clr,d,q);
input clk,clr;
input d;
output q;
reg q;
always@(clr) //用於實現異步清零的always塊,強制清零,過程性連續賦值語句的優先級高於過程賦值語句
begin
if(!clr)
assign q =0 ;
else
deassign q;
end
always@(posedge clk) //用於實現D觸發器正常工作的always塊
begin
q = d;
end
endmodule