1 引言
DS80C320單片機(jī)是DALLAS公司推出的一款基于51框架的高性能單片機(jī)。
它有如下一些優(yōu)點(diǎn):
ⅰ,具有與51系列完全一致的指令系統(tǒng),能充分兼容所有基于51系列開(kāi)發(fā)的程序;
?、?,具有比8051更加齊全的外設(shè)。相比8051單片機(jī),DS80C320增加了定時(shí)器2以及一個(gè)增強(qiáng)型串口等;
ⅲ,具有比8051更好的效率;DS80C320的一個(gè)指令周期是4個(gè)CLK,8051則是12個(gè),這個(gè)區(qū)別尤其是在處理簡(jiǎn)單指令的時(shí)候優(yōu)勢(shì)明顯,例如單周期指令的處理,DS80C320只需要4個(gè)CLK,而8051需要12個(gè),據(jù)DALLAS公司的統(tǒng)計(jì)表明,在相同時(shí)鐘頻率下,DS80C320每條指令的執(zhí)行速度是8051的1.5~3倍,對(duì)于典型的應(yīng)用程序來(lái)說(shuō),執(zhí)行速度也是8051的2.5倍左右。
?、ぃ渥x取指令的方式比8051更加適合IP核的特點(diǎn);將單片機(jī)內(nèi)部ROM去掉,完全從外部讀取指令,這種特點(diǎn)作為軟核是很適合的,首先是結(jié)構(gòu)簡(jiǎn)單,有利于指令讀取的流水設(shè)計(jì),其次可以突破內(nèi)部ROM大小的限制,最后,作為FPGA設(shè)計(jì)的特點(diǎn),即使8051的設(shè)計(jì),內(nèi)部ROM塊也是放在FPGA芯片的ROM資源里面,與其這樣,還不如直接放到外面更加簡(jiǎn)化時(shí)序與結(jié)構(gòu);
2 總體結(jié)構(gòu)劃分
如圖所示為DS80C320軟核的總體功能圖:

