?

集成電路設計與EDA技術課程專業能力培養實踐

2023-06-22 02:44楊怡雯曾梓萱趙巖李長庚
現代信息科技 2023年2期
關鍵詞:課程教學

楊怡雯 曾梓萱 趙巖 李長庚

摘? 要:Verilog HDL作為描述數字電路的通用語言,在大規模設計中一般采用層次化和結構化的設計方法。為了在獲得較優的電路面積結果的同時提高綜合后輸出網表的可讀性,使用Python和正則表達式對Verilog代碼進行層次化展平處理,用模塊內的設計代碼替換實例化語句。打平層次結構后,設計代碼變為沒有層次的、不帶參數、不帶可選擇配置的扁平鏈式結構,提高了代碼的可維護性。此實踐項目難度適中,有助于學生深入理解Verilog HDL的語法結構和EDA軟件的工作原理,提高了學生的設計實踐能力。

關鍵詞:正則表達式;Python;代碼扁平化;課程教學

中圖分類號:TP39;G434? 文獻標識碼:A? 文章編號:2096-4706(2023)02-0171-04

Integrated Circuit Design and EDA Technology Course Professional Ability Training Practice

—RTL Design Hierarchical Flattening Processing

YANG Yiwen, ZENG Zixuan, ZHAO Yan, LI Changgeng

(School of Physics and Electronics, Central South University, Changsha? 410083, China)

Abstract: As a general language for describing digital circuits, Verilog HDL generally adopts hierarchical and structured design methods in large-scale designs. In order to obtain better circuit area results while improving the readability of the synthesized output netlist, Python and regular expressions are used to hierarchically flatten the Verilog code, replacing instantiated statements with in-module design code. After flattening the hierarchical structure, the design code became a flat chain structure without hierarchy, parameters, optional configuration, which improves the maintainability of the code. The difficulty of this practice project is moderate, which helps students to deep understand the grammatical structure of Verilog HDL and the working principle of EDA software, and improves students' design practice ability.

Keywords: regular expression; Python; code flattening; course teaching

0? 引? 言

電子設計自動化(Electronic Design Automation, EDA)是現代電子系統設計有效的工具[1]。隨著設計規模越來越大,集成電路尤其是大規模數字集成電路的設計過程不僅包含邏輯和電路設計,其所采用的半定制電路設計方法也高度依賴EDA設計工具和設計流程來保證設計的正確性。EDA技術與集成電路相輔相成,先進的EDA技術可以設計大規模的集成電路,而大規模的集成電路則又支持更先進的EDA技術開發,兩者在數字化和智能化的現代電子系統開發中起著支撐作用[2]。EDA技術應用充分體現了數字電子設計中自頂向下的演繹過程[3],充分理解軟件工具的行為,有助于提高學生的設計實踐能力。在專用集成電路設計課程的教學中,作者組織學有余力的同學參與科研項目,使用Python完成了EDA工具中讀入RTL代碼時的一個預處理功能——層次化設計的展平處理。

對于較大規模的設計,一般采用層次化和結構化的設計方法。這種設計方法可以很好地維持設計邊界和層次,符合人的思維方式并利于復用代碼。但是EDA邏輯綜合工具在把RTL描述轉換為門級網表的時候,會以每一個模塊的邊界作為默認的邏輯優化邊界,模塊劃分過小或者層次過多的時候,不能獲得最優的電路面積結果。若在綜合命令中加入“-flat”選項,綜合工具會將所選擇的層次結構打平后再進行優化,在獲得較優的面積結果的同時,輸出網表的可讀性較差,會給調試工作帶來不便。

硬件描述語言(HDL)是一種用形式化方法來描述數字電路和設計數字邏輯系統的語言[4]。由于絕大多數的數字集成電路設計以及FPGA設計都以VerilogHDL的代碼為載體,本文針對Verilog HDL語法,在層次化結構的展平處理中,主要完成以下內容:用模塊內的設計代碼替換實例化語句,主要是模塊內代碼信號的唯一化和輸入輸出的替換操作;對于帶有parameter的參數化設計,將實例化時的參數變成沒有參數的設計;對于帶有generate的可配置化設計,實例化時從可配置的代碼中選擇代碼進行提??;對于帶有define和ifdef的宏定義參數,判斷決定代碼保留。經層次結構打平后,代碼使用扁平的鏈式結構。

1? 處理對象及工具

“模塊”是Verilog的基本設計單元,在一個模塊中引用另一個模塊,對其端口進行關聯,叫作模塊的例化。在一個頂層設計中實例化子模塊電路,類似于編程中在主函數調用子函數。模塊的例化建立了描述的層次,一個復雜的電路往往通過模塊嵌套形成了復雜的層次結構。而去層次化則類似于編程中將用調用函數實現的代碼轉換為不用函數,而是直接在主程序中實現各個函數的內部代碼。經過去層次化后,設計代碼變為打平的、沒有層次的、不帶參數、不帶可選擇配置的代碼。在Python中,re模塊就是一個用于處理正則表達式的模塊[5]。鑒于Python強大的文本處理能力,本文采用Python和正則表達式對Verilog HDL代碼的文本進行處理。

