[RTLLM-p022] Memory/shifter/right_shifter


提交解答


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

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

8 位元右移暫存器

題目說明

請設計一個名為 right_shifter 的 8 位元右移暫存器。

模組具有一個 1 位元序列輸入 d。在每一次 clk 上升沿,暫存器 q 的內容向右移動一個位元,並將新的輸入位元 d 放入最高位元 q[7]

初始狀態下,暫存器 q 必須設定為:

00000000

每次時脈上升沿的操作為:

q[7]   ← d
q[6]   ← q[7]
q[5]   ← q[6]
q[4]   ← q[5]
q[3]   ← q[4]
q[2]   ← q[3]
q[1]   ← q[2]
q[0]   ← q[1]

等價的向量表示方式為:

q ← {d, q[7:1]}

模組介面

方向 位元寬度 說明
clk input 1 時脈訊號
d input 1 每個時脈週期移入的序列資料
q output reg 8 右移暫存器目前的內容

運作範例

假設初始狀態為:

q = 00000000

依序輸入以下位元:

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

則每次時脈上升沿後的結果為:

輸入 1:10000000
輸入 0:01000000
輸入 1:10100000
輸入 0:01010000
輸入 1:10101000
輸入 1:11010100
輸入 1:11101010

最後:

q = 11101010

初始化要求

本題沒有 Reset 輸入,因此必須使用 initial 區塊將 q 初始化為零:

initial begin
    q = 8'b00000000;
end

設計要求

  • 模組名稱必須為 right_shifter
  • q 必須宣告為 8 位元暫存器。
  • 使用 initialq 初始化為零。
  • 在每個 clk 上升沿執行右移。
  • 將輸入 d 放入 q[7]
  • 原本的 q[0] 在右移後被捨棄。
  • 必須使用時序邏輯與 nonblocking assignment。

程式設計模板

module right_shifter (
    input            clk,
    input            d,
    output reg [7:0] q
);

    // Write your code here

endmodule

評論

目前沒有評論。