2017-03-08 51 views
-2

我想在時鐘邏輯中創建3個信號。帶3個信號的計數器

8s 
7s ----- create working signal 
6s 
5s 
4s 
3s 
2s 
1s ----- create timeout signal 
0s ----- create finish signal 

always @(posedge CLK_1K or posedge signal_count) begin 
    slot_count = 0; 
    data_finish = 0; 
    timeout = 0; 
    working = 0; 
    if (signal_count) begin 
     slot_count <= 1; 
     counter <= 8; 
    end else if (counter > 0) begin 
     counter = counter - 1; 
     if (counter == 7) begin 
      working = 1; 
     end else if (counter == 1) begin 
      timeout = 1; 
     end else if(counter == 0) begin 
      data_finish = 1; 
     end 
    end 
end 

什麼做了:

  • 在模擬試驗是正常的。
  • 下載到設備正常工作...

我下一步該做什麼?謝謝....

+1

你能更具體嗎?你的代碼是在模擬中工作,而不是在設備上工作?還是你收到綜合錯誤? –

回答

1

首先是一些編碼反饋。不要混合阻塞和非阻塞任務。你完全可以做到,但事情會變得混亂。在你的情況下,你有counter分配爲非阻塞(< =),然後作爲阻塞(=)。我猜你可以逃避一切,因爲阻止。

我會問最簡單的問題。時鐘名稱表示1K,可能爲1KHz。你如何「測量」你的輸出以知道他們不工作?在1K時,你可能看不到燈光閃爍......假設你有一個O-Scope或一個LA,並且已經證明它不起作用,我會通過我接下來要做的事情。

檢查多寬是counter?它至少有4位寬嗎?最好是。

請在您的主板上檢查以下內容。如果你有一個範圍,檢查你的輸入時鐘是否真的在運行。接下來,檢查您的綜合PIN分配文件。確保您將時鐘分配給設備上的右側引腳。

接下來,signal_count實際上是您的設計重置。您需要確保重置(signal_count)也被分配到右側引腳,並且當您按下按鈕或其他設備時實際移動。

然後驗證您確實正確編程了設備。有沒有done引腳?一個麻煩的步驟,你有沒有人可以運作的設計?如果它在他們的電路板上工作,而不是在你的電路板上工作,這有點說明問題並指向可疑硬件,或者可能缺少跳線或電源。

最後,創建一個新程序。使其非常簡單,如下所示。
取出該oscope並顯示工作信號如期振盪。由於working的初始狀態未定義,因此不會像寫入那樣進行模擬,但在實際電路板上,它應該以半頻振盪。如果是這樣,你知道你有時鐘。

always @ (posedge CLK_1K) 
begin 
    working <= ~working; 
end 

如果不振盪,該程序更改爲

assign working = 1'b1 

和驗證信號爲高電平時,該設備的負荷。如果沒有這個問題是不是與你的來源,但更多的東西像一個壞的引腳分配,不好銷,供不好,等等

然後改變以下

這將停止振盪,證明您的信號計數正在運行。

迴應此測試的結果,我們將從那裏開始。