正則表達式被提出時,主要用于描述正則集代數。它是提供計算機操作和檢驗所要抽取的字符串數據的一種強大的工具,是一串由特定意義的字符組成的字符串,提供了一種從字符集合中搜尋特定字符串的規則。正則表達式可以運用于多種操作系統中,目前很多計算機語言都支持正則表達式匹配,如C++、PHP、Java等。

正則表達式最基本的3種功能包括匹配、替換和提取。匹配功能用于判斷文本里面是否有符合要求的字符,將不同的字符按照匹配內容的不同進行分組,如在此項目實踐中將宏定義的標識符和內容根據“`”符號區分。替換功能用于在文檔中使用匹配模式來標識特定文字,然后進行刪除或進行替換,如刪除注釋、端口名和參數聲明名稱的替換、generate語句中帶有$符號的標識符和begin/end語句的替換。提取功能用于從字符串中提取子字符串,如獲取需要的變量名稱、模塊名稱、判斷語句、模塊內容等。Verilog繼承了C語言的多種操作符和結構,其本身就是一系列字符串組成的文本,在信息抽取的過程中完全適應正則表達式的特點。

正則表達式由普通字符和特殊字符組成,在正則表達式中,可以用方括號括起若干個字符來表示一個元字符(特殊字符)。同時正則表達式支持限定符的概念。限定符指定輸入中必須存在字符、組或字符類的多少實例才能找到匹配項,這些限定符可以指定正則表達式的一個給定組間需要出現多少詞才能滿足匹配,因而可以適應一些不確定情況[6]。正則表達式常見的元字符和限定符如表1所示。

2? 處理和實現過程

2.1? 方法總述

首先讀入頂層模塊文件和子模塊文件。如有宏定義文件,則對宏定義文件先進行處理,提取宏定義的名字和參數,在子模塊中進行名字和參數的替換。對于每一個讀入的子模塊文件,若該子模塊在頂層模塊中被例化,則對子模塊文件進行處理,提取所需內容,并在頂層模塊找到例化該模塊的部分,提取對應內容進行替換。整體流程如圖1所示。

2.2? 處理宏定義文件

對于需要方便改動的常量和參數,可以使用宏定義的方式來引用。使用宏可以在不修改源代碼的情況下修改設計,在IP核生成和流程測試中很有用,不僅可以保證代碼具有良好的可配置性,還能提高代碼的規范性和可讀性。由于Verilog中宏定義往往采用一個單獨的文件,提取文件中宏定義的名字和參數,替換掉文本內容中的宏定義的變量,進行宏展開。例如,宏定義文件中通過語句“`define `RST_NR 0”來定義參數“RST_NR”的值為0,依次提取參數名稱為“RST_NR”,參數的值為0。再將子模塊中的參數名稱替換成參數的值,例如將語句“parameter? nr=`RST_NR”替換成“parameter? nr=0”。

2.3? 處理子模塊文件

對子模塊的文本進行處理。為了便于處理,去掉文本中的單行注釋和多行注釋。此外,要對文本進行內容的提取,如圖2所示,具體步驟為:將要處理的①模塊名稱單獨提取出來,方便再頂層模塊中找到對應的內容;對帶參數的模塊進行例化時,為方便進行參數的修改,應提?、趨得Q和③參數的值;信號端口通常采用的是名稱關聯的關聯方式,④端口名稱是需要提取出來的;模塊內會聲明一些新的變量,為了防止重復調用相同模塊導致變量名稱重復的問題,也要提?、葑兞棵Q進行后續處理;整個模塊內容去除參數聲明、端口列表和端口聲明,只保留⑥數據流語句和行為語句。每一個標號內容都對應圖2標號的示例。

當例化多個相同的模塊時,一個個模塊的手動例化會比較煩瑣。用generate語句進行多個模塊的重復例化,可大大簡化程序的編寫過程。generate語句也可允許在細化期間對語句進行條件選擇,根據傳遞參數的不同值對執行的代碼進行選擇。處理該部分內容需要先將整個generate語句部分提取出來,即以“generate”開始至以“endgenerate”結束的部分。該部分的處理難點在于存在多個條件語句和過程結構語句嵌套和并列的情況,造成處理時難以將每個語句begin標志和end標志對應的問題。該問題會讓提取對應參數所選擇的正確語句變得困難。因此,本文引入利用棧的數據結構和計數器的處理方法,具體流程圖如圖3所示。

為了更加直觀的描述該方法,舉例如表2所示。

該方法將對應的begin和end一一配對,解決了難以選取正確的文本內容的問題。依次提取判斷語句的情況,因Python與Verilog中表示“且或非”的方法不同,因此需將判斷語句轉換為Python語法中的語句,如表3所示。

