Quartus需要根據(jù)always塊內(nèi)的if語句來判斷同步時鐘信號和異步控制信號后德,例如:
always @ (posedge clk or posedge rst1 or posedge rst2) begin
if ( rst1 || rst2 )
q <= 1'b0;
else
q <= d;
end
以上代碼段是一個具有3個敏感事件的always塊部宿,敏感事件包含2個異步重置信號和1個時鐘信號。Quartus通過if語句找到2個異步信號瓢湃,進(jìn)而推測出剩余的1個是同步時鐘信號理张。
- 必須有一個if或else if完全是敏感事件表里的異步信號,不包含其他內(nèi)容绵患。
- if語句內(nèi)的條件必須與觸發(fā)邊沿相符雾叭,posedge xxx用if(xxx),negedge xxx_n用if(!xxx_n)落蝙。
這是一個錯誤的示例:
always @ (posedge clk or posedge rst) begin
if ( rst || sync_rst )
q <= 1'b0;
else
q <= d;
end
Quartus無法在敏感時間表里匹配到“sync_rst ”這個信號织狐,應(yīng)該拆開寫成以下形式:
always @ (posedge clk or posedge rst) begin
if (rst)
q <= 1'b0;
else if (sync_rst)
q <= 1'b0;
else
q <= d;
end