2011-04-16 26 views

回答

1

如果您希望您的塊爲被關閉的開關敏感的,你要在切換輸入的名稱前面negedge,例如,「switch_line」:

always @(posedge clock, posedge reset, negedge swtich_line) 

如果你只是想有一個觸發器檢查時鐘週期的每個上升沿開關的狀態,

always @(posedge clock, posedge reset) 
    if (!switch_line) 
    // ... 
    else 
    // ... 

你們是不是要一個觸發器建模,鎖存器,或者是一些新類型的硬件?通常,只有觸發器和鎖存器對時鐘信號感興趣。具有異步復位的觸發器被建模爲

always @(posedge clock, posedge reset) 

對於同步復位,從敏感列表中刪除復位信號。

根據用戶的評論,另一種選擇是插入復位信號的走燈信號。當你鉤住這個模塊,你可以做到以下幾點:

mymodule UUT(
    .clock(clock), 
    .reset(~go), 
    //... 
); 

如果你否定去,你會得到相同的行爲復位,只是反轉(例如,從1-> 0要去的信號) 。

+0

而不是一個重置按鈕將使用go按鈕。如果go按鈕被釋放,則系統將進入空閒狀態。因此釋放go按鈕就像按下重置按鈕一樣。 – 2011-04-16 20:08:05

+0

您可以將此信號連接到此模塊上的復位信號。否則,您可以在上面的觸發器的verilog中用「go」替換重置。 – 2011-04-16 20:11:57

+0

我提供了一個上面的例子。 – 2011-04-16 20:14:55

0

除非您以非常低的時鐘頻率運行,否則按鈕狀態的變化會比時鐘週期慢得多。因此,將按鈕輸入視爲異步信號並不是一個好主意。相反,您可能想要對輸入進行採樣,也可能會刪除毛刺。

由寄存器對輸入進行最小採樣,然後讓您的控件FSM查看該寄存器,並在檢測到預期更改時移至相應狀態。這意味着它需要設計1-2個週期才能對按鈕更改做出「反應」。但是,再次,除非時鐘頻率非常低,否則該時間段將足夠短,以至於沒有人會注意到幾個週期的延遲。

如果您將信號連接到復位,您(1)通過按下按鈕(壞)釋放所有狀態信息,並突然有兩個復位信號。像這樣的設計熱棒可能工作,但是是不好的設計方法,並會使你的設計對噪音敏感等。