[RTLLM-p049] Miscellaneous/Others/parallel2serial


提交解答


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

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

4 位元平行轉序列轉換器

請設計一個名為 parallel2serial 的平行轉序列模組,將每筆 4 位元平行輸入資料 d 轉換為 1 位元序列輸出 dout

輸出順序必須由最高位元至最低位元:

d[3] → d[2] → d[1] → d[0]

當模組載入一筆新的平行資料時,valid_out 輸出 1,表示目前的 dout 為該筆資料的最高位元 d[3]

接下來三個時脈週期,valid_out 輸出 0,並依序輸出:

d[2]、d[1]、d[0]

每完成四個位元的序列輸出後,模組重新載入目前的平行輸入 d,開始下一輪轉換。


模組名稱

parallel2serial

輸入埠

埠名稱 位元寬度 說明
clk 1 時脈訊號
rst_n 1 低電位有效的非同步 Reset
d 4 4 位元平行輸入資料

輸出埠

埠名稱 位元寬度 說明
valid_out 1 新一筆序列資料開始輸出的指示訊號
dout 1 序列資料輸出

功能說明

Reset

當:

rst_n = 0

時,模組必須清除內部資料、計數器與有效訊號:

data      = 0000
cnt       = 0
valid_out = 0
dout      = 0

載入平行資料

當計數器 cnt 等於 3 時,在下一個 clk 上升沿載入新的平行資料:

data <= d;

同時:

cnt   <= 0;
valid <= 1;

由於 dout 連接至 data[3],載入後首先輸出最高位元 d[3]


序列輸出

在其他時脈週期中,資料暫存器向左旋轉一個位元:

data <= {data[2:0], data[3]};

因此最高位元依序為:

原始 data[3]
原始 data[2]
原始 data[1]
原始 data[0]

同時:

valid <= 0;

輸出範例

若載入:

d = 4'b1011

則輸出時序為:

週期 valid_out dout
1 1 1
2 0 0
3 0 1
4 0 1

下一個週期會重新載入目前的 d,並再次將 valid_out 設為 1。


設計要求

  1. 模組名稱必須為 parallel2serial
  2. 輸入資料寬度為 4 位元。
  3. 序列輸出順序為 MSB 至 LSB。
  4. 載入新資料時,valid_out 輸出 1。
  5. 載入時首先輸出 d[3]
  6. 接下來三個週期依序輸出 d[2]d[1]d[0]
  7. 使用 2 位元計數器記錄輸出位置。
  8. rst_n 為低電位有效的非同步 Reset。
  9. 時序邏輯必須使用 nonblocking assignment。

程式模板

module parallel2serial (
    input      clk,
    input      rst_n,
    input      [3:0] d,
    output     valid_out,
    output     dout
);

    // Write your code here

endmodule

評論

目前沒有評論。