[RTLLM-p046] Miscellaneous/Others/synchronizer


提交解答


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

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

多位元 MUX 型跨時脈同步器

請設計一個名為 synchronizer 的多位元跨時脈同步器,將 clk_a 時脈域中的 4 位元資料同步至 clk_b 時脈域。

來源時脈域包含:

  • data_in:4 位元輸入資料。
  • data_en:資料有效訊號。

題目保證:

  • data_en 為高電位時,data_in 保持不變。
  • data_en 至少維持 3 個 clk_b 週期。
  • 相鄰兩筆資料的變化間隔至少為 10 個 clk_b 週期。
  • data_in 的變化頻率很低。

clk_a 時脈域中,輸入資料與有效訊號分別儲存在 data_regen_data_reg

clk_b 時脈域中,en_data_reg 經過兩級 D 觸發器同步。當同步後的有效訊號為高電位時,將穩定的 data_reg 載入輸出 dataout


模組名稱

synchronizer

輸入埠

埠名稱 位元寬度 說明
clk_a 1 來源時脈
clk_b 1 目的時脈
arstn 1 clk_a 時脈域的低電位有效非同步 Reset
brstn 1 clk_b 時脈域的低電位有效非同步 Reset
data_in 4 來源時脈域的輸入資料
data_en 1 來源時脈域的資料有效訊號

輸出埠

埠名稱 位元寬度 說明
dataout 4 同步至 clk_b 時脈域的輸出資料

功能說明

來源時脈域

在每個 clk_a 上升沿:

data_reg    <= data_in;
en_data_reg <= data_en;

arstn = 0 時:

data_reg    = 0
en_data_reg = 0
有效訊號同步

clk_b 時脈域中,使用兩級 D 觸發器同步 en_data_reg

en_clap_one <= en_data_reg;
en_clap_two <= en_clap_one;

brstn = 0 時,兩級同步暫存器清除為 0。

輸出資料

當同步後的有效訊號 en_clap_two 為 1 時:

dataout <= data_reg;

en_clap_two 為 0 時,dataout 保持原值。


設計要求

  1. 模組名稱必須為 synchronizer
  2. data_indata_en 屬於 clk_a 時脈域。
  3. dataout 屬於 clk_b 時脈域。
  4. 使用 data_reg 儲存來源資料。
  5. 使用 en_data_reg 儲存來源有效訊號。
  6. 使用兩級 D 觸發器同步有效訊號。
  7. 當同步後的有效訊號為高電位時更新 dataout
  8. 當同步後的有效訊號為低電位時保持 dataout
  9. arstnbrstn 均為低電位有效非同步 Reset。
  10. 時序邏輯必須使用 nonblocking assignment。

程式模板

module synchronizer (
    input            clk_a,
    input            clk_b,
    input            arstn,
    input            brstn,
    input      [3:0] data_in,
    input            data_en,
    output reg [3:0] dataout
);

    // Write your code here

endmodule

評論

目前沒有評論。