[RTLLM-p050] Miscellaneous/Others/serial2parallel


提交解答


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

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

8 位元序列轉平行轉換器

請設計一個名為 serial2parallel 的序列轉平行資料轉換模組。

模組在每個 clk 上升沿檢查輸入有效訊號 din_valid。當 din_valid = 1 時,接收一位序列資料 din_serial

每收到 8 位有效的序列資料後,模組將其組合為一筆 8 位元平行資料,並透過 dout_parallel 輸出。序列資料依照輸入順序,由最高位元至最低位元排列。

例如,依序收到:

1, 1, 1, 1, 0, 0, 0, 0

則輸出為:

dout_parallel = 8'b11110000

在第 8 位有效資料被接收時,dout_valid 必須輸出 1,表示 dout_parallel 已包含一筆完整資料。其他週期中,dout_valid 必須為 0。


模組名稱

serial2parallel

輸入埠

埠名稱 位元寬度 說明
clk 1 時脈訊號
rst_n 1 低電位有效的 Reset
din_serial 1 序列輸入資料
din_valid 1 序列輸入資料有效訊號

輸出埠

埠名稱 位元寬度 說明
dout_parallel 8 8 位元平行輸出資料
dout_valid 1 平行輸出資料有效訊號

功能說明

Reset

當:

rst_n = 0

時,內部移位暫存器、計數器與輸出皆清除為 0。

接收序列資料

當:

din_valid = 1

時,在 clk 上升沿接收 din_serial,並將其加入移位暫存器:

data_shift <= {data_shift[6:0], din_serial};

第一個收到的資料最後會位於 dout_parallel[7],第八個收到的資料會位於 dout_parallel[0]

無效輸入

當:

din_valid = 0

時:

  • 不接收 din_serial
  • 計數器保持不變
  • 已接收的資料保持不變
  • dout_valid 輸出 0
完成一筆資料

當第 8 位有效資料到達時:

dout_parallel <= {data_shift[6:0], din_serial};
dout_valid    <= 1'b1;

完成輸出後,計數器重新歸零,開始接收下一筆 8 位元資料。


設計要求

  1. 模組名稱必須為 serial2parallel
  2. 只在 din_valid = 1 時接收輸入資料。
  3. 每 8 位有效輸入組成一筆平行輸出。
  4. 第一個輸入位元放在 dout_parallel[7]
  5. 最後一個輸入位元放在 dout_parallel[0]
  6. 收到第 8 位資料時,dout_valid 輸出 1。
  7. dout_valid 只維持一個時脈週期。
  8. din_valid = 0 時不得增加接收計數。
  9. rst_n 為低電位有效 Reset。
  10. 時序邏輯使用 nonblocking assignment。

程式模板

module serial2parallel (
    input            clk,
    input            rst_n,
    input            din_serial,
    input            din_valid,
    output reg [7:0] dout_parallel,
    output reg       dout_valid
);

    // Write your code here

endmodule

評論

目前沒有評論。