?
圖1 DS80C320功能框圖
本IP核的設(shè)計(jì)主要按照指令執(zhí)行的流程來(lái)安排功能塊,并通過(guò)數(shù)據(jù)總線(xiàn)來(lái)傳遞數(shù)據(jù);虛線(xiàn)里面的為CPU核心;首先是ROM模塊,DS80C320并沒(méi)有內(nèi)部ROM,所以該模塊功能主要是分析從P端口讀取過(guò)來(lái)的指令,并通過(guò)查找指令的長(zhǎng)度以及周期數(shù)目,從而計(jì)算出相關(guān)控制信號(hào)發(fā)送給CPU控制模塊以便控制指令的讀取;同時(shí),如果指令為L(zhǎng)CALL或者ACALL,則可以分析出子程序入口地址并報(bào)送PC模塊,引導(dǎo)PC正確跳轉(zhuǎn);在ROM模塊分析指令的同時(shí),譯碼器DECODER也在進(jìn)行譯碼的動(dòng)作,它將根據(jù)指令的8位數(shù)據(jù)分析出三個(gè)重要的參數(shù):ALU的動(dòng)作類(lèi)型,該指令的操作數(shù)據(jù)來(lái)源以及讀取方式,該指令結(jié)果的存放位置以及存放方式;第一個(gè)參數(shù)送給ALU模塊,其余兩個(gè)送到CPU控制模塊;CPU控制模塊CPU_CON是整個(gè)CPU的核心部分,主要完成兩個(gè)作用:ALU執(zhí)行前的讀取數(shù)據(jù)控制,以及ALU執(zhí)行完成之后回寫(xiě)數(shù)據(jù)控制;該模塊同時(shí)也控制著整個(gè)CPU的時(shí)序,監(jiān)視其他模塊的執(zhí)行情況;ALU則主要是完成計(jì)算工作;INteR模塊則是中斷系統(tǒng)的控制模塊,其功能主要完成對(duì)各個(gè)中斷源所提交的中斷請(qǐng)求的有效判斷以及排序,產(chǎn)生中斷標(biāo)志并且將判斷結(jié)果以及中斷入口地址編碼提交給ROM模塊,以指示程序跳轉(zhuǎn),同時(shí)還需要負(fù)責(zé)在中斷完成之后清除中斷標(biāo)志以及恢復(fù)中斷之前的中斷等級(jí); DS80C320有三個(gè)定時(shí)器和2個(gè)串行口,其中定時(shí)器2和串行口如果不需要的話(huà)可以裁減;至于其他的模塊或者寄存器則在CPU控制模塊的控制下通過(guò)數(shù)據(jù)總線(xiàn)交換數(shù)據(jù);可見(jiàn),本設(shè)計(jì)的思路是以CPU_CON控制整個(gè)CPU的執(zhí)行以及時(shí)序,以INTER控制整個(gè)中斷系統(tǒng),其他寄存器則以數(shù)據(jù)總線(xiàn)來(lái)完成數(shù)據(jù)的交換,均勻的分布在數(shù)據(jù)總線(xiàn)的兩側(cè),結(jié)構(gòu)清晰簡(jiǎn)單,規(guī)則化的設(shè)計(jì)也有利于提高速度,以及方便裁減。
3 一些設(shè)計(jì)特點(diǎn)
3.1時(shí)序設(shè)計(jì)
在DS80C320單片機(jī)的資料里面只有外部接口的時(shí)序介紹,對(duì)于內(nèi)部的信號(hào)執(zhí)行則沒(méi)有說(shuō)明,因此需要重新規(guī)劃,本軟核對(duì)DS80C320的時(shí)序進(jìn)行了詳細(xì)的分析,按照黑盒子的思想,加入了流水線(xiàn)的技巧,對(duì)其時(shí)序的設(shè)計(jì)如下:
對(duì)于普通指令的執(zhí)行過(guò)程,內(nèi)部時(shí)序劃分如下:

?
圖2 DS80C320內(nèi)部時(shí)序圖
這是一條單字節(jié)單周期指令的執(zhí)行過(guò)程,在C1的上升沿開(kāi)始譯碼以及查找本指令的長(zhǎng)度周期表,同時(shí),數(shù)據(jù)總線(xiàn)上面是正在回寫(xiě)的上一條指令的結(jié)果;到了C2的上升沿,數(shù)據(jù)總線(xiàn)和地址總線(xiàn)的控制權(quán)就回到了本條指令的手里,這個(gè)時(shí)候地址總線(xiàn)用來(lái)發(fā)送需要讀取的數(shù)據(jù)的地址,數(shù)據(jù)總線(xiàn)則做好從發(fā)送數(shù)據(jù)到接收數(shù)據(jù)的準(zhǔn)備,這個(gè)動(dòng)作由CPU控制模塊完成;然后在C3的上升沿,被選中模塊根據(jù)地址總線(xiàn)和控制總線(xiàn)讀出相關(guān)數(shù)據(jù)并送入數(shù)據(jù)總線(xiàn),在這以后的一個(gè)時(shí)鐘長(zhǎng)度的時(shí)間里面,ALU接到了數(shù)據(jù),然后在C4的上升沿,開(kāi)始執(zhí)行數(shù)據(jù)處理,同時(shí),CPU控制模塊再次改變地址總線(xiàn)和控制總線(xiàn)的內(nèi)容,并發(fā)布寫(xiě)信號(hào),提示開(kāi)始被選中讀數(shù)的模塊放棄對(duì)數(shù)據(jù)總線(xiàn)的控制權(quán),以及被選中的存儲(chǔ)結(jié)果的模塊分析寫(xiě)入類(lèi)型,作好接收數(shù)據(jù)的準(zhǔn)備,ALU在計(jì)算完成之后就將結(jié)果放到數(shù)據(jù)總線(xiàn),等待下一個(gè)周期的C1開(kāi)始將結(jié)果寫(xiě)入相關(guān)位置;總之,本設(shè)計(jì)充分利用了數(shù)據(jù)總線(xiàn)的資源和流水設(shè)計(jì)的技巧,將本來(lái)需要6個(gè)時(shí)序的操作簡(jiǎn)化為4個(gè)就完成了,時(shí)序緊湊,速度快;同時(shí)采用了分布式處理的思想,大大簡(jiǎn)化了CPU控制模塊的功能,只發(fā)布控制信號(hào),具體哪個(gè)模塊需要執(zhí)行什么功能由該模塊自行根據(jù)控制信號(hào)來(lái)判斷,有利于避免由于局部功能太過(guò)集中而造成的芯片局部過(guò)熱的問(wèn)題;
3.2指令長(zhǎng)度周期表的設(shè)計(jì)
指令長(zhǎng)度表主要是用來(lái)控制取指令,以及辨別指令代碼和指令參數(shù);而指令周期表則主要是用來(lái)控制指令執(zhí)行的時(shí)間,這兩個(gè)表可以簡(jiǎn)化對(duì)指令執(zhí)行的控制。一般這個(gè)過(guò)程由ROM模塊根據(jù)已經(jīng)讀取的指令來(lái)查表,然后根據(jù)查表的結(jié)果和時(shí)序情況來(lái)處理分析,產(chǎn)生一系列控制信號(hào),并發(fā)送給CPU控制模塊,這樣做的好處主要是避免CPU控制模塊與指令以及數(shù)據(jù)打交道,減少其輸入輸出端口數(shù)目;指令長(zhǎng)度周期表的設(shè)計(jì)是和讀取方式息息相關(guān)的,本設(shè)計(jì)使用自己?jiǎn)为?dú)構(gòu)建的表,并且一分為二,處理方式是為:index={lsb_3, ir[7:4]},其中l(wèi)sb_3的含義為:對(duì)于指令的低三位(ir(2 downto 0)) 規(guī)則為:8-F=>7,6-7=>6,0-5不變化。兩個(gè)表使用相同的讀取方式,這樣既可以簡(jiǎn)化結(jié)構(gòu),將查找空間降低為7位,又可以提高查找速度;
3.3 PC異動(dòng)編碼的作用
在單片機(jī)內(nèi)部,PC是需要不停變化的,不僅所有的跳轉(zhuǎn)類(lèi)指令都需要改變PC的內(nèi)容,而且中斷類(lèi)指令還需要完成PC的出棧以及入棧操作;因此,有些模型里面對(duì)PC的處理異常復(fù)雜,基本上是對(duì)每條指令詳細(xì)規(guī)定PC的變化;本設(shè)計(jì)在這方面的處理采用了編碼的技巧來(lái)提高速度;首先分析編碼的可能性,雖然很多指令可以改變PC的內(nèi)容,但是對(duì)于PC來(lái)說(shuō),除了正常的加1操作,其它的變化方式只有如下幾種:

?
其中pmem1和pmem2為指令參數(shù),來(lái)自于ROM模塊;PC_OUT為堆棧中的PC內(nèi)容。
剩下的難題就是由誰(shuí)來(lái)發(fā)出這個(gè)編碼,對(duì)于所有的跳轉(zhuǎn)類(lèi)指令以及中斷類(lèi)指令,每條指令的跳轉(zhuǎn)條件是不相同的,需要一一判斷,本設(shè)計(jì)就巧妙的利用了ALU模塊來(lái)處理這個(gè)編碼,ALU模塊計(jì)算的時(shí)候也是需要對(duì)操作進(jìn)行判斷的,因此,只要添加一小段代碼就可以讓其完成發(fā)送編碼的功能;PC編碼的方式大大簡(jiǎn)化了PC模塊的操作,使得程序更加規(guī)整;
評(píng)論