?

算術邏輯單元在Quartus II與ModelSim中的教學實例設計

2021-04-04 10:48陳艷楊颯
現代信息科技 2021年18期
關鍵詞:數字電路案例教學法

陳艷 楊颯

摘? 要:學生學習數字電路后,往往希望設計數字電路系統以提升實踐能力。Quartus II和ModelSim軟件由于操作便捷而成為學生數字電路實踐的首選工具。文章以算術邏輯單元(ALU)為例進行教學設計。首先,根據ALU的特征設計指揮ALU工作的指令;其次,構建基于指令的ALU數字電路模塊;最后,通過Quartus II與ModelSim聯合仿真驗證ALU的功能。仿真結果展示ALU電路的計算功能,直觀的案例教學方法有利于培養學生數字電路系統設計方面的實踐能力,提升學生的自主學習能力和創新思維能力。

關鍵詞:案例教學法;數字電路;Quartus II;ModelSim

中圖分類號:TN79+1 文獻標識碼:A 文章編號:2096-4706(2021)18-0111-05

Abstract: After learning digital circuit, students often hope to design digital circuit system to improve their practical ability. Quartus II and ModelSim software have become the preferred tools for students' digital circuit practice because of their convenient operation. This paper takes arithmetic logic unit (ALU) as an example for teaching design. Firstly, according to the characteristics of ALU, the instruction for guiding the functions of the ALU is designed; Secondly, the ALU digital circuit module based on instruction is constructed; Finally, the functions of ALU is verified through the joint simulation of Quartus II and ModelSim. The simulation results show the computing function of ALU circuit. The intuitive case teaching method is conducive to cultivate students’ practical ability in digital circuit system design and improve students’ autonomous learning ability and innovative thinking ability.

Keywords: case teaching method; digital circuit; Quartus II; ModelSim

0? 引? 言

在教學過程中,就人才培養而言,如何發揮學生主觀能動性和提升學生動手能力等越來越受到教育工作者的廣泛關注[1,2]。在工科領域,新時期人才培養的關鍵是做到理論與實踐相結合[3,4]。顯然,傳統以教師課堂講授為主的教學模式不利于新時期人才培養目標的實現。與傳統授課不同的是,案例教學是一種“以參與者為中心”的學習方式,其課程的開展采用案例設計的形式[5-7],有助于提升學生理論轉化為實踐的能力。本文以算術邏輯單元(ALU)設計為例,通過案例分析激發學生在數字電路課程學習中發揮主觀能動性。

數字電路作為一門理論基礎與工程實踐緊密結合的專業基礎課程[8],尤其需要注重理論與實踐的同步教學,達到理論指導實踐、實踐鞏固理論的教學效果。根據數字電路的特性,課堂上,教師需要樹立以“學生為中心”的思想,引導學生主動自主地學;實踐中,教師需要通過把主動權交給學生,激發學生的學習興趣、求知欲和潛在的學習能力,將抽象的數字電路理論轉化為學生的實踐能力基礎,最終在不斷的實踐中提升學生的專業綜合能力和創新思維能力。

本文通過ALU的教學案例引導學生利用數字電路知識進行實踐。ALU是計算機中央處理單元(CPU)中的核心模塊,也是學生接觸最為廣泛的數字電路系統。對ALU的設計一方面能提升學生對數字電路系統設計的興趣;另一方面能加深學生對數字電路系統實踐的認識。由于ALU是基于指令的工作模式,本案例將首先提供ALU指令集,然后基于指令集設計數字電路模塊,最后給出ALU系統的仿真結果。為驗證ALU系統,本文使用Quartus II[9]與ModelSim[10]軟件對ALU系統進行聯合仿真。Quartus II用于驗證、綜合ALU系統??紤]到部分版本的Quartus II不提供波形仿真[11],本文采用ModelSim進行波形仿真,解決部分Quartus II版本不能查看波形的問題。仿真結果顯示本ALU案例具有正確的波形結果,表明該ALU內部的數字電路設計正確有效。

1? 算術邏輯單元

