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