[RTLLM-p023] Memory/shifter/LFSR
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 目前狀態 |
重置行為
當 rst 在 clk 上升沿為高電位時,必須將 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
評論