算術邏輯單元(ALU)是中央處理器(CPU)的核心計算模塊,如圖1所示。與CPU內部其他模塊(如,寄存器、譯碼器、移位器等)不同的是,ALU是唯一用于執行計算的模塊。典型ALU包括邏輯運算部件和算術運算部件。其中,邏輯運算部件執行邏輯與、邏輯或、邏輯非、邏輯異或等操作;算術運算部件執行加法、減法、帶進位加、帶進位減等運算。

由于CPU是通過指令來指導操作的系統,因此,ALU數字電路系統的實現需要根據指令來進行設計。不失一般性,本文以16位的指令長度為例進行設計。

圖2為指令的基本格式,指令長度為16 bits。每條指令由操作碼和操作數組成。其中,操作碼(4 bits)定義不同的操作類型(如加法、減法等),操作數(12 bits)用于提供操作所需數據的地址(如寄存器的地址)和立即數等。在本設計中,操作數和操作碼的長度分別為12位(Code[11..0])和4位(Code[15..12]),所有計算數據均為無符號數據。

為驅動ALU實現圖1中的各類運算,圖3給出了不同運算類型的操作碼。從圖3中可以看出,操作碼與運算類型間為一對一的關系,例如操作碼“0001”指示執行邏輯或操作。本設計中涉及8類運算,其中邏輯運算和算術運算分別有4個。因此,本設計僅用到操作碼的低3位(23=8),最高位為保留位(Code[15]=0)。

指令除了操作碼外,還含有操作數(即Code[11..0])。本設計僅考慮操作數為操作碼所對應的操作提供輸入數據地址。對于不同類型的操作而言,其操作數格式分為兩類,分別稱為1輸入類型和2輸入類型。1輸入類型對應圖3中的邏輯非操作,該操作所對應的操作數僅提供一個輸入數據地址;2輸入類型對應圖3中的其他類型操作,此類型操作的操作數部分需要提供兩個輸入數據地址。

圖4為1輸入操作數的指令格式。操作數(Code[11..0])分配一部分地址,用來存儲操作數的寄存器地址,指明該操作的輸入數據地址。在實際的ALU計算中,運算部件需要從寄存器中加載數據,然后執行計算,計算結果存儲到指定的寄存器中。在16位系統中,寄存器地址的長度為4位(24=16),其對應的位置為“11..8”,如圖4的“寄存器A”所示。由于1輸入操作數的運算部件只需要從一個寄存器中加載數據,因此圖4中存在未使用的指令區域,這里標記為保留位,保留位為“7..0”。

與1輸入指令類型相比較,2輸入指令類型需要指定兩個輸入數據所在的寄存器地址,如圖5所示。因此,在2輸入指令類型的指令設計中,存在兩組寄存器地址,如圖5中的寄存器A和寄存器B所示。寄存器A和寄存器B所在的地址區域分別為“11..8”和“7..4”,每個地址均為4 bits長度,保留位為“3..0”。

為方便起見,對于不同的計算,本文使用Quartus II的器件庫設計ALU系統,不再設計器件庫已存在的數字電路基本單元。接下來將介紹如何根據指令,利用數字電路基本單元完成ALU系統的設計。

2? ALU的電路實現

由于Quartus II軟件支持電路原理圖的仿真模式,ALU電路的實現將基于Quartus II軟件的器件庫,建立ALU指令集與數字電路之間的直觀聯系。本文先給出ALU原理圖符號,然后給出ALU的內部電路。

圖6為ALU在Quartus II軟件中的原理圖符號。ALU符號左側為ALU輸入端(共有4個輸入端)。從圖6中可以看出,輸入端包括兩組16 bits數據輸入端(DataA[15..0]、DataB[15..0])、進位輸入端(CYIN)以及控制端(Code[14..12])。其中DataA[15..0]、DataB[15..0]為ALU各運算提供輸入數據,來源于寄存器,這兩組數據的取值由圖4、圖5中操作數部分的寄存器A、寄存器B地址來確定,本設計默認已經從相應的寄存器地址中讀取出輸入DataA和DataB;CYIN為算術運算中的帶進位操作提供進位輸入;Code[14..12]是指令集的操作碼部分。根據操作碼的設計,操作碼的最高位(Code[15])不參與ALU運算類型的控制,即該ALU的運算由Code[14..12]確定,如圖6所示。ALU符號右側為輸出端(共2個輸出端),其中ALUOut為16 bits的數據輸出端,Cout為ALU的進位輸出端。

