基于FPGA的8085A CPU結構分析與實(shí)現
A ltera公司的EPF10K20TC144 - 4 芯片中有6個(gè)嵌入式陳列塊, 其RAM 總位數為12288。這里RAM 可配置為1024 * 8( 1024個(gè)地址, 8位數據) ,直接調用參數可設置模塊庫中LPM _RAM _ IO 的LPM_FILE 文件, 用文本編輯器編輯m if文件來(lái)初始化數據。如果不用FPGA 的內部RAM, 可外接64K的8位RAM, 即尋址空間為64K。
2. 2. 2 指令系統
內部工作原理和指令系統緊密相聯(lián)。本微機共有54條指令, 可分為8類(lèi), 即數據傳送指令、算術(shù)與邏輯運算指令、移位指令、增量與減量指令、堆棧操作及中斷指令、轉移指令、子程序調用及返回指令、其它指令等。指令系統與8080 /8085的指令系統表基本一致, 標志位的變化(無(wú)輔助進(jìn)位位) 與其相同, 可參見(jiàn)文獻。
由于資源所限, 沒(méi)有使用8085A 所有的寄存器及某些功能, 如B、C、D、E 寄存器等, 但是這并不妨礙本微機能夠實(shí)現其絕大多數功能。從時(shí)鐘周期數(狀態(tài)數)來(lái)說(shuō), 比8085A 更少, 也就是說(shuō)速度更快。
數據傳送指令有14條(一個(gè)n表示一個(gè)8位二進(jìn)制數據): 3個(gè)狀態(tài)數的movah (將H 的內容存入A )、movha、mov la(將A 的內容存入L)、mova;l 4狀態(tài)的mvian(將數據n存入A)、mv ihn、mv iln、mvitn(將數據n 存入t ime寄存器, 此指令為新增) ; 5 狀態(tài)的movma(將A 的內容裝入HL所指的地址)、movam; 4狀態(tài)數的sphl(將HL寄存器的內容裝入SP); 6狀態(tài)的inn( n所指地址的內容給A )、outn; 4狀態(tài)的cd _out(A內容給PC+ 1, 停機, 此指令為新增)等。
算術(shù)與邏輯運算指令有13 條: 3 狀態(tài)的cmc( Cy符號取反)、stc( Cy置1) 、cma(寄存器A 內容取反); 4狀態(tài)的addh(將A 與H 相加后給A )、adin(將A 與n相加后給A)、subh、su in、cmph(將A 與H相比較(只影響符號) )、adch(將A 與H 及符號Cy相加后給A )、sbbh、anah(將A 與H 寄存器的內容相與后給A )、orah、xrah(將A 與H 異或后給A )等。
移位指令有4條, 同8085A。增量與減量指令有4條, 只針對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等。轉移指令有5條: 7狀態(tài)的jmpn(無(wú)條件轉移至程序nn, 低位在前); 不跳轉時(shí)5狀態(tài), 跳轉時(shí)7狀態(tài)的jnn( Z= 1時(shí)轉移至程序nn)、jcn、jmn、jpen等。子程序調用及返回指令有2條: 11狀態(tài)的calln (保留當前PC, 轉移至程序nn, 低位在前)、7狀態(tài)的ret(返回)。其它指令有4條: 3狀態(tài)的nop、c lrF(標志寄存器清零, 此指令為新增)、clrA (A 清零, 此指令為新增)、hlt等。
狀態(tài)數的計算, 若本次指令的前面一指令為3狀態(tài)數時(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í)現, 最后用元件例化語(yǔ)句構成總模塊。下面以設計算術(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)行加減、邏輯或移位運算的選擇信號, 一共可得到16種運算, 這里用了13種: 6種算術(shù)、3種邏輯運算和4種移位指令。如加法、減法、加1、減1、帶符號位加法、帶符號位減法; A 或B、A 與B、A 異或B; A 左移、A右移、A 帶Cy 左移、A 帶Cy右移等。另外, ALU 的運算直接影響到符號位的變化, 運算結果存入標志寄存器( FR)。有關(guān)alu的運算多為4個(gè)狀態(tài)。
( 2)控制模塊c_con。
占用FPGA 的邏輯單元log ic ce lls最多的是控制模塊c_con。在參考文獻[ 3] 中的思路不再適合于稍大型的CPU 設計, 但它是理解如何控制CPU 信號的一個(gè)起點(diǎn)。對于一條指令應該細化到每一個(gè)步驟及每一位, 而不再是以一個(gè)控制字的方式去實(shí)現。以指令movah為例, 首先把PC 值送入MAR 寄存器, 此為狀態(tài)s0, 這時(shí)起作用的是Lmar; 然后在狀態(tài)s1時(shí), PC值加1, 將存儲器單元中的內容讀入到IR, 這時(shí)Cpc、E ram、Lir起作用, Lmar不再起作用, 需要置0; 接著(zhù)在狀態(tài)s2時(shí), 對IR 寄存器中的指令進(jìn)行譯碼, 所有的操作指令都是在此狀態(tài)譯碼(不包括rsta)。對于3狀態(tài)指令, 不保存指令, 直接執行, 然后跳轉到狀態(tài)s1。因此對于下一條指令來(lái)說(shuō), 其狀態(tài)數減1。
指令中狀態(tài)數最多的是子程序調用ca lln指令。
C alln指令要保存PC 值到SP- 1及SP- 2中, 然后跳轉到子程序??紤]到返回指令ret執行后, PC 要重新在原位置執行, 那么存入SP中的PC 值應該是在得到其指令后加3。對PC 進(jìn)行單獨加3是一種思路, 但需要另外耗費資源, 并且增加狀態(tài)。這里采用了先把ca lln后的nn存入16位的加1 /減1 地址鎖存器, 然后保存PC 到SP, 再將nn 賦值給PC, 跳轉到子程序的方法。返回指令ret不僅可以用作子程序調用后的返回, 還可用于中斷的返回。
2. 3.. FPGA 實(shí)現及編程思路
由于使用內部RAM, 其地址空間為0000 -03FFH。通常在00H 中放入28 (即jmpn, 跳轉指令) , 將程序跳轉到從40H 開(kāi)始。把03- 0EH 作為放常用變量的空間, 用inn及outn指令來(lái)調用, 以解決寄存器不足的缺陷。這也是一種編程思路, 可參見(jiàn)文獻[ 4] 。0FH、1FH、2FH 分別為外部中斷0( int0) , 外部中斷1( int1), 定時(shí)器中斷( time) 的起始位置。Int0優(yōu)先級最高, int1次之, time最低。中斷信號高電平有效。中斷功能的實(shí)現是為了學(xué)習其工作原理, 只做了一個(gè)定時(shí)器中斷。計時(shí)為減1方式, 當計時(shí)為0時(shí), 發(fā)出中斷信號。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)執行。針對實(shí)驗箱, 將8000-0FFFFH 作為輸出口地址, 4000 - 7FFFH 作為輸入口地址。而實(shí)際實(shí)驗箱上只定義了1個(gè)8位輸入, 1個(gè)8位輸出。IO 口的操作可通過(guò)movam 及movma指令去實(shí)現。
由于鍵盤(pán)輸入時(shí), 要進(jìn)行去抖動(dòng)處理, 使用了兩種不同的時(shí)鐘頻率。鍵盤(pán)處理采用1KH z的頻率,而CPU 的工作時(shí)鐘可選擇實(shí)驗箱上的不同頻率, 從1H z到10MH z皆可, 甚至可以外接其它更高頻率。
如果采用1H z的clk in 頻率, 可以清楚地看到CPU工作的每一過(guò)程。
將本微機下載到實(shí)驗箱上, 已成功實(shí)現了乘法(用減1或右移的方法), 調用子程序, IO 口的使用,中斷的使用等多項實(shí)驗, 驗證了CPU 設計的正確性。
3 結束語(yǔ)
QuartusII對微機進(jìn)行編譯, 其邏輯單元LE 用到1151, 占100% 。用FPGA 來(lái)實(shí)現CPU 的功能, 研究其工作原理, 然后用Synp lify pro軟件對其進(jìn)行門(mén)級研究, 對CPU 的面紗將不再感到神秘, 有利于做成專(zhuān)用集成電路ASIC, 控制其規模, 節約芯片成本與面積。同時(shí), 也會(huì )增加對FPGA 的學(xué)習興趣和使用技巧, 開(kāi)發(fā)出更多新的產(chǎn)品。本文引用地址:http://dyxdggzs.com/article/191389.htm
評論