王黨輝,韓 茹,黃小平,張盛兵,尚學群
(西北工業大學 計算機學院,陜西 西安 710129)
計算機專業學生的系統能力的核心是在掌握計算機系統原理基礎上,熟悉如何進一步開發構建以計算技術為核心的應用系統,這需要學生更多地掌握計算系統內部各軟件/硬件部分的關聯關系與邏輯層次,了解計算系統呈現的外部特性以及與人和物理世界的交互模式[1]。數字邏輯設計課程是計算機專業的一門專業基礎課,是計算機組成原理、微機原理與接口技術、嵌入式技術等課程的先導課程[2],在整個計算機硬件的知識體系中占有重要地位,肩負著引導學生了解計算機硬件組成,掌握其工作原理并進行計算機硬件電路分析與設計的重要使命[3]。
隨著人工智能、物聯網、大數據等新技術的飛速發展,傳統數字邏輯設計課程教學面臨的重要問題和挑戰是教學內容與實踐脫節[4],傳統的數字電路課程的重在講授以分立元件構建數字系統的Bottom-UP(自底向上)設計方式,與后續的計算機組成原理等課程要求的Top-Down(自頂向下)設計方式不相適應;近年來,雖然不少學校開展了基于硬件描述語言和FPGA、采用Top-Down設計流程進行實驗教學的探索,但是理論課教學內容中關于數字系統設計中的一些難點和重點問題仍存在講授不夠系統和深入等問題。
數字邏輯設計課程的架構如圖1所示,主要包括教學內容、重點和難點以及實驗3部分。其中,教學內容給出了理論課教學中的主要章節;重點與難點部分是在對每個主要的教學內容進行分析的基礎上,結合數字系統工程應用的需求給出的在理論課教學中需要重點講授的內容;實驗部分初步給出了一個層次遞進、難度遞增的配套實驗系統。
數字邏輯課程的教學內容主要包括數字系統設計流程、數字邏輯基礎、數字邏輯的CMOS(complementary metal oxide semiconductor,互補金屬氧化物半導體)實現、基本/復雜數字模塊設計、硬件描述語言與數字系統設計等幾大部分。
數字系統設計流程要使學生掌握當前流行的Top-Down設計流程,同時還要與傳統的Bottom-Up流程進行對比,說明Top-Down設計流程的好處。Top-Down設計流程分為前端和后端,前端從系統級設計到門級網表,后端設計從門級網表到GDSII輸出文件。計算機專業的學生更應該側重于系統級設計,所以教學重點應該放在前端設計上,但是對于后端設計也應做一定的介紹。