在給出ALU的原理圖符號之后,我們接下來給出該ALU內部的具體設計,分別包括設計支持圖3中邏輯運算的數字電路、算術運算的數字電路以及ALU選擇輸出模塊的數字電路,分別如圖7(a)、圖7(b)、圖7(c)所示。

圖7(a)為邏輯運算的電路模塊,支持圖3中的邏輯與、邏輯或、邏輯非以及邏輯異或等4種計算。根據如圖3所示的操作類型與指令的對應關系,這4種操作由操作碼的Code[13..12]確定。即:Code[13..12]=“00”為邏輯與操作;Code[13..12]=“01”為邏輯或操作;Code[13..12]=“10”為邏輯非操作;Code[13..12]=“11”為邏輯異或操作。為了在Quartus II中實現這4種邏輯操作,本設計直接從Quartus II器件庫中選擇相應的邏輯門電路進行實現。其中,邏輯與操作由AND2器件支持;邏輯或操作由OR2器件支持;邏輯非操作由NOT器件支持;邏輯異或操作由XOR器件支持。根據指令格式,邏輯非操作(指令格式見圖4)的輸入數據為寄存器A中的數據DataA(即圖7(a)中NOT器件的輸入端數據為DataA)。其余邏輯操作(指令格式見圖5)的輸入數據為寄存器A、寄存器B中的DataA和DataB(圖7(a)中其余邏輯門電路的輸入數據為DataA和DataB)。

基于上述各邏輯門,為支持由操作碼Code[13..12]確定邏輯運算的唯一輸出,還需要從各邏輯門輸出結果中進行選擇輸出。本文選用LPM庫中的4選1數據選擇器(lpm_mux)實現選擇輸出。如圖7(a)所示,數據選擇器的控制端信號為Code[13..12],輸入端信號為上述各邏輯單元的輸出邏輯值,數據選擇器的輸出端(LO)為由Code[13..12]選擇的一個輸入端信號,實現由操作碼Code[13..12]確定唯一邏輯值。

圖7(b)為算術運算的電路模塊,支持計算加法、減法、帶進位加法以及帶進位減法4種計算。為支持上述4種算術運算,本設計采用LPM庫提供的lpm_add_sub器件進行加、減兩類操作。該器件含有4個輸入端和2個輸出端。其中,輸入端包含加減操作控制端(add_sub)、進位輸入端(cin)和2個數據輸入端(dataa、datab);輸出端包含算術運算輸出端(result)和進位輸出端(cout)。加減操作控制端信號由Code[12]確定(見圖3指令與運算間的對應關系)。由于指令加、減操作與lpm_add_sub內部的邏輯相反,因此Code[12]需取反后與lpm_add_sub控制端相連。進位輸入端信號來自外部。本案例在同一器件上實現帶/不帶進位加、減操作,通過選擇器為lpm_add_sub提供進位數據,實現為帶進位操作提供進位數據(CYIN),如圖7(b)中lpm_mux所示。2組輸入端數據來源于寄存器數據(DataA、DataB)。對于lpm_add_sub的兩組輸出端,result端口輸出運算邏輯值,cout端口輸出進位輸出值,二者的值分別傳輸到ASO和Coutp。

圖7(c)為選擇輸出模塊。僅由圖7(a)、(b)分別完成邏輯運算和算術運算后,無法得到操作碼指定的運算值。為了輸出操作碼指定運算的值,本文設計如圖7(c)所示的選擇輸出模塊。其中,(I)確定ALU的進位輸出值Cout;(II)確定ALU的數據輸出值ALUOut。

3? 仿真分析

