[RTLLM-p047] Miscellaneous/Others/edge_detect


提交解答


分數: 5
時間限制: 2.0s
記憶體限制: 256M

作者:
題目代碼
題目類型
允許的語言
Verilog

上升沿與下降沿偵測器

請設計一個名為 edge_detect 的邊沿偵測模組,用來偵測輸入訊號 a 的上升沿與下降沿。

當輸入訊號由 0 變成 1 時,代表偵測到上升沿,輸出 rise 必須在下一個時脈週期輸出 1。

當輸入訊號由 1 變成 0 時,代表偵測到下降沿,輸出 down 必須在下一個時脈週期輸出 1。

risedown 只維持一個時脈週期。若沒有偵測到對應的邊沿,輸出必須回到 0。


模組名稱

edge_detect

輸入埠

埠名稱 位元寬度 說明
clk 1 時脈訊號
rst_n 1 低電位有效的非同步 Reset
a 1 欲偵測邊沿的輸入訊號

輸出埠

埠名稱 位元寬度 說明
rise 1 偵測到上升沿時輸出一個週期的高電位
down 1 偵測到下降沿時輸出一個週期的高電位

功能說明

模組使用一個暫存器保存輸入訊號 a 在前一個時脈週期的值:

reg a_dly;

在每個 clk 上升沿,將目前輸入 a 與前一個週期的 a_dly 比較。

上升沿

當:

a_dly = 0
a     = 1

時,偵測到上升沿:

rise <= 1'b1;

等價的邏輯運算為:

a & ~a_dly
下降沿

當:

a_dly = 1
a     = 0

時,偵測到下降沿:

down <= 1'b1;

等價的邏輯運算為:

~a & a_dly
無邊沿

當輸入保持不變時:

0 → 0
1 → 1

輸出為:

rise = 0
down = 0

輸出時序範例

前一個 a 目前 a rise down
0 0 0 0
0 1 1 0
1 1 0 0
1 0 0 1

設計要求

  1. 模組名稱必須為 edge_detect
  2. rst_n 為低電位有效的非同步 Reset。
  3. Reset 時將歷史輸入值、risedown 清除為 0。
  4. 輸入由 0 變成 1 時,rise 輸出 1。
  5. 輸入由 1 變成 0 時,down 輸出 1。
  6. risedown 只維持一個時脈週期。
  7. 輸入保持不變時,risedown 都輸出 0。
  8. 時序邏輯必須使用 nonblocking assignment。

程式模板

module edge_detect (
    input      clk,
    input      rst_n,
    input      a,
    output reg rise,
    output reg down
);

    // Write your code here

endmodule

評論

目前沒有評論。