2015-06-26 26 views
0

我想用條件啓動一個計數器(0到9),例如當條件發生時,計數器自行重置並開始計數直到10,然後從0開始。但它不起作用。如何啓動一個具有條件的計數器?

我已經是:

always @(posedge clk) begin 
    if (enable & sample) 
    counter <= 4'b0; 
    else 
    counter <= counter + 4'b1; 

    if (counter == 4'd9) 
    counter <= 4'b0; 
    else 
    counter <= counter + 4'b1; 
end 

任何幫助嗎?

+0

它是同步還是異步計數器? – Emman

回答

0

它看起來像'啓用和樣本'清除,其他明智增加。同樣在你的例子中,與9的比較覆蓋了以前的值,這個檢查將重置爲0或遞增。你需要把這個條件放在else之內。

always @(posedge clk) begin 
    if (enable & sample) begin 
    counter <= 4'b0; 
    end 
    else begin 
    if (counter == 4'd9) begin 
     counter <= 4'b0; 
    end 
    else begin 
     counter <= counter + 4'b1; 
    end 
    end 
end 

我懷疑你實際上不希望它在啓用低時增加?這意味着初始同步復位邏輯需要更新。

+0

謝謝大家! 特別摩根! 我用他的例子,它工作! – user2528060