本文采用Quartus II和ModelSim進行聯合仿真。其中,Quartus II用于電路原理圖的驗證與綜合,ModelSim用于輸出仿真波形。下面首先介紹仿真設置,再對仿真結果進行分析。

3.1? 仿真設置

本案例所用版本為Quartus II 12.0和ModelSim SE-64 10.0d,其中Quartus II軟件用于設計和驗證綜合ALU電路,ModelSim軟件用于提供ALU電路的仿真波形圖。Quartus II軟件生成.vo/.vho輸出網表文件供ModelSim軟件使用。

在聯合仿真中,Quartus II軟件需進行下列必要設置:(1)指定ModelSim軟件的安裝位置,設置“Tool name”為ModelSim(從Quartus II軟件的“Tools”—“Options”—“EDA Tool Options”—“ModelSim”進行設置);2)添加.vo/.vho測試文件(從Quartus II 軟件的“Assignments”—“Settings”—“EDA Tool Settings”—“Simulation”,勾選“NativeLink settings”的“Compile test bench”,并點擊“Test Benches”添加.vo/.vho測試文件進行設置)。

在完成上述設置之后,直接從Quartus II菜單欄的“Tools”—“Run Simulation Tool”中點擊“Gate Level Simulation”進行門級仿真。

3.2? 仿真結果

該ALU單元內部主要包含邏輯運算模塊和算術運算模塊,如圖7(a)、(b)所示,為驗證ALU內部各模塊的運算正確性,仿真結果將展示ALU內部各運算模塊的仿真波形,如圖8、9所示,以及ALU的輸出仿真波形,如圖10所示。仿真周期設置為100 ns。

圖8為ALU內部邏輯運算模塊的仿真結果,該仿真對應的電路圖如圖7(a)所示。該仿真圖中的各信號與圖7(a)一致。DataA、DataB以及Code[14..12]為輸入信號,其他為輸出信號。其中,Code[14..12]為操作碼,取值范圍為“000”到“011”4個數據,表示如圖3所示的4種邏輯運算。DataA和DataB為輸入數據,長度為16 bits。波形圖中的AND、OR、NOT和XOR分別為邏輯與、邏輯或、邏輯非和邏輯異或操作的值。例如,在0~100 ns內DataA=“1000110101100111”,DataB=“0011001001101110”,經上述4種邏輯門操作后得到與各邏輯運算一致的值,即:AND=“0000000001100110”、OR=“101111110110 1111”、NOT=“0111001010011000”和XOR=“1011111100001001”。上述運算結果與各邏輯運算的理論值一致,這表明ALU內部的各邏輯門功能正確。

除了上述對各邏輯門的功能驗證之外,圖8中的LO波形用于驗證ALU內部邏輯模塊的輸出。LO為操作碼所對應的邏輯運算值,具體對應關系如圖3所示。例如,在0~100 ns內,Code[14..12]=“000”,則LO輸出邏輯與門的值,即LO=AND=“0000000001100110”。經驗證,其余時間內的LO波形均為操作碼(Code[14..12])所指定的運算值。因此,可判定該ALU邏輯運算模塊具有正確輸出。

圖9為ALU內部算術運算模塊的仿真結果,該仿真對應的電路圖如圖7(b)所示。該仿真圖中的各信號與圖7(b)一致。DataA、DataB為輸入數據,CYIN為進位輸入。Code[14..12]為操作碼,用于確定算術運算類型,如圖3所示。ASO和Cout分別為算術運算模塊的運算值和進位輸出值。本仿真設置CYIN=“1”。在0~100 ns內,Code[14..12]=“100”。根據圖3所示計算類型,該輸出為加法運算的結果,DataA+DataB=“1011111111010101”,進位輸出為0,圖9的仿真輸出結果為ASO=“1011111111010101”,Cout=“0”,表明仿真結果與實際一致。在200 ns~300 ns內,Code[14..12]=“110”,根據圖3所示計算類型,該輸出為帶進位加法運算的結果,DataA+DataB+CYIN= “1011111111100010”,進位輸出為0,圖9的仿真輸出結果為ASO=“1011111111100010”,Cout=“0”。這一仿真結果與實際一致。相同地,減法與帶進位減法操作同樣能輸出正確邏輯值,這表明ALU內部算術運算模塊具有正確輸出。

