《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的8085A CPU結(jié)構(gòu)分析
基于FPGA的8085A CPU結(jié)構(gòu)分析
elecfans
摘要: 現(xiàn)場(chǎng)可編程門(mén)陣列FPGA 門(mén)數(shù)眾多,人們可以將合適的IP軟核或其他形式的核作為嵌入式模塊裝在自己的設(shè)計(jì)中,。但通常IP軟核需要門(mén)數(shù)較多的FPGA 器件支持,,作為學(xué)習(xí)來(lái)說(shuō)的FPGA 芯片往往資源有限,需要節(jié)約FPGA 的成本與面積; 并且沒(méi)必要實(shí)現(xiàn)所有功能,, 只要做出關(guān)鍵部分及重要結(jié)構(gòu),,明白其運(yùn)行機(jī)理,又能與真實(shí)的CPU 緊密相聯(lián)即可,。實(shí)驗(yàn)箱上采用的FPGA 芯片為Altera 公司的EPF10K20TC144- 4,。這里以Inte l的8085A 為例來(lái)說(shuō)明8位計(jì)算機(jī)的工作原理。
關(guān)鍵詞: FPGA 8085A EPF10K20 Synplify
Abstract:
Key words :

    1 引 言

  現(xiàn)場(chǎng)可編程門(mén)陣列FPGA 門(mén)數(shù)眾多,,人們可以將合適的IP軟核或其他形式的核作為嵌入式模塊裝在自己的設(shè)計(jì)中,。但通常IP軟核需要門(mén)數(shù)較多的FPGA 器件支持,作為學(xué)習(xí)來(lái)說(shuō)的FPGA 芯片往往資源有限,,需要節(jié)約FPGA 的成本與面積; 并且沒(méi)必要實(shí)現(xiàn)所有功能,, 只要做出關(guān)鍵部分及重要結(jié)構(gòu),明白其運(yùn)行機(jī)理,,又能與真實(shí)的CPU 緊密相聯(lián)即可,。實(shí)驗(yàn)箱上采用的FPGA 芯片為Altera 公司的EPF10K20TC144- 4。這里以Inte l的8085A 為例來(lái)說(shuō)明8位計(jì)算機(jī)的工作原理,。

  2 8085A CPU 設(shè)計(jì)及實(shí)現(xiàn)

  2. 1 FPGA 芯片及外圍電路簡(jiǎn)介

  Altera的FLEX10K 器件是工業(yè)界首例嵌入式PLD,, 基于可重配置CMOS SRAM 元件。EPF10K20帶有144個(gè)LAB (邏輯陣列塊) 和1152 個(gè)邏輯單元,, 最大I/O數(shù)目為189,。另外, 芯片中嵌入式陳列塊( EAB)有6個(gè),, 其RAM 總位數(shù)為12288,。

  實(shí)驗(yàn)涉及到FPGA 芯片的外圍部分包括控制開(kāi)關(guān)、2* 8鍵盤(pán)輸入,、6個(gè)數(shù)碼管輸出,、8個(gè)輸入端口,、8個(gè)輸出端口及2個(gè)中斷開(kāi)關(guān)等。主要用來(lái)增添程序設(shè)計(jì)的靈活性及形象性,, 使其可現(xiàn)場(chǎng)調(diào)試,, 驗(yàn)證結(jié)果, 避免單純用軟件仿真的不足,。外圍電路控制模塊及結(jié)構(gòu)可參見(jiàn)文獻(xiàn)[ 1] ,。

  現(xiàn)場(chǎng)調(diào)試時(shí)可以通過(guò)控制開(kāi)關(guān), 手動(dòng)從鍵盤(pán)輸入相應(yīng)的地址及數(shù)據(jù)(通過(guò)數(shù)碼管顯示),, 輸錯(cuò)可以修改; 用寫(xiě)使能開(kāi)關(guān)給RAM 寫(xiě)入相應(yīng)程序,。當(dāng)輸入完所有程序后, 按下運(yùn)行開(kāi)關(guān)即可執(zhí)行程序,, 在數(shù)碼管上顯示地址,、數(shù)據(jù)及最終結(jié)果??刂崎_(kāi)關(guān)用于配合鍵盤(pán)通過(guò)手動(dòng)方式輸入程序, 可以形象化的現(xiàn)場(chǎng)編程,。在軟件下載后不使用計(jì)算機(jī),, 通過(guò)按鈕、鍵盤(pán)就能將程序輸入到RAM 中,, 然后運(yùn)行,, 顯示出結(jié)果。

  2. 2 CPU模塊

  2. 2. 1 內(nèi)部結(jié)構(gòu)

  CPU 模塊的內(nèi)部結(jié)構(gòu)如圖1所示,。微型計(jì)算機(jī)由下面幾個(gè)部分組成: 8位通用寄存器H,、L, 16位程序計(jì)數(shù)器( PC ) ,, 16位堆棧指示器( SP),, 一個(gè)加1 /減1 地址鎖存器( ADD /ADR ), 8 位NL 寄存器( NL) ,, 8位中斷時(shí)間寄存器( T IMER ) ; 算術(shù)邏輯單元(ALU ),, 累加器(A ), 標(biāo)志寄存器( FR ),, 數(shù)據(jù)選擇器( SEL) ; 指令寄存器( IR) ,, 控制器( CON ) , 4選1多路選擇器(MUX) ,, 存儲(chǔ)地址寄存器(MAR ) ,, 8 位數(shù)據(jù)寄存器(MDR) ; 輸入數(shù)據(jù)寄存器( INDT ), 輸出數(shù)據(jù)寄存器( OUTDT )等部分組成,。其中標(biāo)志寄存器有4位,, 分別是: 進(jìn)位位( Cy),、零位( Z)、符號(hào)位( S),、奇偶位( P) ,, 微機(jī)通過(guò)檢測(cè)這些標(biāo)志位的1位或多位來(lái)判斷程序是否需要轉(zhuǎn)移。

  微型計(jì)算機(jī)CPU 結(jié)構(gòu)圖

  圖1 微型計(jì)算機(jī)CPU 結(jié)構(gòu)圖

  圖中字母L為數(shù)據(jù)載入控制信號(hào),, E 為三態(tài)輸出選通信號(hào),, clk為時(shí)鐘信號(hào), c lr為清零信號(hào),, W 為數(shù)據(jù)載入PC信號(hào),, Cpc為控制PC 加1信號(hào), S3- S0為控制ALU 進(jìn)行加減,、邏輯運(yùn)算或移位運(yùn)算的選擇信號(hào),, Iadr、Dadr為加1 /減1地址鎖存器加1減1控制信號(hào),, Isp,、DSP為堆棧指示器的加1減1 控制信號(hào), E ram,、W ram 為讀寫(xiě)RAM 控制信號(hào),。另外, 累加器(A ) ,, 標(biāo)志寄存器( FR )增加了專(zhuān)用的清零信號(hào),。

  所有的控制、時(shí)鐘及清零信號(hào)由控制器( CON)模塊給出,, 而CON 模塊由外部時(shí)鐘clkin,、清零信號(hào)rst及使能信號(hào)enable 控制。存儲(chǔ)地址寄存器(MAR )用來(lái)給RAM輸送地址,, 從RAM 讀指令和數(shù)據(jù),, 也可以給RAM寫(xiě)數(shù)據(jù)。Altera公司的EPF10K20TC144 - 4 芯片中有6個(gè)嵌入式陳列塊,, 其RAM 總位數(shù)為12288,。這里RAM 可配置為1024 * 8( 1024個(gè)地址, 8位數(shù)據(jù)) ,,直接調(diào)用參數(shù)可設(shè)置模塊庫(kù)中LPM _RAM _ IO 的LPM_FILE 文件,, 用文本編輯器編輯m if文件來(lái)初始化數(shù)據(jù)。如果不用FPGA 的內(nèi)部RAM,, 可外接64K的8位RAM,, 即尋址空間為64K。

  2. 2. 2 指令系統(tǒng)

  內(nèi)部工作原理和指令系統(tǒng)緊密相聯(lián),。本微機(jī)共有54條指令,, 可分為8類(lèi),, 即數(shù)據(jù)傳送指令、算術(shù)與邏輯運(yùn)算指令,、移位指令,、增量與減量指令、堆棧操作及中斷指令,、轉(zhuǎn)移指令,、子程序調(diào)用及返回指令、其它指令等,。指令系統(tǒng)與8080 /8085的指令系統(tǒng)表基本一致,, 標(biāo)志位的變化(無(wú)輔助進(jìn)位位) 與其相同, 可參見(jiàn)文獻(xiàn),。

  由于資源所限,, 沒(méi)有使用8085A 所有的寄存器及某些功能, 如B,、C,、D、E 寄存器等,, 但是這并不妨礙本微機(jī)能夠?qū)崿F(xiàn)其絕大多數(shù)功能,。從時(shí)鐘周期數(shù)(狀態(tài)數(shù))來(lái)說(shuō), 比8085A 更少,, 也就是說(shuō)速度更快。

  數(shù)據(jù)傳送指令有14條(一個(gè)n表示一個(gè)8位二進(jìn)制數(shù)據(jù)): 3個(gè)狀態(tài)數(shù)的movah (將H 的內(nèi)容存入A ),、movha,、mov la(將A 的內(nèi)容存入L)、mova;l 4狀態(tài)的mvian(將數(shù)據(jù)n存入A),、mv ihn,、mv iln、mvitn(將數(shù)據(jù)n 存入t ime寄存器,, 此指令為新增) ; 5 狀態(tài)的movma(將A 的內(nèi)容裝入HL所指的地址),、movam; 4狀態(tài)數(shù)的sphl(將HL寄存器的內(nèi)容裝入SP); 6狀態(tài)的inn( n所指地址的內(nèi)容給A )、outn; 4狀態(tài)的cd _out(A內(nèi)容給PC+ 1,, 停機(jī),, 此指令為新增)等。

  算術(shù)與邏輯運(yùn)算指令有13 條: 3 狀態(tài)的cmc( Cy符號(hào)取反),、stc( Cy置1) ,、cma(寄存器A 內(nèi)容取反); 4狀態(tài)的addh(將A 與H 相加后給A )、adin(將A 與n相加后給A),、subh,、su in,、cmph(將A 與H相比較(只影響符號(hào)) )、ADCh(將A 與H 及符號(hào)Cy相加后給A ),、sbbh,、anah(將A 與H 寄存器的內(nèi)容相與后給A )、orah,、xrah(將A 與H 異或后給A )等,。

    移位指令有4條, 同8085A,。增量與減量指令有4條,, 只針對(duì)H、L寄存器,。堆棧操作及中斷指令有8條: 7 狀態(tài)的pushh( HL 壓入堆棧),、pushp( AF壓入堆棧); 6狀態(tài)的poph、popp; 8狀態(tài)的rsta(重新啟動(dòng)); 3狀態(tài)的etim e( T 寄存器使能,, 此指令為新增),、eint(中斷使能)、d int等,。轉(zhuǎn)移指令有5條: 7狀態(tài)的jmpn(無(wú)條件轉(zhuǎn)移至程序nn,, 低位在前); 不跳轉(zhuǎn)時(shí)5狀態(tài), 跳轉(zhuǎn)時(shí)7狀態(tài)的jnn( Z= 1時(shí)轉(zhuǎn)移至程序nn),、jcn,、jmn、jpen等,。子程序調(diào)用及返回指令有2條: 11狀態(tài)的calln (保留當(dāng)前PC,, 轉(zhuǎn)移至程序nn, 低位在前),、7狀態(tài)的ret(返回),。其它指令有4條: 3狀態(tài)的nop、c lRF(標(biāo)志寄存器清零,, 此指令為新增),、clrA (A 清零, 此指令為新增),、hlt等,。

  狀態(tài)數(shù)的計(jì)算, 若本次指令的前面一指令為3狀態(tài)數(shù)時(shí),, 本指令將會(huì)減少1 狀態(tài),。如: movha,adin; 若第1指令movha前沒(méi)有其它3 狀態(tài)指令時(shí),它是3個(gè)狀態(tài),, 而adin會(huì)減少1狀態(tài),, 由原來(lái)的4狀態(tài)變?yōu)?狀態(tài)。再如: mov la,, movha; 則后一狀態(tài)由3狀態(tài)變成2狀態(tài),。其余類(lèi)似(但不包括rsta)。

  2. 2. 3 工作原理

  由圖1可知,, 不同的子模塊一共有20個(gè),, 每個(gè)模塊用VHDL程序來(lái)實(shí)現(xiàn), 最后用元件例化語(yǔ)句構(gòu)成總模塊,。下面以設(shè)計(jì)算術(shù)邏輯部件模塊c_alu及控制模塊c_con為例簡(jiǎn)要介紹一下思路,。

  ( 1)算術(shù)邏輯部件c_alu。

  算術(shù)邏輯部件c_a lu非常占用FPGA的邏輯單元log ic cells,, 需要盡量?jī)?yōu)化,。S3- S0為控制ALU 進(jìn)行加減、邏輯或移位運(yùn)算的選擇信號(hào),, 一共可得到16種運(yùn)算,, 這里用了13種: 6種算術(shù)、3種邏輯運(yùn)算和4種移位指令,。如加法,、減法、加1,、減1,、帶符號(hào)位加法、帶符號(hào)位減法; A 或B,、A 與B,、A 異或B; A 左移、A右移,、A 帶Cy 左移、A 帶Cy右移等,。另外,, ALU 的運(yùn)算直接影響到符號(hào)位的變化, 運(yùn)算結(jié)果存入標(biāo)志寄存器( FR),。有關(guān)alu的運(yùn)算多為4個(gè)狀態(tài),。

  ( 2)控制模塊c_con。

  占用FPGA 的邏輯單元log ic ce lls最多的是控制模塊c_con,。在參考文獻(xiàn)[ 3] 中的思路不再適合于稍大型的CPU 設(shè)計(jì),, 但它是理解如何控制CPU 信號(hào)的一個(gè)起點(diǎn)。對(duì)于一條指令應(yīng)該細(xì)化到每一個(gè)步驟及每一位,, 而不再是以一個(gè)控制字的方式去實(shí)現(xiàn),。以指令movah為例,, 首先把PC 值送入MAR 寄存器, 此為狀態(tài)s0,, 這時(shí)起作用的是Lmar; 然后在狀態(tài)s1時(shí),, PC值加1, 將存儲(chǔ)器單元中的內(nèi)容讀入到IR,, 這時(shí)Cpc,、E ram、Lir起作用,, Lmar不再起作用,, 需要置0; 接著在狀態(tài)s2時(shí), 對(duì)IR 寄存器中的指令進(jìn)行譯碼,, 所有的操作指令都是在此狀態(tài)譯碼(不包括rsta),。對(duì)于3狀態(tài)指令, 不保存指令,, 直接執(zhí)行,, 然后跳轉(zhuǎn)到狀態(tài)s1。因此對(duì)于下一條指令來(lái)說(shuō),, 其狀態(tài)數(shù)減1,。

  指令中狀態(tài)數(shù)最多的是子程序調(diào)用ca lln指令。

  C alln指令要保存PC 值到SP- 1及SP- 2中,, 然后跳轉(zhuǎn)到子程序,。考慮到返回指令ret執(zhí)行后,, PC 要重新在原位置執(zhí)行,, 那么存入SP中的PC 值應(yīng)該是在得到其指令后加3。對(duì)PC 進(jìn)行單獨(dú)加3是一種思路,, 但需要另外耗費(fèi)資源,, 并且增加狀態(tài)。這里采用了先把ca lln后的nn存入16位的加1 /減1 地址鎖存器,, 然后保存PC 到SP,, 再將nn 賦值給PC, 跳轉(zhuǎn)到子程序的方法,。返回指令ret不僅可以用作子程序調(diào)用后的返回,, 還可用于中斷的返回。

  2. 3.. FPGA 實(shí)現(xiàn)及編程思路

  由于使用內(nèi)部RAM,, 其地址空間為0000 -03FFH,。通常在00H 中放入28 (即jmpn, 跳轉(zhuǎn)指令) , 將程序跳轉(zhuǎn)到從40H 開(kāi)始,。把03- 0EH 作為放常用變量的空間,, 用inn及outn指令來(lái)調(diào)用, 以解決寄存器不足的缺陷,。這也是一種編程思路,, 可參見(jiàn)文獻(xiàn)[ 4] 。0FH,、1FH,、2FH 分別為外部中斷0( int0) , 外部中斷1( int1),, 定時(shí)器中斷( time) 的起始位置,。Int0優(yōu)先級(jí)最高, int1次之,, time最低,。中斷信號(hào)高電平有效。中斷功能的實(shí)現(xiàn)是為了學(xué)習(xí)其工作原理,, 只做了一個(gè)定時(shí)器中斷,。計(jì)時(shí)為減1方式, 當(dāng)計(jì)時(shí)為0時(shí),, 發(fā)出中斷信號(hào),。T ime中斷的使用方法: 首先關(guān)中斷( dint), 給T賦值(mv itn) ,, 再開(kāi)中斷( e int),, T寄存器使能( et ime)。此后,, T 寄存器正常工作,。若要再次使用, 首先給T 賦值,, 然后T寄存器使能,。

  初始時(shí)的PC 為0000H, SP為03FFH,。SP的更改可通過(guò)指令sph l來(lái)執(zhí)行,。針對(duì)實(shí)驗(yàn)箱, 將8000-0FFFFH 作為輸出口地址,, 4000 - 7FFFH 作為輸入口地址。而實(shí)際實(shí)驗(yàn)箱上只定義了1個(gè)8位輸入,, 1個(gè)8位輸出,。IO 口的操作可通過(guò)movam 及movma指令去實(shí)現(xiàn)。

  由于鍵盤(pán)輸入時(shí), 要進(jìn)行去抖動(dòng)處理,, 使用了兩種不同的時(shí)鐘頻率,。鍵盤(pán)處理采用1KH z的頻率,而CPU 的工作時(shí)鐘可選擇實(shí)驗(yàn)箱上的不同頻率,, 從1H z到10MH z皆可,, 甚至可以外接其它更高頻率。

  如果采用1H z的clk in 頻率,, 可以清楚地看到CPU工作的每一過(guò)程,。

  將本微機(jī)下載到實(shí)驗(yàn)箱上, 已成功實(shí)現(xiàn)了乘法(用減1或右移的方法),, 調(diào)用子程序,, IO 口的使用,中斷的使用等多項(xiàng)實(shí)驗(yàn),, 驗(yàn)證了CPU 設(shè)計(jì)的正確性,。

  3 結(jié)束語(yǔ)

  QuartusII對(duì)微機(jī)進(jìn)行編譯, 其邏輯單元LE 用到1151,, 占100% ,。用FPGA 來(lái)實(shí)現(xiàn)CPU 的功能, 研究其工作原理,, 然后用Synplify pro軟件對(duì)其進(jìn)行門(mén)級(jí)研究,, 對(duì)CPU 的面紗將不再感到神秘, 有利于做成專(zhuān)用集成電路ASIC,, 控制其規(guī)模,, 節(jié)約芯片成本與面積。同時(shí),, 也會(huì)增加對(duì)FPGA 的學(xué)習(xí)興趣和使用技巧,, 開(kāi)發(fā)出更多新的產(chǎn)品。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。