在Vivado中在always塊中寫邏輯時如果出現always塊中的異步復位敏感詞在塊內部未使用的情況,如下例的rst:
always @(posedge clk or posedge rst)
begin if(~tx_sense_flag)o_rd_adr <= 'd1;else if((o_rd_adr == 'd94) & (bit_cnt == 'd7))o_rd_adr <= 'd1;else if(bit_clk_en)o_rd_adr <= o_rd_adr + 7'd1;elseo_rd_adr <= o_rd_adr;
end
綜合時出現[Synth 8-91] ambiguous clock in event control。
解決辦法是在begin end 中加入復位初始化條件,或者刪除@()中的 or posedge rst即可。
而在Diamond中對該情況不會進行報錯。
這導致在調試時遇到Reveal抓取的邏輯與預期的并不相符,出現不規律亂跳的情況,如下圖:
o_rd_adr應該在bit_clk_en為1時自加一,其他情況下保持不變。而實際中o_rd_adr并不是預期的效果。
解決辦法:刪除掉or posedge rst(由于塊中未使用rst故改成同步復位),再進行調試即正確。