HDLBits (110) — 5位線性移位反饋寄存器
本題鏈接:
https://hdlbits.01xz.net/wiki/Lfsr5
線性反饋移位寄存器是一種移位寄存器,通常帶有幾個異或門來產(chǎn)生移位寄存器的下一個狀態(tài)。 伽羅瓦 LFSR 是一種特殊的安排,其中帶有“抽頭”的位位置與輸出位進行異或運算以產(chǎn)生其下一個值,而沒有抽頭移位的位位置。 如果仔細(xì)選擇抽頭位置,則可以將 LFSR 設(shè)置為“最大長度”。? n 位的最大長度 LFSR 在重復(fù)之前循環(huán)通過 2n-1 個狀態(tài)(永遠(yuǎn)不會達到全零狀態(tài))。
下圖顯示了一個 5 位最大長度的 Galois LFSR,在位位置 5 和 3 處具有抽頭。(抽頭位置通常從 1 開始編號)。 請注意,為了保持一致性,我在位置 5 處繪制了 XOR 門,但 XOR 門輸入之一是 0。

構(gòu)建這個 LFSR。 復(fù)位應(yīng)將 LFSR 復(fù)位為 1。

題目
提示:
從 1 開始的前幾個狀態(tài)是 00001, 10100, 01010, 00101, ... LFSR 應(yīng)該在返回 00001 之前循環(huán)通過 31 個狀態(tài)。

答案

輸出波形


向量
當(dāng)位寬大于 1 時,wire 或 reg 即可聲明為向量的形式。Verilog 支持可變的向量域選擇,
Verillog 還支持指定 bit 位后固定位寬的向量域選擇訪問。
[bit+: width]?: 從起始 bit 位開始遞增,位寬為 width。
[bit-: width]?: 從起始 bit 位開始遞減,位寬為 width。
對信號重新進行組合成新的向量時,需要借助大括號。
異步復(fù)位
異步復(fù)位是指無論時鐘到來與否,只要復(fù)位信號有效,電路就會執(zhí)行復(fù)位操作。
異步復(fù)位常常會被綜合成如下電路:

異步復(fù)位的優(yōu)點:大多數(shù)觸發(fā)器單元有異步復(fù)位端,不會占用額外的邏輯資源。且異步復(fù)位信號不經(jīng)過處理直接引用,設(shè)計相對簡單,信號識別快速方便。
異步復(fù)位的缺點:復(fù)位信號與時鐘信號無確定的時序關(guān)系,異步復(fù)位很容易引起時序上removal 和 recovery 的不滿足。且異步復(fù)位容易受到毛刺的干擾,產(chǎn)生意外的復(fù)位操作。
線性反饋移位寄存器(英語:Linear feedback shift register,LFSR)是指給定前一狀態(tài)的輸出,將該輸出的線性函數(shù)再用作輸入的移位寄存器。異或運算是最常見的單比特線性函數(shù):對寄存器的某些位進行異或操作后作為輸入,再對寄存器中的各比特進行整體移位。
賦給寄存器的初始值叫做“種子”,因為線性反饋移位寄存器的運算是確定性的,所以,由寄存器所生成的數(shù)據(jù)流完全決定于寄存器當(dāng)時或者之前的狀態(tài)。而且,由于寄存器的狀態(tài)是有限的,它最終肯定會是一個重復(fù)的循環(huán)。然而,通過本原多項式,線性反饋移位寄存器可以生成看起來是隨機的且循環(huán)周期非常長的序列。
線性反饋移位寄存器的應(yīng)用包括生成偽隨機數(shù),偽隨機噪聲序列,快速數(shù)字計數(shù)器,還有擾頻器。線性反饋移位寄存器在硬件和軟件方面的應(yīng)用都非常得普遍。
循環(huán)冗余校驗中用于快速校驗傳輸錯誤的數(shù)學(xué)原理,就與線性反饋移位寄存器密切相關(guān)。
Fibonacci LFSRs
影響下一個狀態(tài)的比特位叫做抽頭。圖中,抽頭序列為[16,14,13,11]。LFSR最右端的比特為輸出比特。抽頭依次與輸出比特進行異或運算,然后反饋回最左端的位。最右端位置所生成的序列被稱為輸出流。

影響LFSR下一個狀態(tài)的比特位叫做抽頭(圖中黑色數(shù)字)
最大長度的LFSR生成一個M序列(例如,只有與有一定抽序列的LFSR才能通過所有
???1 個內(nèi)部狀態(tài),不包括全零狀態(tài)),除非它本身為全零,亦即狀態(tài)永不改變
作為基于異或運算的LFSR的替換,LFSR也可以給予同或運算。與使用異或門的LFSR全零狀態(tài)下為無效狀態(tài)相應(yīng)的,使用同或門的LFSR在全“1”狀態(tài)下也是無效的。
有LFSR或者基于同或門的LFSR生成的序列可以被認(rèn)為是同格雷碼或者自然二進制碼同樣有效的二進制序列。
在LFSR中,抽頭的設(shè)定可以用有限域算數(shù)中模2的多項式來表示。這就意味著,多項式中的所有系數(shù)必須是“1”或者“0”。這個多項式被稱作回授多項式或特征多項式。例如圖中的抽頭為在第16,14,13,11個比特,則相應(yīng)的特征多項式為:
多項式中常數(shù)“1”并不代表某一個抽頭,它所指的是一個比特位的輸入(例如?,等效為 1 )。多項式中的指數(shù)代表從左至右的抽頭位。第一個和最后一個比特一般相應(yīng)的是輸入和輸出位。
當(dāng)且僅當(dāng)相應(yīng)的回授多項式是本原多項式時,LFSR才能達到最大長度。這表示以下條件是必須的:
抽頭的數(shù)量必須為偶數(shù)。
抽頭之間不能成對出現(xiàn),必須是互質(zhì)的。
生成最長LFSRs的本原多項式表可通過下部的鏈接找到。 這類型LFSR也被成為標(biāo)準(zhǔn),多對一或外部異或門的LFSR。
Galois LFSRs
以法國數(shù)學(xué)家埃瓦里斯特·伽羅瓦命名,是LFSRs的Galois型結(jié)構(gòu)。

參考內(nèi)容:
?2.3 Verilog 數(shù)據(jù)類型?| 菜鳥教程:
https://www.runoob.com/w3cnote/verilog-data-type.html
5.1 Verilog 復(fù)位簡介 | 菜鳥教程:
https://www.runoob.com/w3cnote/verilog2-reset.html
線性反饋移位寄存器?|?維基百科
https://zh.wikipedia.org/wiki/線性反饋移位寄存器