基于EDA技術(shù)的單片機IP核設(shè)計
摘 要:本文介紹了利用EDA技術(shù)設(shè)計出與MCS-51系列微處理器指令集完全兼容的8位嵌入式微處理器芯片的IP核,并經(jīng)過驗證獲得了滿意的效果。
關(guān)鍵詞: 電子設(shè)計自動化;知識產(chǎn)權(quán)核;設(shè)計
1. 引言
EDA(Electronic Design Automatic),簡單的說就是通過有關(guān)的開發(fā)軟件,自動完成用軟件的方式設(shè)計的電子系統(tǒng)到最終形成集成電子系統(tǒng)或?qū)S眉尚酒囊婚T新技術(shù)。其中, EDA關(guān)鍵技術(shù)之一就是可以用硬件描述語言(HDL)來描述具有廣泛應(yīng)用前景、且具備自主知識產(chǎn)權(quán)的IP核(Intellectual Property)。這種IP核具有很高的通用性和靈活性,可以通過軟件編程完成不同特定的功能,可以任意使用在各種嵌入式微控制系統(tǒng)中。嵌入式IP核的應(yīng)用,由于重用設(shè)計思想、設(shè)計知識,極大地降低了設(shè)計成本,縮短了設(shè)計周期,成為當(dāng)今片上系統(tǒng)(SoC)的重要設(shè)計手段?!?】
MCS-51系列單片機是目前國內(nèi)應(yīng)用時間最長、最普及、可獲得應(yīng)用資料最多的功能強大的8位MCU,建立兼容MCS-51單片機IP核對于各種嵌入式系統(tǒng)和SoC的應(yīng)用具有重要意義。針對MCS-51單片機的應(yīng)用前景,筆者成功設(shè)計了與MCS-51系列微處理器指令集完全兼容且功能更強的8位嵌入式微處理器芯片,通過IP核重用技術(shù),可廣泛應(yīng)用在各種SoC中。
2.系統(tǒng)簡介
本課題采用Altera公司的MAX+plusⅡ10.0設(shè)計平臺,以超高速集成電路硬件描述語言VHDL為系統(tǒng)邏輯描述的唯一表達方式,采用自頂向下的設(shè)計原則,對MCS-51單片機進行反相設(shè)計。同時選用 Altera 公司的 ACEX系列器件來實現(xiàn)最終的IP核。由于篇幅的關(guān)系,筆者不打算對開發(fā)平臺、開發(fā)工具以及最終實現(xiàn)硬件電路的FPGA芯片進行介紹,而是著重介紹整體的設(shè)計思想。圖1是本課題進行設(shè)計的頂層設(shè)計層次圖。實線部分是MCS-51單片機的內(nèi)核部分,虛線部分是外圍存儲電路部分。下面介紹各部分的實現(xiàn)方法。
圖1 MCS-51單片機頂層設(shè)計層次圖
3.系統(tǒng)現(xiàn)實
3.1 算術(shù)邏輯單元(ALU)的實現(xiàn)
算術(shù)、邏輯運算模塊的功能是按照控制單元給出的指令,對來自數(shù)據(jù)存儲器、程序存儲器、累加器A以及程序狀態(tài)字的相關(guān)位的數(shù)據(jù),進行相關(guān)的算術(shù)和邏輯運算。圖2是用VHDL語言對ALU模塊進行描述的設(shè)計層次圖。由圖中可以看出整個ALU由6個模塊組成:加/減法器,乘法器、除法器、十進制調(diào)整器、邏輯運算器以及一個多路選擇器。其中加/減法器又可以分成兩個子模塊。本模塊將用較為簡單的純組合邏輯電路來實現(xiàn)。限于篇幅,具體的實現(xiàn)不再贅述,請讀者參閱參考文獻【2】。
圖 2 ALU設(shè)計層次圖
3.2定時器/計數(shù)器(Timer/Counter)模塊的實現(xiàn)
分析MCS-51單片機的定時器/計數(shù)器的功能和原理可知,本單元將必須以時序邏輯電路的方式來實現(xiàn)。圖3中的左圖就是本模塊設(shè)計完成后形成的符號文件。圖中的輸入除時鐘CLK、復(fù)位RESET、外部中斷0 INT0_I和外部中斷1 INT1_I直接來自芯片的外部輸入之外,其余的輸入信號全部來自控制器。其中的RELOAD_I[7 to 0]、WT_EN以及WT_I[7 to 0]用于重寫定時器/計數(shù)器內(nèi)部寄存器。所有的輸出信號全部送往控制器,用于及時更新特殊功能寄存器的內(nèi)容。
定時器/計數(shù)器的兩種工作方式?jīng)Q定了要設(shè)計好定時器/計數(shù)器首先必須設(shè)計一個分頻器和兩個(因為有兩個定時器/計數(shù)器)負跳變的檢測器。負跳變的檢測器,可以用一個雙穩(wěn)態(tài)的觸發(fā)器來實現(xiàn);分頻器的實質(zhì)是計數(shù)器。觸發(fā)器和計數(shù)器都是時序邏輯電路中的基本單元,VHDL語言的實現(xiàn)方法請讀者參考相關(guān)書籍【1】。因此本設(shè)計實體的結(jié)構(gòu)體將由3個進程來實現(xiàn)。除了分頻器和兩個負跳變的檢測器各占用一個進程外,第三個進程用于實現(xiàn)時器/計數(shù)器的四種工作模式。對定時器/計數(shù)器的各種工作于模式的原理分析可知,要實現(xiàn)這樣一個電路,其VHDL語言的結(jié)構(gòu)體應(yīng)該包括兩個大的部分:一是置中斷標志位,二是改變計數(shù)寄存器的值。同時,改變計數(shù)寄存器的值又可以細分為兩塊——寫高8位寄存器和寫低8位寄存器。各個進程之間相互關(guān)聯(lián),內(nèi)部信號將作為進程之間傳輸信息的紐帶。
圖 3 8051_tmrctr和8051_siu的符號文件圖
3.3串行接口模塊
MC5—51單片機的串行接口既可以作通用異步接收和發(fā)送器(UART)用,又可以作同步移位寄存器用。圖3中的右圖就是本模塊設(shè)計完成后形成的符號文件。由于本設(shè)計不支持I/O口的復(fù)用,所以為串行口工作于模式0下增加了RXD_O和RXDWR兩個輸出引腳,前者用于輸出,后者為輸出有效控制位。串行口控制寄存器SCON在設(shè)計中也被分成兩部分,一部分接收來自控制器的輸入(一共6位,SM0、SM1、SM2、REN、TB8和RI),一部分作為輸出送往控制器(一共3位,RB8以及分別指示發(fā)送和接收完畢的兩位,控制器會根據(jù)這兩位來對中斷標志置位)。至于發(fā)送中斷標志位TI,由于其不會影響串行口的工作過程所以在此并未列出,它將在控制器中得到體現(xiàn)。
串行口有四種工作方式,方式0和方式2是對時鐘頻率分頻的結(jié)果;方式1和方式3的波特率是對定時器/計數(shù)器1的溢出率進行分頻。由此可見,首先必須要解決的問題就是設(shè)計分頻器。由于在方式0下,串行口是作半雙工的同步移位寄存器使用,其發(fā)送和接收的波特率是一樣的,因此對于方式0,串行口內(nèi)部的分頻信號只需要一路即可。但是對于其他方式,串行口均是工作在全雙工的狀態(tài)下,因此,每種方式下均需要兩路分頻信號。分頻器的設(shè)計在上已經(jīng)述及,在此不加贅述。對于方式1和方式3,其分頻的對象都是定時器/計數(shù)器1的溢出率,且分頻的系數(shù)是一樣的。由于串行口只有一個,它不可能同時工作在方式1和3,因此方式1和方式3可以共用分頻信號。要對定時器/計數(shù)器1的溢出率進行分頻,首先必須測出其頻率,為此需要一個上升沿的檢測器來監(jiān)測外部輸入的定時器/計數(shù)器1的溢出信號(圖3中的右圖中的TF_I引腳),這樣的檢測器同樣可以用雙穩(wěn)態(tài)觸發(fā)器來實現(xiàn)。檢測器在監(jiān)測到TF_I引腳的上升沿時就使其輸出信號保持一個時鐘周期的高電平,再來另外設(shè)計計數(shù)器對此高電平進行計數(shù),以達到對其分頻的效果。
除了作為同步移位寄存器的方式0外,其他的三種方式在接收外部輸入的時候均需要對外部的輸入信號采樣監(jiān)測以確定信號的值。因此一個位檢測器是必需的。同時,串行口工作在方式1、方式2和方式3時,每一個接收的數(shù)據(jù)幀都有一個起始位,這個起始位被固定為0,也就是說在輸入端RXD_I監(jiān)測到1到0的負跳變就會啟動接收過程(注:負跳變檢測器對外部輸入引腳的采樣頻率為波特率的16倍)。位檢測器的設(shè)計原理是把一個接收位的時間分為16等分(以內(nèi)部計數(shù)器的16個狀態(tài)來表示),在計數(shù)器的7、8、9狀態(tài)時,位檢測器對外部輸入端的值進行采樣。采用3取2的表決方法來抑制噪聲。如果位檢測器檢測到接收的第一位不是0,那么就說明它不是一幀數(shù)據(jù)的起始位,應(yīng)該擯棄,接收電路復(fù)位。
至于接收和發(fā)送,這里采用有限狀態(tài)機的方式來實現(xiàn)。由于要工作在全雙工模式下,所以接收和發(fā)送要采用兩個有限狀態(tài)機,有限狀態(tài)機的每一個狀態(tài)用來發(fā)送/接收移位數(shù)據(jù),發(fā)送和接收的具體實現(xiàn)方式是移位【3】。移位的時鐘來自上面所述的分頻器,也就是根據(jù)各自的波特率進行。限于篇幅,在此不再詳述。
3.4控制器模塊
控制器的設(shè)計是MCS-51單片機IP核設(shè)計中最復(fù)雜的部分,也是設(shè)計中最重要的組成模塊??刂破鞯膶⒎譃閮蓚€模塊來實現(xiàn)。一個模塊(在此命名為control_mem)主要用于與存儲器(包括內(nèi)部RAM,特殊功能寄存器SFR,外部RAM以及程序存儲器)的控制。另一個模塊(在此命名為control_fsm)主要用來實現(xiàn)指令系統(tǒng)。control_mem以時序電路的方式來實現(xiàn),它的作用是根據(jù)狀態(tài)機傳來的各種控制指令來對相應(yīng)的存儲器進行操作。本狀態(tài)機的主控時序進程是control_mem模塊中的一個以時序邏輯電路現(xiàn)實的進程。它的啟動由control_mem模塊的相應(yīng)輸出信號來實現(xiàn),啟動后每經(jīng)過已過狀態(tài),其輸出的信號就會部分改變,這些改變就會指示control_mem下一步的動作,如此周而復(fù)始。下面簡要介紹一下二者的實現(xiàn)原理。
control_mem模塊的主要任務(wù)是根據(jù)狀態(tài)機的相應(yīng)指令,實現(xiàn)對存儲器的相應(yīng)操作。其總共要完成7個任務(wù)(7個任務(wù)分別以7個進程來實現(xiàn),除前3個以時序邏輯電路的方式來實現(xiàn)外,后面的4個進程全部是以組合邏輯電路的方式來實現(xiàn)的。),分別是:
1.監(jiān)測各個中斷源的變化。使指示中斷源有變化的相應(yīng)信號位置位。監(jiān)測外部引腳的變化的方法,一個簡單的雙穩(wěn)態(tài)觸發(fā)器就可以實現(xiàn)。
2.根據(jù)狀態(tài)機的指令寫一些用戶沒有直接地址的芯片內(nèi)部輔助寄存器。它主要的作用是作為狀態(tài)機的主控進程,同時它也會根據(jù)狀態(tài)機的狀態(tài)置位相應(yīng)的內(nèi)部輔助寄存器(例如:指示高、低優(yōu)先級的中斷是否正在運行的寄存器等)。同時,取指令也是在本進程中實現(xiàn)的。
3.寫內(nèi)部RAM和SFR,包括寫“字節(jié)”和寫“位”。它由時序邏輯電路來實現(xiàn),寫“位”和寫“字節(jié)”的控制信號由狀態(tài)機給出,每次寫操作均由時鐘上升沿觸發(fā)。
4.根據(jù)檢測中斷源的變化的結(jié)果,在必要時向狀態(tài)機發(fā)送中斷請求類別指示信號。它是一個純組合邏輯電路,進程1中一旦監(jiān)測到中斷源有變化,它的輸出信號(與狀態(tài)機相連接)就會改變,從而指示狀態(tài)機進入中斷。
5.讀內(nèi)部RAM和SFR,包括讀“字節(jié)”和讀“位”。此進程為一純組合邏輯電路。RAM和SFR任何單元的內(nèi)容的改變均可以啟動該進程,同時地址信號也是進程的敏感信號之一。每一次讀的過程會讀到兩個值,一個是“字節(jié)”數(shù)據(jù),一個是“位”數(shù)據(jù),至于狀態(tài)機在指令的執(zhí)行過程中會使用“字節(jié)”數(shù)據(jù)還是“位”數(shù)據(jù),由狀態(tài)機根據(jù)當(dāng)前指令自己決定。
6.根據(jù)狀態(tài)機發(fā)出的各種多路選擇器的值,輸出相應(yīng)的地址和數(shù)據(jù)的值。多路選擇器的作用是根據(jù)狀態(tài)機的指示,即時的輸出內(nèi)部RAM的地址、內(nèi)部RAM數(shù)據(jù)(包括“位”數(shù)據(jù)和“字節(jié)”數(shù)據(jù))、外部RAM的地址等。
7.計算下一個指令指針的值。它根據(jù)狀態(tài)機的指示,實現(xiàn)對程序計數(shù)器值的改寫。
control_fsm模塊的作用則很單一,就是實現(xiàn)指令系統(tǒng)。不過需要說明的是,這個狀態(tài)機在接收到來自control_mem模塊的有關(guān)中斷源有變化的信號時,它會優(yōu)先發(fā)出控制指令,指示control_mem模塊改變指令指針的值,進入中斷。沒有中斷發(fā)生的時候,它就會根據(jù)程序存儲器的指令來運作。關(guān)于指令狀態(tài)機的設(shè)計細節(jié)讀者可以參閱參考文獻【4】。
3.5.外圍存儲器模塊的實現(xiàn)
由于對存儲器容量在不同的場合有不同的要求,且實現(xiàn)的方式多種多樣,故本設(shè)計才把整個設(shè)計分為MCS-51內(nèi)核和存儲器兩個大的部分。這樣做一方面可以方便裁減,使IP核可以在更多的可編程器件上綜合;另外實現(xiàn)起來也相對容易。
MAX+ plusⅡ中為了增加原件庫的靈活性,為一些常用的功能模塊提供了參數(shù)化的元件,這些元件的規(guī)模以及具體功能可以由用戶直接指定,如同可編程元件。這一類元件就是MAX+ plusⅡ中的LPM,即——可調(diào)參數(shù)元件。利用LPM所提供的RAM、ROM例化設(shè)計文件,設(shè)計實現(xiàn)了128字節(jié)內(nèi)部RAM和4k ROM模塊,其中ROM模塊是一個空結(jié)構(gòu)實體,在有內(nèi)部程序時換成相應(yīng)的結(jié)構(gòu)。內(nèi)部程序必須以ASCII碼形式或十六進制形式的文件寫入,表明每個地址的初始值,用于設(shè)計的仿真和綜合。
4.功能仿真
下面通過幾條簡單的指令,來對所設(shè)計的IP核進行軟件仿真。幾條仿真的指令助記符和指令的操作碼、操作數(shù)、字節(jié)數(shù)、周期數(shù)如下表1所示。仿真的結(jié)果如圖5所示。圖中rom_data_i表示的程序存儲器中的數(shù)據(jù);rom_adr_o是程序計數(shù)器PC的值;state_i為芯片內(nèi)部信號,指示的是指令執(zhí)行的狀態(tài),“7”表示在取指令狀態(tài),其他值為執(zhí)行狀態(tài)。acc_o是內(nèi)部寄存器ACC的值。從圖中可以清楚的看到各信號的變化。
表1 仿真指令表
指令助記符 | 操作碼 | 操作數(shù) | 指令字節(jié) | 指令周期 |
AJMP FFH | 01H | FFH | 2 | 2 |
CPL | F4H | / | 1 | 1 |
MOV A,#23H | 74H | 23H | 2 | 2 |
MOV R0,A | F8H | / | 1 | 1 |
MOV23H,#05H | 75H | 23H,5H | 3 | 3 |
ADDC A, @R0 | 36H | / | 1 | 2 |
圖4 8051-Core軟件仿真圖
5 結(jié)束語
嵌入式微處理器具有廣泛的應(yīng)用前景,特別是隨著信息技術(shù)的發(fā)展,信息安全性和可靠性正逐步受到人們的重視。在FPGA的可用門和性能對高檔功能的支持中,IP核的價值正在充分展現(xiàn)。IP核已成為有效地進行大規(guī)模設(shè)計和縮短設(shè)計時間的基礎(chǔ)。因此,積極開發(fā)具有自主知識產(chǎn)權(quán)的IP模塊,在SoC領(lǐng)域占有一席之地,即符合我國國情,有具有重要意義。本課題設(shè)計出的MSC-51系列單片機IP核不僅通過了軟件仿真,而且其功能已經(jīng)通過了硬件測試,所以其不僅是一個成熟的軟IP核,也是一個成熟的硬IP核。
本項目經(jīng)濟效益:本IP核主要應(yīng)用于SoC中,向相關(guān)有償機構(gòu)購買類似IP核一次的使用價格在3美元左右,但是附帶開發(fā)工具在300美元左右,本IP核完全利用免費版本的MAX+plusⅡ進行設(shè)計以及后期使用,因此若本IP核應(yīng)用3000次,那么項目的經(jīng)濟效益在8萬元左右。
本文作者創(chuàng)新點:本次要設(shè)計的兼容MCS-51單片機IP核有以下特色:1.完全同步的設(shè)計,系統(tǒng)在統(tǒng)一的時鐘下工作。2.指令集與工業(yè)標準的MCS-51系列單片機完全兼容。3.指令周期較原MCS-51系列大幅提高,所有指令都可在1到4個時鐘周期內(nèi)完成,時鐘周期只與所選用的FPGA/CPLD芯片的延時有關(guān),而與設(shè)計無關(guān)。4.沒有復(fù)用的I/O口。5.IP核升級方便,對于不需要的部件可以任意裁減。