通過以上代碼進行替換后將再進行判斷,提取為真語句后的標識符,截取該標識符之間的內容,即為所需,對于表2中的示例,若“st==1”為假,則截取“q_r<={bw{1'b0}};”。最后需將標識符還原成begin和end語句。對于嵌套和并列的generate語句,也可采用上述標識符的方法來區分不同的“generate”和“endgenerate”。

2.4? 處理頂層模塊文件

對頂層模塊進行文本處理。出于同樣理由的考慮,去掉文本中的單行注釋和多行注釋。每讀入一遍子模塊,就對頂層模塊處理一遍,如圖4所示,具體步驟為:根據讀入的子模塊的①模塊名稱,對頂層文件中該模塊的內容進行截取,即⑦模塊內容,所有的替換處理都是針對該子模塊中⑥數據流語句和行為語句的內容;對于帶參數例化的模塊,考慮到參數例化存在只重置部分參數的情況,將需要新寫入的⑧新參數名稱和⑨新參數值提取出來,根據⑧新參數名稱進行對照,用⑨新參數值替換掉②參數名稱,未作替換的參數采用原來③參數的值替換掉②參數名稱;模塊例化通常使用按名字進行例化的方式,因為這種方式不考慮順序,不容易出錯,提取出例化模塊的端口名稱,即⑩例化端口名稱,對應④端口名稱將其一一替換成⑩例化端口名稱,而在實際的項目中,往往會看到未連接的端口,這些未連接到例化模塊中的端口按高阻態處理,防止在替換過程中報錯,對應的實例名按照空字符存進對應的位置,如④端口名稱“rst_n”所對應的⑩例化端口名稱空字符“”;對于模塊內變量的聲明,為防止多次調用同一子模塊而出現的聲明名稱重復的問題,在每次調用子模塊時都為該名稱添加包含調用次數字符的后綴,以對模塊內的變量進行唯一化處理,例如當頂層模塊第一次調用子模塊時,子模塊中的⑤變量名稱需要被替換成加了后綴的?新變量名稱;在所有的名稱和值替換完成之后,處理完畢的⑥數據流語句和行為語句替換掉頂層模塊中的⑦模塊內容,完成該子模塊的去層次化處理。每一個標號內容都對應圖4標號的示例。

圖4? 頂層模塊處理步驟

3? 結? 論

EDA軟件屬于當下的“卡脖子”技術之一,如何在本科階段培養學生對集成電路設計以及EDA軟件設計的興趣,也是當前教育教學改革的熱點話題。本文通過RTL設計的層次化展平處理,在難度適中的項目中涉及數字集成電路的結構化設計方法、HDL語法、數據結構、正則表達式、Python語言等內容,讓學生在實踐中深入掌握并靈活運用課堂上所學到的知識,并對EDA軟件的工作原理建立了初步的理解和認識,從而提高學生的設計能力,增加學生的自主學習空間與學習自由度,培養學生的探究能力、創新能力,為日后的工作和科研打下良好的基礎;是對提高集成電路設計以及EDA技術課程教學效果、提高學生專業實踐能力的有益探索。

參考文獻:

[1] 孫進輝.EDA技術在數字電子實驗設計中的合理應用分析 [J].實驗室研究與探索,2018,37(2):199-202.

[2] 丁家峰,李新梅,尹林子,等.EDA技術中自頂向下方法的教學與實踐 [J].電氣電子教學學報,2020,42(6):91-95.

[3] 丁家峰,李新梅,孫克輝,等.“EDA技術與應用”課程教學改革與創新 [J].電氣電子教學學報,2017,39(6):47-49+59.

[4] 羅杰,康華光.兩種硬件描述語言VHDL/Verilog的發展及其應用 [J].電氣電子教學學報,2002(4):1-5.

[5] 馬彤鑫.基于Python的正則表達式獲取字符串信息 [C]//第三十四屆中國(天津)2020'IT、網絡、信息技術、電子、儀器儀表創新學術會議論文集.中國天津:天津市電子學會、天津市儀器儀表學會,2020:299-300.

[6] 張靜,張妍.正則表達式及其在信息抽取中的應用 [J].電腦知識與技術,2009,5(15):3867-3868.

作者簡介:楊怡雯(2001—),女,漢族,陜西西安人,本科在讀,研究方向:電子信息。

收稿日期:2022-09-06

基金項目:湖南省教學改革省級課題(HNJG-2021-0302);中南大學教學改革校級課題(2021jy063)

猜你喜歡
課程教學
小學數學教學應注重培養學生的應用意識
淺談微課在PHOTOSHOP課程教學中的實踐
會計專業課程教學國際化的探索性研究
高職物流專業“物流費用結算實務”課程開發研究
高職院校醫學檢驗技術專業提高課程教學質量的探討
《供應鏈管理》課程教學改革
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合