圖10為ALU的仿真結果,對應的器件符號如圖6所示。該仿真圖中的各信號與圖6、圖7一致。Code[14..12]操作碼指定一種運算類型,ALUOut輸出Code[14..12]指定的運算值,Cout輸出該運算的進位值。從該波形圖中可以看出,ALUOut和Cout的值均與Code[14..12]操作碼指定運算的值一致,實現了ALU的計算功能。例如,邏輯運算指令時(Code[14..12]=“010”或“011”),此時ALU的輸出端(ALUOut)與LO一致;算術運算指令時(Code[14..12]=“100”或“101”),ALU的輸出端與ASO一致。

4? 結? 論

本文以ALU為例進行教學案例設計,旨在利用數字電路知識設計復雜數字電路系統。本案例遵循ALU設計的一般過程,首先,基于ALU功能設計指令集;其次,構建基于指令集的ALU數字電路模塊,實現從指令集到數字電路的轉換;最后通過Quartus II和ModelSim軟件進行聯合仿真,仿真結果直觀地展示了ALU內部主要運算模塊以及ALU單元的正確波形圖,驗證了ALU的功能。本ALU教學案例利用數字電路基本單元實現復雜數字電路系統,學生可以通過教學案例進行自主學習,有效提升其設計復雜數字電路系統的實踐能力和創新能力,為其進一步成長為學習型的信息人才打下良好的專業基礎。

參考文獻:

[1] 郭華.深度學習的關鍵是真正落實學生的主體地位 [J].人民教育,2019(Z2):55-58.

[2] 李春芳.習作評改應突出學生的主體性 [J].中文科技期刊數據庫(全文版)教育科學,2017(5):265.

[3] 李旭,張為公.基于科研項目的數字電路創新型實驗教學改革 [J].實驗室研究與探索,2015,34(1):168-171+209.

[4] 侯艷姣.淺談理論與實踐一體化的電子電工教學 [J].職業,2021(15): 83-84.

[5] 宋耘.哈佛商學院“案例教學”的教學設計與組織實施 [J].高教探索,2018(7):43-47.

[6] 謝曉專.案例教學法的升華: 案例教學與情景模擬的融合 [J].學位與研究生教育,2017(1):32-36.

[7] 王亮.“C# 程序設計”項目案例教學研究 [J].現代信息科技,2018,2(1):115-116+119.

[8] 潘曉蘋,但果,陳昕,等.基于CDIO理念的數字電路實驗教學改革 [J].實驗室研究與探索,2013,32(8):400-402+429.

[9] 陳貞.QuartusII軟件中兩種仿真結果的分析研究 [J].電子技術與軟件工程,2016,14:98-99.

[10] BUV Prashanth,P Anil Kumar,G Sreenivasulu.Design & Implementation of Floating point ALU on a FPGA Processor [C]//2012 International Conference on Computing, Electronics and Electrical Technologies (ICCEET).Nagercoil:IEEE,2012:772-776.

[11] SINGH K J,SARKAR S K. Maximum power point tracking controller using P and O algorithm for solar PV array on FPGA [C]//2016 International Conference on Communication and Signal Processing (ICCSP).Melmaruvathur:IEEE,2016:1878-1883.

作者簡介:陳艷(1991—),女,漢族,湖南常德人,助教,博士,研究方向:FPGA高性能計算。

猜你喜歡
數字電路案例教學法
基于FPGA技術的數字電路綜合實驗研究
探究數字電路設計中的抗干擾問題
數字電路課程的翻轉課堂教學及調研
數字電路的翻轉課堂教學
廣告學專業《社會學概論》教學研究
案例教學法在高等職業院??谇粌瓤茖W教學中的應用效果
案例教學法在高職經濟數學教學中的應用
房地產項目策劃課程案例教學探索與實施
微課在《數字電路》項目化課程中的設計探索
實際數字電路中冗余故障探析
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合