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

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

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

答案

輸出波形


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

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

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