圖1 數字邏輯設計課程架構
在設計流程的講授過程中,應讓學生對當前EDA(electronic design automation,電子設計自動化)領域的概況有一個大體了解,因此在設計流程的每個步驟中都可以介紹Synopsys、Cadence和Mentor Graphics三大廠商的相關工具。另外,根據數字系統的最終實現方式不同,應將ASIC(application specific integrated circuit,專用集成電路)和FPGA(field programmable gate array,可編程門陣列)兩種不同的實現方式做介紹。由于本課程及后續課程中的實驗一般都采用FPGA實現方式,因此重點應介紹FPGA實現方式的優缺點及相應的設計流程。
數字邏輯基礎部分與傳統數字電路課程中的相關內容幾乎相同,包括數字表示、基本的開關邏輯、布爾代數、各種邏輯門、真值表及卡諾圖化簡等。這部分內容不需要配套實驗,只需要布置一些作業即可。
傳統的數字邏輯設計課程對數字邏輯的CMOS實現介紹很少,但是我們認為計算機專業的課程應該對CMOS原理進行較為詳細的介紹,主要原因有:①當前數字系統的主要實現方式是CMOS工藝,如果計算機專業畢業的學生對MOS晶體管等相關技術不了解會導致學生對硬件電路如何落地實現產生疑惑;②有一部分學生日后可能從事EDA軟件的開發,如果這些學生在本科階段對于CMOS技術有深入的了解,那么這將對他們的工作起到一定的助力;③CMOS工作原理可以將本課程的內容和大學物理中的相關內容進行有效銜接。
在具體的教學內容上,首先,以NMOS為例講解MOS管的基本工作原理,包括NMOS管的物理結構、半導體中的載流子以及電壓控制的基本工作原理;然后,從CMOS反相器開始介紹與非門、或非門等基本門電路的CMOS結構;最后,介紹復雜門電路的CMOS實現,包括傳輸門和異或門等。需要注意的是,由于課時限制及授課對象是計算機專業的本科生,不需要講授MOS管的動態特性推導及計算。當然,我們也鼓勵學有余力的同學通過課外閱讀的方式自學MOS管的動態特性推導及計算,以強化其底層電路的相關知識。
大部分學生不需要掌握MOS管的動態特性及相關的推導計算,因此,不需要設置相關的實驗。對于少數學有余力的同學,可以推薦他們使用SPICE仿真器對邏輯電路進行仿真,通過改變MOS管的寬長比等參數來優化邏輯門在延遲、功耗和電路面積等方面的性能。
在基本邏輯門電路的基礎上,講授構成數字電路的基本模塊的實現,包括多路選擇器、譯碼器、觸發器、寄存器、計數器等。本部分應從這些基本模塊的邏輯功能出發,綜合使用布爾代數化簡、卡諾圖、真值表等知識。
在復雜數字模塊的設計上,以加法器為例進行講授,因為后續的計算機組成原理課程中,加法器是運算器的基礎。另外,在講授過程中,可對信號傳播通過的邏輯門級數作簡單的延時分析,初步引入靜態時序分析的概念,并在此基礎上,將行波進位加法器升級為超前進位加法器,通過對兩種加法器門級結構的比較使學生理解延時與電路面積開銷之間的折中。該部分的實驗同樣針對學有余力的少數學生,使用SPICE對設計的加法器進行仿真。
硬件描述語言(hardware description language,HDL)是Top-Down數字系統設計流程中的基本設計語言。目前,國際上流行的并成為IEEE標準的兩種硬件描述語言分別是VHDL和Verilog,兩種語言在功能上幾乎完全相同,且幾乎所有的EDA工具都支持這兩種語言。但是Verilog HDL語言的語法與常用的軟件編程語言C語言有很大的相似之處,因此近年來在國內和美國的使用比例遠高于VHDL。因此,我們在數字邏輯設計課程中講授Verilog HDL。
目前關于Verilog HDL的教材非常多,但大都重在講述語法,對數字系統的設計機理講得不多。而計算機專業的學生在學習本課程之前,一般都已經學習了C語言或其他的軟件編程語言,如果授課過程中過分偏重語法的講授,將會使學生按照軟件編程語言來學習硬件描述語言,導致學生不能掌握使用HDL設計數字系統的精髓;語法的相似性也會使學生感覺缺乏新鮮感而喪失學習興趣。因此,在授課內容上,應該對語法的講授進行壓縮,只需要用2~4學時講授基本的語法以及程序架構,將重點放在Verilog HDL語言與基本電路模塊的對應上,即寄存器、組合邏輯、總線及存儲器等4種基本電路模塊的描述方法。
在HDL的講授過程中,應突出硬件描述語言的并發執行特性與實際電路工作的映射關系。通常,初學者對于HDL的并發執行特性很難理解,這也是講課過程中的難點之一。為了講授該問題,可以首先介紹邏輯電路模塊間的信號傳輸關系,即只有一個邏輯模塊的輸入信號發生變化才能引起該模塊內部的MOS翻轉進行計算;然后介紹Verilog HDL中,一個always塊對應一個基本電路模塊,且always塊中的敏感信號即為觸發該模塊在仿真過程中執行一次相關代碼的輸入信號,并由此引出基于事件觸發的邏輯仿真器的基本工作原理。這樣可以使學生對HDL的并發執行特性有較深入的理解,也有利于學生盡快上手進行編程實踐。另外,在基本電路模塊描述中,要特別注意兩個問題,一是每個always塊中對應的邏輯只能是4種基本電路模塊之一;二是寄存器與鎖存器的區別,以及何種描述能夠產生鎖存器邏輯,要特別強調在FPGA設計中建議不要使用鎖存器的設計原則及原因。
在硬件描述語言的講授中,還需通過例子來講授具體HDL描述與電路原理圖之間的映射關系,我們建議先對描述的HDL語言進行分析,由學生自己根據語言畫出相應的電路原理圖,然后采用Synplify工具對HDL描述進行綜合,將綜合所得的原理圖與學生分析所得的原理圖進行對比分析,使學生深入理解邏輯綜合的過程。
對于計算機專業的本科生來講,設計的數字系統大都是全同步系統,而寄存器級傳輸(register transfer level,RTL)模型是全同步設計的基礎,而且后續的計算機組成原理課程中處理器的時序優化的驅動力也是基于RTL的分析方法,因此,RTL的講授是數字系統設計部分的重點和難點。在RTL的講授過程中,圖2所示的模型是不能將RTL講清楚的,僅能讓學生粗淺地理解RTL就是寄存器之間嵌著組合邏輯的電路結構,不能掌握RTL設計的精髓。在此處,應該配以圖3所示的工作時序圖,說明寄存器用于進行數據的存儲和向下一級邏輯的數據傳輸,組合邏輯用于具體的計算。另外使用圖3所示的時序圖可以引出靜態時序分析的基本方法并引出邏輯優化的方法,其中邏輯優化方法應包括組合邏輯中插入寄存器打斷關鍵路徑、串行計算轉并行計算,最后到達的信號放置到距輸出最近等策略。最后,對RTL進行總結,需要明確地告訴學生:①在Top-Down設計流程中,幾乎所有的EDA工具都對RTL做了很好的支持。雖然近年來高層次綜合技術也得到了很大的發展,但是在設計的性能、功耗等方面,高層次綜合技術中采用的行為級描述與RTL有不小的差距,因此在追求高性能低能耗的系統中,RTL還是主流設計模型。②RTL有助于進行模塊化設計,有助于進行時序規劃(timing budget),因為寄存器可以打斷組合路徑的延遲。只要模塊間采用寄存器接口,那么多個模塊連接起來形成一個系統時,基本上不會產生新的更長的組合路徑延遲。③與RTL緊密聯系的靜態時序分析方法有助于進行延遲優化。

