吳靜瑜,肖順文,雷小英,鄭 瑞,陳韻文
(西華師范大學(xué) 電子信息工程學(xué)院,四川 南充 637009)
數(shù)字系統(tǒng)中,移位寄存器是常用的重要器件之一。除了作為移位寄存器外,還可用它來組成脈沖發(fā)生器、數(shù)據(jù)轉(zhuǎn)換器、計(jì)數(shù)器和累加器等[1]。在數(shù)字電子電路設(shè)計(jì)過程中,固定參數(shù)的移位寄存器在使用上受到了一定限制,對(duì)參數(shù)可調(diào)的需求越來越高。FPGA 器件是專用集成電路中的1 種半定制電路,能有效地解決原有器件門電路數(shù)較少的問題,可重復(fù)編程,且在數(shù)字電路設(shè)計(jì)領(lǐng)域中應(yīng)用廣泛[2]。本文設(shè)計(jì)了基于FPGA 的參數(shù)可調(diào)的多功能移位寄存器,實(shí)現(xiàn)多參數(shù)多種移位方式的移位功能。
整個(gè)系統(tǒng)主要由多路選擇器模塊、參數(shù)可調(diào)帶進(jìn)位循環(huán)左移移位寄存器、參數(shù)可調(diào)帶進(jìn)位循環(huán)右移移位寄存器、參數(shù)可調(diào)自循環(huán)左移移位寄存器、參數(shù)可調(diào)自循環(huán)右移移位寄存器和輸入輸出模塊構(gòu)成,系統(tǒng)電路結(jié)構(gòu)的設(shè)計(jì),如圖1 所示[3]。通過設(shè)置可調(diào)參數(shù)S的數(shù)字來確定4 個(gè)移位寄存器的數(shù)據(jù)輸入Din 和數(shù)據(jù)輸出DOUT 的位數(shù)[4]。多路選擇器根據(jù)電路的需要可選擇當(dāng)前移位寄存器為帶進(jìn)位循環(huán)左移移位寄存器、帶進(jìn)位循環(huán)右移移位寄存器、自循環(huán)左移移位寄存器、自循環(huán)右移移位寄存器等四種之一。整個(gè)電路實(shí)現(xiàn)可調(diào)參數(shù)移位寄存器的多種移位功能。
圖1 系統(tǒng)電路結(jié)構(gòu)
本文設(shè)計(jì)的參數(shù)可調(diào)多功能移位寄存器是用來實(shí)現(xiàn)對(duì)不同參數(shù)的移位寄存器進(jìn)行帶進(jìn)位循環(huán)左移、帶進(jìn)位循環(huán)右移、自循環(huán)左移、自循環(huán)右移等功能。
所設(shè)計(jì)的參數(shù)可調(diào)移位寄存器采納并入串出的方式,具有帶進(jìn)位循環(huán)左移、帶進(jìn)位循環(huán)右移、自循環(huán)左移、自循環(huán)右移4 種功能。因此還需使用多路選擇器來實(shí)現(xiàn)功能的切換。這里用一個(gè)八選一多路選擇器來實(shí)現(xiàn)該功能[5]。設(shè)a,b,c 為八選一多路選擇器的輸入信號(hào),多路選擇器的值與對(duì)應(yīng)功能,如表1 所示。
表1 多路選擇器的值與對(duì)應(yīng)功能
系統(tǒng)設(shè)計(jì)選擇的移位方式是不同的,以下是各功能移位寄存器的具體實(shí)現(xiàn)[6]。
2.2.1 帶進(jìn)位循環(huán)左移移位寄存器
帶進(jìn)位循環(huán)左移,通過進(jìn)位輸入端輸入待進(jìn)位的數(shù)據(jù)C0,把輸入數(shù)據(jù)的各個(gè)二進(jìn)制位向左移動(dòng)S 位,再將進(jìn)位數(shù)據(jù)C0 依次移到右端空出的位上,在每個(gè)時(shí)鐘上升沿到來時(shí),進(jìn)行重復(fù)操作。其中,REGn 為內(nèi)部信號(hào),用它暫存輸入的數(shù)據(jù),無方向性;CY 是進(jìn)位輸入。先把輸入的數(shù)據(jù)DIN 傳遞給REGn,再通過MD 選擇不同的移位方式進(jìn)行移位。該操作完成后,將移位之后的數(shù)再通過REGn 傳遞到DOUT 并輸出。代碼如下:
2.2.2 帶進(jìn)位循環(huán)右移移位寄存器
帶進(jìn)位循環(huán)右移,就是通過進(jìn)位輸入端輸入待進(jìn)位的數(shù)據(jù)C0,把輸入數(shù)據(jù)的各個(gè)二進(jìn)制位向右移動(dòng)S位,再將進(jìn)位數(shù)據(jù)C0 依次移到左端空出的位上,在每個(gè)時(shí)鐘上升沿到來時(shí),進(jìn)行重復(fù)操作。代碼如下:
2.2.3 自循環(huán)左移移位寄存器
自循環(huán)左移,就是把輸入數(shù)據(jù)的各個(gè)二進(jìn)制位向左移動(dòng)S 位,再把從S 左端移出的每1 位順次移動(dòng)至右端空出的位置上,在每個(gè)時(shí)鐘上升沿到來時(shí),進(jìn)行重復(fù)操作。代碼如下:2.2.4 自循環(huán)右移移位寄存器
自循環(huán)右移,就是把輸入數(shù)據(jù)的各個(gè)二進(jìn)制位向右移動(dòng)S 位,再把從S 右端移出的每1 位順次移動(dòng)至左端空出的位置上,在每個(gè)時(shí)鐘上升沿到來時(shí),進(jìn)行重復(fù)操作。代碼如下:
本系統(tǒng)采用傳統(tǒng)的自上向下的設(shè)計(jì)理念,前面已經(jīng)完成了對(duì)各個(gè)模塊的設(shè)計(jì),因此只需要將各個(gè)模塊進(jìn)行總體的整合即可得到整個(gè)系統(tǒng)[7]。系統(tǒng)頂層電路,如圖2 所示。
圖2 系統(tǒng)頂層電路
以8 位多功能移位寄存器為例,系統(tǒng)頂層電路的端口描述,如表2 所示。
表2 系統(tǒng)頂層電路的端口描述
本設(shè)計(jì)使用多路選擇器及移位功能模塊來完成可調(diào)參數(shù)移位寄存器的系統(tǒng)功能[8]。首先,從外部設(shè)置1個(gè)參數(shù)。其次,通過輸入端口輸入對(duì)應(yīng)數(shù)據(jù)和進(jìn)位標(biāo)志,再經(jīng)過多路選擇器選擇所需的移位方式。最后,輸出實(shí)現(xiàn)對(duì)應(yīng)移位功能后的數(shù)據(jù),用ModelSim 進(jìn)行仿真。以8 位移位寄存器為例,則此時(shí)可調(diào)參數(shù)S 設(shè)定為8,并設(shè)DIN 為01010101,如圖3 所示。
圖3 8 位移位寄存器多功能仿真結(jié)果
(1)當(dāng)MD 為000(置數(shù)操作),持續(xù)了1 個(gè)時(shí)鐘周期,當(dāng)?shù)?1 個(gè)時(shí)鐘上升沿降臨時(shí),輸出 DOUT為01010101。
(2)當(dāng)MD 為001(帶進(jìn)位循環(huán)左移),進(jìn)位輸入C0為0,持續(xù)了3 個(gè)時(shí)鐘周期,進(jìn)行移位的數(shù)應(yīng)該是上一個(gè)輸出DOUT,此時(shí)DIN 為01010101。每遇到1 個(gè)時(shí)鐘上升沿,就執(zhí)行一次移位功能,這里進(jìn)行了3 次移位;當(dāng)?shù)? 個(gè)時(shí)鐘上升沿降臨時(shí),DOUT 為10 101010;當(dāng)?shù)? 個(gè)時(shí)鐘上升沿降臨時(shí),DOUT 為01 010100;當(dāng)?shù)?個(gè)時(shí)鐘上升沿降臨時(shí),DOUT 為10101000。
(3)當(dāng)MD 為010(帶進(jìn)位循環(huán)右移),進(jìn)位輸入C0為1,持續(xù)了3 個(gè)時(shí)鐘周期,進(jìn)行移位的數(shù)應(yīng)該是上一個(gè)輸出DOUT,此時(shí)DIN 為10101000。每遇到1 個(gè)時(shí)鐘上升沿,就執(zhí)行一次移位功能,這里進(jìn)行了3 次移位。當(dāng)?shù)? 個(gè)時(shí)鐘上升沿來臨時(shí),DOUT 為11 010100;當(dāng)?shù)? 個(gè)時(shí)鐘上升沿來臨時(shí),DOUT 為11 101010;當(dāng)?shù)? 個(gè)時(shí)鐘上升沿來臨時(shí),DOUT 為11110101。
(4)當(dāng)MD 為011(自循環(huán)左移),持續(xù)了3 個(gè)時(shí)鐘周期,進(jìn)行移位的數(shù)應(yīng)該是上一個(gè)輸出DOUT,此時(shí)DIN 為11110101。每遇到1 個(gè)時(shí)鐘上升沿,就執(zhí)行一次移位功能,這里進(jìn)行了3 次移位。當(dāng)?shù)? 個(gè)時(shí)鐘上升沿來臨時(shí),DOUT 為11 101011;當(dāng)?shù)? 個(gè)時(shí)鐘上升沿來臨時(shí),DOUT 為11 010111;當(dāng)?shù)?0 個(gè)時(shí)鐘上升沿來臨時(shí),DOUT 為10101111。
(5)當(dāng)MD 為100(自循環(huán)右移),持續(xù)了3 個(gè)時(shí)鐘周期,進(jìn)行移位的數(shù)應(yīng)該是上一個(gè)輸出DOUT,此時(shí)DIN 為10101111。每遇到1 個(gè)時(shí)鐘上升沿,就執(zhí)行一次移位功能,這里進(jìn)行了3 次移位。當(dāng)?shù)?1 個(gè)時(shí)鐘上升沿到來時(shí),DOUT 為11 010111;當(dāng)?shù)?2 個(gè)時(shí)鐘上升沿來臨時(shí),DOUT 為11 101011;當(dāng)?shù)?3 個(gè)時(shí)鐘上升沿到來時(shí),DOUT 為11110101。
經(jīng)仿真測試所得的結(jié)果表明該設(shè)計(jì)達(dá)到了參數(shù)可調(diào)多功能移位寄存器的要求。
本系統(tǒng)是基于FPGA 開發(fā)平臺(tái),使用VHDL 語言對(duì)不同移位功能進(jìn)行編寫,實(shí)現(xiàn)參數(shù)可調(diào)移位寄存器的多種功能。所實(shí)現(xiàn)的參數(shù)可調(diào)和多種移位功能都是對(duì)一般移位寄存器進(jìn)行進(jìn)一步的優(yōu)化與完善,增強(qiáng)了設(shè)計(jì)的靈活性和資源的可配性,減小了電路的復(fù)雜性。