[RTLLM-p023] Memory/shifter/LFSR


提交解答


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

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

4 位元線性回授移位暫存器

題目說明

請設計一個名為 LFSR 的 4 位元線性回授移位暫存器,用於產生週期性的偽隨機位元序列。

LFSR 的完整名稱為:

Linear Feedback Shift Register

此模組在每個 clk 上升沿更新一次狀態。

回授位元由目前輸出中的最高兩個位元計算:

feedback = NOT(out[3] XOR out[2])

也可以表示為 XNOR:

feedback = out[3] XNOR out[2]

接著將暫存器內容向左移動一個位元,並將回授值放入最低位元 out[0]

out[3] ← out[2]
out[2] ← out[1]
out[1] ← out[0]
out[0] ← feedback

等價的向量表示方式為:

out ← {out[2:0], feedback}

模組介面

方向 位元寬度 說明
clk input 1 時脈訊號
rst input 1 高電位有效同步重置
out output reg 4 LFSR 目前狀態

重置行為

rstclk 上升沿為高電位時,必須將 LFSR 重置為:

out = 0000

由於本題使用反相 XOR,也就是 XNOR 回授,因此從全零狀態開始仍可繼續產生狀態序列,不會永久停留在零。

當:

out = 0000

時:

feedback = NOT(0 XOR 0) = 1

所以下一個狀態為:

0001

狀態轉移範例

初始狀態為:

0000

依照回授公式:

feedback = ~(out[3] ^ out[2])

狀態依序為:

0000
0001
0011
0111
1111
1110
1100
1000
0000

因此此設計會形成一個週期為 8 的循環序列。


設計要求

  • 模組名稱必須為 LFSR
  • out 必須為 4 位元暫存器。
  • rst 為高電位有效同步重置。
  • rst = 1 時,將 out 設為 0000
  • rst = 0 時,在每個 clk 上升沿更新 LFSR。
  • 回授值必須使用:
~(out[3] ^ out[2])
  • 暫存器必須向左移動一位。
  • 回授值必須放入 out[0]
  • 必須使用 nonblocking assignment。

程式設計模板

module LFSR (
    output reg [3:0] out,
    input            clk,
    input            rst
);

    // Write your code here

endmodule

評論

目前沒有評論。