圖2 寄存器傳輸模型

圖3 寄存器傳輸模型的工作時序
有限狀態機(finite state machine,FSM)是當前數字系統中實現控制的重要方法,但是大多數教材中僅講述如何使用HDL描述FSM的方法,沒有講述在FSM設計中如何進行狀態劃分、如何定義狀態轉換等關鍵問題。因此,在FSM的講授中,首先根據圖4的狀態轉換模型明確當前狀態C-State和下一狀態N-State之間的轉換關系,明確C-State是寄存器信號,而N-State是根據C-State和當前的輸入預計算下一個狀態,在下一個時鐘沿到來時打入寄存器成為新的C-State。在生成控制信號方面,根據C-State或C-State和當前輸入進行組合運算生成控制信號。另外,可以使用一個例子,如同步串行傳輸控制器,來說明如何進行狀態劃分和定義狀態轉換。
在實驗方面,我們設計了層次遞進,難度遞增的系列實驗,其中基本的組合邏輯和時序邏輯的目的是讓學生熟悉HDL語言的編程方法、Testbench的編寫方法以及仿真環境的使用;具有異步清零端和同步置數端的加法/減法計算器可讓學生理解邏輯綜合的過程;跑馬燈實驗可以讓學生熟悉有限狀態機的描述及FPGA工具的使用;最后一個綜合性實驗是設計一個通用串行異步傳輸器,設計中需要考慮狀態機的狀態劃分與定義、計數器、多路選擇器、數據緩沖器等多種典型電路模塊,而且設計好的電路可以下載到FPGA中完成與PC機的串口進行通信,提升學生的FPGA調試能力。

圖4 有限狀態機的狀態轉換模型
由于一般情況下該課程的課內實驗學時數較少,如西北工業大學計算機學院的課程只有16學時的課內實驗,因此所有實驗全部在規定的課時內完成幾乎是不可能的,因此建議在課內實驗只完成最后的綜合實驗,其他的實驗由學生在課余時間自主完成,教師和助教通過網絡進行答疑。
對內容和實驗進行重構的數字邏輯設計課程在西北工業大學計算機學院的本科生中已經開設了兩屆,每屆有近200名學生受教,學生的數字系統設計能力得到了較大的提升,具體體現在以下兩個方面:
(1)在后續的計算機組成與系統結構課程中,25名學生參加了實驗試點班,分組(3~4人一組)完成了具有50條MIPS指令的多周期或流水線處理器的設計,并完成了FPGA上板調試。其余學生中,95%的學生完成了簡單的基本MIPS指令集處理器的設計與仿真,其中有60%以上的學生完成了40條以上的指令,較之前的完成率有明顯提升(之前完成率僅為30%左右)。
(2)在2017年9月舉行的全國大學生計算機系統能力培養大賽上,由學習了本課程的4名本科二年級學生組成的代表隊實現了一個基于MIPS指令集的微處理器,在完成了體系結構優化的基礎上,使用了多種邏輯優化技術,包括使用“將最晚達到的信號放置到距輸出最近”的策略對流水線前遞路徑進行優化、使用“串行轉并行”策略優化流水線沖突檢測邏輯、使用“盡量平衡組合延遲”的時序優化策略對IO的固有延遲進行優化等,在處理器IPC不明顯下降的情況下將處理器的工作頻率由68.8MHz提升到92.7MHz,提升比率高達34.65%。最終SPEC性能得分為3.712 2分(基準是龍芯132處理器),處理器性能遠超其他參賽隊。
數字邏輯設計課程在計算機專業本科生中具有重要的知識銜接作用,是后續計算機組成原理、嵌入式等專業核心課的基礎。由于全新的教學內容開展時間不長,目前只是處于探索階段,教學過程中還存在很多的問題需要解決,包括具體章節的課時分配、系列實驗設置的合理性和科學性等。