MCS51單片機CPU核的設計與仿真_第1頁
MCS51單片機CPU核的設計與仿真_第2頁
MCS51單片機CPU核的設計與仿真_第3頁
MCS51單片機CPU核的設計與仿真_第4頁
MCS51單片機CPU核的設計與仿真_第5頁
已閱讀5頁,還剩31頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、浙 江 理 工 大 學 畢業論文(設計)誠信聲明 我謹在此保證:本人所寫的畢業論文(設計),凡引用他人的研 究成果均已在參考文獻或注釋中列出。論文(設計)主體均由本人獨 立完成,沒有抄襲、剽竊他人已經發表或未發表的研究成果行為。 如出現以上違反知識產權的情況,本人愿意承擔相應的責任。 聲明人(簽名): 年 月 日 摘 要 MCS-51 單片機是在一塊芯片中集成了 CPU、RAM、ROM、定時器/計數器和多功 能 I/O 等一臺計算機所需要的基本功能部件,是業界廣泛使用的單片機系列。基于 FPGA 平臺的 8051 單片機 CPU 核與傳統 MCS-51 單片機完全兼容,但速度約為傳統單 片機的

2、 20 倍,且在 FPGA 內可輕松的集成許多高性能系統功能,這將使系統的設計 效率和系統性能獲得極大的提高,這也是現代電子設計技術的發展方向。本課題用 硬件描述語言設計 MCS-51 CPU 核,從 CPU 的總體結構到局部功能的實現采用了自頂 向下的設計方法和模塊化的設計思想,利用 FPGA,設計實現了八位 CPU 核。本設計 的 CPU 兼容 51 指令,在時鐘頻率和指令的執行效率指標上均優于傳統的 MCS- 51CPU。本設計以硬件描述語言代碼形式存在,可與任何綜合庫、工藝庫以及 FPGA 結合開發出用戶需要的固核和硬核,可讀性好,易于擴展使用,易于升級,比較有 實用價值。本設計通過

3、FPGA 驗證。 關鍵字:Verilog HDL; CPU; FPGA ABSTRACT MCS-51 MCU is a single chip integrated CPU, RAM, ROM, timer / counters and multi-function I / O such as a computers basic features required, is the industrys widely used microcontroller series. 8051 FPGA-based CPU platform with the traditional core is ful

4、ly compatible with MCS-51 microcontroller, but the speed is about 20 times that of traditional single chip, and the FPGA can be easily integrated within a number of high- performance system functions, which will enable the design of the system efficiency and system Be greatly improved performance, w

5、hich is the development of modern electronic design direction. The issue with the hardware description language design MCS-51 CPU core, from the CPU to the local function of the overall structure of the realization of using top-down design and modular design, the use of FPGA, design and implementati

6、on of the eight CPU cores. The CPU model in this paper can execute the MCS-51MCU assemble language instruction sets, and is better than the traditional MCS-51 MCU on both clock frequency and the execution efficiency of the instruction. This design was existed in a form of HDL source code,which can b

7、e reused in many SoC designsThis model can be read easily, updated easily and extended freely, so it has a practical value in SoC designThis design was implemented on FPGA. Keywords:Keywords: Verilog HDL ; CPU ; FPGA 目目 錄錄 摘 要 Abstract 第 1 章 緒論.1 1.1 選題背景1 1.2 國內外發展及現狀1 1.3 課題的主要內容2 第 2 章 CPU 的結構及設計

8、.4 2.1 CPU 的簡介4 2.2 CPU 的結構4 2.2.1 時鐘發生器.4 2.2.2 指令寄存器.5 2.2.3 累加器.6 2.2.4 算術運算器.6 2.2.5 數據控制器.7 2.2.6 地址多路器8 2.2.7 程序計數器8 2.2.8 狀態控制器.9 2.2.9 外圍模塊.11 第 3 章 CPU 的功能.13 3.1 CPU 的操作.13 3.1.1 系統的復位和啟動操作.13 3.1.2 總線讀操作.13 3.1.3 總線寫操作13 3.2 CPU 的尋址方式和指令集 14 3.3 匯編14 第 4 章 CPU 的仿真和驗證.16 4.1 CPU 模塊的仿真 16 4

9、.2 CPU 模塊的綜合 18 4.3 CPU 模塊的優化和優局布線 25 第 5 章 總結和展望.27 參考文獻.28 致 謝29 附 錄30 第 1 章 緒論 1.1 選題背景 單片機自從被推出后開始迅速發展,應用領域也在不斷擴大,現己成為微型計 算機的重要分支,單片機處理數據的能力在不斷提高,速度也越來越快,長期以來被 廣泛的應用在各領域。 同時隨著集成電路和計算機技術的飛速發展,電子設計自動 化(EDA)以計算機的硬件和軟件為基本的工作平臺,已經發展成為可以代 替設計者 完成電子系統設計的重要工具。其中 FPGA 是一種新興的可編程邏輯器件(PLD),與其 它可編程邏輯器件(PLD)相

10、比,具有更高的密度、更快的工作速度和更大的編程靈活 性。FPGA 是一種新興的可編程邏輯器件,可以取代現有的全部微機接口芯片,實現 微機系統中的存儲器、地址譯碼等多種功能,具有更高的密度、更快的工作速度和 更大的編程靈活性,被廣泛應用于各種電子類產品中。單片機具有性能價格比高、 功能靈活、易于人機對話、良好的數據處理能力特點;FPGA 則具有高速、高可靠以 及開發便捷、規范等優點。以此兩類器件相結合的電路結構會有很多的發展空間。 基于 FPGA 的高密度、高速度、現場可編程的能力和單片機強大的數據處理功能 設計的 CPU 采用了與傳統單片機不同的實現架構,利用 FPGA 的邊沿觸發的特點,單

11、周期單指令,因而無論在時鐘頻率還是在匯編指令的執行效率上都明顯優于傳統的 MCS-51 單片機。這個設計的擴展接口控制器部分很好地擴充了傳統單片機的功能, 而且由于具有 較好的可移植性,可以只利用擴展接口控制器部分實現對現有的單片 機進行升級,節約更換高性能 CPU 而帶來的產品提升,達到適應新的要求。目前以 硬件描述語言所完成的電路設計,可以經過簡單的綜合與布局,快速的燒錄至 FPGA 上進行測試,是現代 IC 設計驗證的技術主流。 1.2 國內外發展及現狀 微控制器簡稱 MCU,又稱單片機,是指將計算機的 CPU、RAM、ROM、定時計數 器和多種 IO 接口集 成在一塊芯片上,形成芯片級

12、的計算機。單片機的出現的初 衷是面向工業控制,目前它己經廣泛應用于各個領域及各個行業。 1976 年 Intel 公司推出低檔 8 位單片機 (MCS-48 系列)。在 1980 年 Intel 公司 推出了 比 MCS-48 系列性能更為優越的 8 位單片機 8051(MCS-51 系列)。1983 年 Intel 公司又推 出了 CMOS 型 80C51、16 位單片機 5096(MCS-96 系列)。眾多公司先 后推出了 32 位單片機、 64 位單片機。盡管單片機的設計技術在不斷的發展,處理 能力越來越強,從 4 位到 8 位,再到 16 位、32 位,甚至出現了 64 位,但有一個現

13、 象卻十分有趣,8 位單片機在經歷了 三十多年之后,依然顯示出強大而旺盛的生命 力,其市場占有率一直高居榜首。與從 8 位機迅速向 16 位、32 位、64 位過渡的通 用計算機相比,8 位微控制器從 20 世紀 70 年代初期誕生至今,雖歷經從單片微型 計算機到微控制器、單片機和 SoC 的變遷, 8 位機始終是嵌入式低端應用的主要機 型,而且在未來相當長的時間里,仍會保持這個勢頭。這是因為嵌入式系統和通用 計算機系統有完全不同的應用特性,從而走向完全不同的技術發展道路。在 8 位單 片機能基本滿足其響應速度要求后,數據寬度不是技術發展的主要矛盾。因此 8 位 微控制器會穩定下來,其技術發展

14、方向轉為最大限度地滿足對象的采集、控制、可 靠性和低功耗等品質要求。鑒于嵌入式低端應用對象的有限響應要求,嵌入式系統 低端應用的巨大市場及 8 位機具有的速度潛力,可以預計在未來相當長的時間內, 8 位機仍然是嵌入式應用中的主流機型。 現今市場上流行的典型的 8 位微控制器,與傳統的 8 位單片機相比,大多數 是由 VerilogHDL 實現的軟處理器 IP Core,可以在各種 FPGA 上實現,設計靈活方 便而且易于進行功能擴展。因此,這些單片機將在基于可編程邏輯的應用領域中發 揮積極的作用。各大單片機廠家都推出了自己的 8 位單片機內核,如飛思卡爾的 RS08 內核、NEC 的 78K0

15、、Actel 的 Corc8051、Mkcrochip 的 PIC 內核等。因此研究 8 位單片機內核具有廣泛的現實意義。由于其具有較高的處理性能和較少的資源占 用,故具有更加廣泛的應用前景。 13 課題的工作內容 本次畢業設計主要是對 MCS-51 單片機 進行研究。用硬件描述語言設計 MCS- 51 CPU 核,對于 CPU 核的結構進行深入了解和認知,討論并設計 CPU 的運算邏輯單 元、取址模塊、譯碼執行模塊,確定正確的方案。對于硬件描述語言和相關仿真軟 件進行討論確定,并調試代碼,仿真通過。以 MCS-51 系列單片機的指令集為藍本, 利用原理框圖和硬件描述語言的輸入方式完成實現了處

16、理器的各種功能。在 ASIC 或者 FPGA 上進行測試,完成所需要的邏輯功能。課題工作內容如下,共分為以下 幾步: (1)確定 CPU 的總體結構,劃分與定義各個層次模塊的結構和功能。根據設計 的需要設計 CPU 體系架構形式,并選取與 MCS-51 兼容的指令集作為設計的指令集。 (2)研究 MCS-51CPU 的硬件架構及所有指令的工作過程,深入理解工作 原理和 設計方法,完成各個層次模塊功能的劃分與定義。 (3)使用硬件描述語言對 CPU 核進行具體的描述,書寫代碼。 (4) 調試代碼,仿真通過。搭建測試平臺,對設計完成的 CPU 進行完備的功能 測試。 (5) 對通過功能測試的進行優

17、化、布局布線,進行硬件驗證。 第 2 章 CPU 的結構及設計 2.1 CPU 的簡介 CPU 是一個復雜的數字邏輯電路,包含八個基本部件: 1) 時鐘發生器 2) 指令寄存器 3) 累加器 4) 算術邏輯運算單元 5) 數據控制器 6) 狀態控制器 7) 程序計數器 8) 地址多路器 各部件的具體結構和邏輯關系在下面的小節里逐一進行介紹。 2.2 CPU 的結構 2.2.1 時鐘發生器 圖圖 2-12-1 時鐘發生器時鐘發生器 時鐘發生器 clkgen (如圖 2-1 所示)利用外來時鐘信號 clk 來生成一系列 時鐘信號 clk1、fetch、alu_clk 送往 CPU 的其他部件。其中

18、 fetch 是外來時鐘 clk 的八分頻信號。利用 fetch 的上升沿來觸發 CPU 控制器開始執行一條指令,同 時 fetch 信號還將控制地址多路器輸出指令地址和數據地址。clk1 信號用作指令寄 存器、累加器、狀態控制器的時鐘信號。alu_clk 則用于觸發算術邏輯運算單元。 時鐘發生器 clkgen 的波形見下圖 2-2 所示: 其 Verilog HDL 程序見下面的模塊: 2.2.2 指令寄存器 圖圖 2 2- -3 3 指指令令寄寄存存器器 指令寄存器如圖 2-3 所示,主要用于寄存指令。 指令寄存器的觸發時鐘是 clk1,在 clk1 的正沿觸發下,寄存器將數據總線送 來的

19、指令存入高 8 位或低 8 位寄存器中。但并不是每個 clk1 的上升沿都寄存數據總 線的數據,因為數據總線上有時傳輸指令,有時傳輸數據。什么時候寄存,什么時 候不寄存由 CPU 狀態控制器的 load_ir 信號控制。load_ir 信號通過 ena 口輸入到 DATA7:0 RST ENA CLK1 opc_iraddrs15:0 REGISTER INSTRUCTION REGISTER DATA7:0 LOAD_IR CLK1 RESET OPCODE2:0 IR_ADDR12:0 clk clk1 clk2 clk4 fetch alu_clk 圖圖 2 2- -2 2 時時鐘鐘發發

20、生生器器 c cl lk kg ge en n 的的波波形形 指令寄存器。復位后,指令寄存器被清為零。 每條指令為 2 個字節,即 16 位。高 3 位是操作碼,低 13 位是地址。 (CPU 的地 址總線為 13 位,尋址空間為 8K 字節。 )本設計的數據總線為 8 位,所以每條指令需 取兩次。先取高 8 位,后取低 8 位。而當前取的是高 8 位還是低 8 位,由變量 state 記錄。state 為零表示取的高 8 位,存入高 8 位寄存器,同時將變量 state 置 為 1。下次再寄存時,由于 state 為 1,可知取的是低 8 位,存入低 8 位寄存器中。 2.2.3 累加器 圖

21、圖 2-42-4 累加器累加器 累加器如圖 2-4 所示,用于存放當前的結果,它也是雙目運算其中一個數據來 源。復位后,累加器的值是零。當累加器通過 ena 口收到來自 CPU 狀態控制器 load_acc 信號時,在 clk1 時鐘正跳沿時就收到來自于數據總線的數據。 2.2.4 算術運算器 DATA7:0 RST ENA CLK1 ACCUM7:0 ACCUMULATOR ACCUMULATOR ALU_OUT7:0 LOAD_ACC CLK1 RST ACCUM7:0 DATA7:0 ACCUM7:0 ALU_CLOCK OPCODE2:0 ZERO ALU_OUT7:0 ALU DAT

22、A7:0 ACCUM7:0 ZERO ALU_OUT7:0 ALU_CLOCKOPCODE2:0 圖圖 2-52-5 算術運算器算術運算器 算術邏輯運算單元(如圖 2-5 所示) 根據輸入的 8 種不同操作碼分別實現相 應的加、與、異或、跳轉等 8 種基本操作運算。利用這幾種基本運算可以實現很多 種其它運算以及邏輯判斷等操作。 2.2.5 數據控制器 圖圖 2-62-6 數據控制器數據控制器 數據控制器如圖 2-6,它的作用是控制累加器數據輸出,由于數據總線是各種 操作時傳送數據的公共通道,不同的情況下傳送不同的內容。有時要傳輸指令,有 時要傳送 RAM 區或接口的數據。累加器的數據只有在需要

23、往 RAM 區或端口寫時才允 許輸出,否則應呈現高阻態,以允許其它部件使用數據總線。 所以任何部件往總線 上輸出數據時,都需要一控制信號。而此控制信號的啟、停,則由 CPU 狀態控制器 輸出的各信號控制決定。數據控制器何時輸出累加器的數據則由狀態控制器輸出的 控制信號 datactl_ena 決定。 2.2.6 地址多路器 DATACTL IN7:0 DATA_ENA DATA7:0 ALU_OUT7:0 DATACTL_ENA DATA7:0 ADDR PC_ADDR12 : 0 IR_ADDR12 : 0 FETCH ADDR12 : 0 PC_ADDR12 : 0 IR_ADDR12 :

24、 0 FETCH ADDR12 : 0 圖圖 2-72-7 地址多路器地址多路器 地址多路器如圖 2-7,它用于選擇輸出的地址是 PC(程序計數)地址還是數據/ 端口地址。每個指令周期的前 4 個時鐘周期用于從 ROM 中讀取指令,輸出的應是 PC 地址。后 4 個時鐘周期用于對 RAM 或端口的讀寫,該地址由指令中給出。地址的選 擇輸出信號由時鐘信號的 8 分頻信號 fetch 提供。 2.2.7 程序計數器 COUNTER IR_ADDR12 : 0 LOAD CLOCK RST PC_ADDR12 : 0 PC_ADDR12 : 0 IR_ADDR12 : 0 LOAD_PC INC_P

25、C RESET 圖圖 2 2- -8 8 程程序序計計數數器器 程序計數器如圖 2-8,它用于提供指令地址。以便讀取指令,指令按地址順 序存放在存儲器中。有兩種途徑可形成指令地址:其一是順序執行的情況,其二 是遇到要改變順序執行程序的情況,例如執行 JMP 指令后,需要形成新的指令地 址。下面就來詳細說明 PC 地址是如何建立的。 復位后,指令指針為零,即每次 CPU 重新啟動將從 ROM 的零地址開始讀取指令 并執行。每條指令執行完需 2 個時鐘,這時 pc_addr 已被增 2,指向下一條指令。 (因為每條指令占兩個字節。 )如果正執行的指令是跳轉語句,這時 CPU 狀態控制器 將會輸出

26、load_pc 信號,通過 load 口進入程序計數器。程序計數器(pc_addr)將 裝入目標地址(ir_addr) ,而不是增 2。 2.2.8 狀態控制器 圖圖 2 2- -9 9 狀狀態態控控制制器器 狀態控制器如圖 2-9,它由兩部分組成: 1)狀態機(上圖中的 MACHINE 部分) 2)狀態控制器(上圖中的MACHINECTL部分) 狀態機控制器接受復位信號 RST,當 RST 有效時通過信號 ena 使其為 0,輸入 到狀態機中停止狀態機的工作。 狀態控制器的 VerilogHDL 程序見下面模塊: /-/ module machinectl( ena, fetch, rst)

27、; output ena; input fetch, rst; reg ena; always (posedge fetch or posedge rst) begin if(rst) ena=0; else ena=1; end endmodule /-/ 狀態機是 CPU 的控制核心,用于產生一系列的控制信號,啟動或停止某些部件。 CLK1 OPCODE2:0 INT_FLAG ENAENA FETCH RST machinectl CLK1 ZERO ZERO FETCH RST OPCODE2:0 INT_FLAG INC_PC LOAD_ACC LOAD_PC RD WR LOAD_

28、IR HALT DATACTL_ENA INC_PC LOAD_ACC LOAD_PC MEM_RD MEM_WR LOAD_IR HALT DATACTL_ENA MACHINE CPU 何時進行讀指令讀寫 I/O 端口,RAM 區等操作,都是由狀態機來控制的。狀 態機的當前狀態,由變量 state 記錄,state 的值就是當前這個指令周期中已經 過的時鐘數(從零計起) 。 指令周期是由 8 個時鐘周期組成,每個時鐘周期都要完成固定的操作。 1)第0個時鐘,因為CPU狀態控制器的輸出: rd和load_ir為高電平,其余均為 低電平。指令寄存器寄存由 ROM送來的高8位指令代碼。 2)第1

29、個時鐘,與上一時鐘相比只是 inc_pc從0變為1故PC增1,ROM送來低8位 指令代碼,指令寄存器寄存該 8位代碼。 3)第2個時鐘,空操作。 4)第3個時鐘,PC增1,指向下一條指令。若操作符為 HLT,則輸出信號HLT為 高。如果操作符不為 HLT,除了PC增一外(指向下一條指令),其它各控制線輸出 為零。 5)第4個時鐘,若操作符為 AND、ADD、XOR或LDA,讀相應地址的數據;若為 JMP,將目的地址送給程序計數器;若為 STO,輸出累加器數據。 6)第5個時鐘,若操作符為 ANDD、ADD或XORR,算術運算器就進行相應的運 算;若為LDA,就把數據通過算術運算器送給累加器;若

30、為 SKZ,先判斷累加器的 值是否為0,如果為0,PC就增1,否則保持原值;若為 JMP,鎖存目的地址;若為 STO,將數據寫入地址處。 7)第6個時鐘,空操作。 8)第7個時鐘,若操作符為SKZ且累加器值為0,則PC值再增1,跳過一條指令,否 則PC無變化。 2.2.9 外圍模塊 為了對 CPU 進行測試,需要有存儲測試程序的 ROM 和裝載數據的 RAM、地址 譯碼器。 (1).地址譯碼器 module addr_decode( addr, rom_sel, ram_sel); output rom_sel, ram_sel; input 12:0 addr; reg rom_sel, r

31、am_sel; always ( addr ) begin casex(addr) 13b1_1xxx_xxxx_xxxx:rom_sel,ram_sel=2b01; 13b0_xxxx_xxxx_xxxx:rom_sel,ram_sel=2b10; 13b1_0 xxx_xxxx_xxxx:rom_sel,ram_sel=2b10; default:rom_sel,ram_sel=2b00; endcase end endmodule 地址譯碼器用于產生選通信號,選通 ROM 或 RAM。 FFFFH-1800H RAM 1800H-0000H ROM (2).RAM 和 ROM modul

32、e ram( data, addr, ena, read, write ); inout 7:0 data; input 9:0 addr; input ena; input read, write; reg 7:0 ram 10h3ff:0; assign data = ( read always (posedge write) begin ramaddr=data; end endmodule module rom( data, addr, read, ena ); output 7:0 data; input 12:0 addr; input read, ena; reg 7:0 mem

33、ory 13h1fff:0; wire 7:0 data; assign data= ( read endmodule ROM 用于裝載測試程序,可讀不可寫。 RAM 用于存放數據,可讀可寫。 第 3 章 CPU 的功能 3.1 CPU 操作 一個微機系統為了完成自身的功能,需要 CPU 執行許多操作。以下是 CPU 的 主要操作: (1)系統的復位和啟動操作; (2)總線讀操作; (3)總線寫操作。 3.1.1 系統的復位和啟動操作 CPU 的復位和啟動操作是通過 reset 引腳的信號觸發執行的。當 reset 信號 一進入高電平, CPU 就會結束現行操作,并且只要 reset 停留在高

34、電平狀態, CPU 就維持在復位狀態。在復位狀態, CPU 各內部寄存器都被設為初值,全部為 零。數據總線為高阻態,地址總線為 0000H,所有控制信號均為無效狀態。 reset 回到低電平后,接著到來的第一個 fetch 上升沿將啟動 RISC_CPU 開始工 作,從 ROM 的 000 處開始讀取指令并執行相應操作。 3.1.2 總線讀操作 每個指令周期的前 0-3 個時鐘周期用于讀指令,在狀態控制器一節中已詳細 講述,這里就不再重復。第 3.5 個周期處,存儲器或端口地址就輸出到地址總線 上,第 4-6 個時鐘周期,讀信號 rd 有效,數據送到數據總線上,以備累加器鎖 存,或參與算術、邏

35、輯運算。第 7 個時鐘周期,讀信號無效,第 7.5 個周期, 地址總線輸出 PC 地址,為下一個指令做好準備。 3.1.3 總線寫操作 每個指令周期的第 3.5 個時鐘周期處,寫的地址就建立了,第 4 個時鐘周期輸 出數據,第 5 個時鐘周期輸出寫信號。至第 6 個時鐘結束,數據無效,第 7.5 時鐘 地址輸出為 PC 地址,為下一個指令周期做好準備。 3.2 CPU 尋址方式和指令集 CPU 的指令格式如下圖 3-1 所示: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 指令 地址 圖圖 3 3- -1 1 C CP PU U 的的指指令令格格式式 它的指令系統

36、僅由 8 條指令組成。 1) HLT 停機操作。該操作將空一個指令周期,即 8個時鐘周期。 2) SKZ 為零跳過下一條語句。該操作先判斷當前 alu中的結果是否為零,若 是零就跳過下一條語句,否則繼續執行。 3) ADD 相加。該操作將累加器中的值與地址所指的存儲器或端口的數據相 加,結果仍送回累加器中。 4) AND 相與。該操作將累加器的值與地址所指的存儲器或端口的數據相與, 結果仍送回累加器中。 5) XOR 異或。該操作將累加器的值與指令中給出地址的數據異或,結果仍送 回累加器中。 6) LDA 讀數據。該操作將指令中給出地址的數據放入累加器。 7) STO 寫數據。該操作將累加器的

37、數據放入指令中給出的地址。 8) JMP 無條件跳轉語句。該操作將跳轉至指令給出的目的地址,繼續執行。 CPU 是 8 位微處理器,一律采用直接尋址方式,即數據總是放在存儲器中,尋址 單元的地址由指令直接給出。這是最簡單的尋址方式。 3.3 匯 編 匯編程序是為了調試軟核而開發的,手工編寫機器碼很容易出錯并且工作量很 大。在調試過程中修改指令集時,匯編程序也要作相應的修改。所以要求編譯器的 結構簡單性能可靠,在程序中必要的地方可以用堆疊代碼方法實現,不必考慮編程 技巧和匯編器效率問題。匯編程序用于測試 CPU 的基本指令集,如果 CPU 的各條指 令執行正確,停止在 HLT 指令處。如果程序在

38、其它地址暫停運行,則有一個指令出 錯。程序中,符號后的十六進制表示存儲器的地址,每行的/后表示注釋。下面是 本文設計的一小段程序代碼,編譯好的匯編機器代碼裝入虛擬 ROM,要參加運算的 數據裝入虛擬 RAM 就可以開始進行仿真。 機器碼 地址 匯編助記符 注釋 00 /地址聲明 101_11000 /00 BEGIN: LDA DATA_2 0000_0001 011_11000 /02 AND DATA_3 0000_0010 100_11000 /04 XOR DATA_2 0000_0001 001_00000 /06 SKZ 0000_0000 000_00000 /08 HLT /A

39、ND doest work 第 4 章 CPU 模塊的仿真和驗證 4.1 CPU 模塊的仿真 為了對所設計的 CPU 模型進行驗證,需要把 CPU 包裝在一個模塊下,這樣其內 部連線就隱蔽起來,從系統的角度看就顯得簡潔,還需要建立一些必要的外圍器件 模型,例如儲存程序用的 ROM 模型、儲存數據用的 RAM 和地址譯碼器等。這些模型 都可以用 VerilogHDL 描述,由于不需要綜合成具體的電路只要保證功能和接口信號 正確就能用于仿真。也就是說,用虛擬器件來代替真實的器件對所設計的 CPU 模型進 行驗證,檢查各條指令是否執行正確,與外圍電路的數據交換是否正常。可在下面 的仿真中來代替真實的

40、器件,用于驗證 CPU 模型是否能正確地運行裝入 ROM 和 RAM 的程序。在 CPU 的電路圖上加上這些外圍電路把有關的電路接通,見圖 4-1。最核 心的就是的左邊 RSC 模塊,對指令的譯碼和執行都是在 RSC 模塊內部完成的,而且 RSC 模塊還對其余三個模塊進行控制。 圖右上角是一塊有著 256 個字節的裝載數據 的 RAM,RSC 有四個信號對它實現了讀寫操作。第一個信號就是寫使能 write_ram; 第二個信號就是讀使能 read_ram;第三個信號是 RAM 的地址信號 _addr_ram;最后一個就是通用數據總線 data_ram。圖右下角是一 個存儲測試程序的 ROM 存

41、儲器,因其容量為 4k,有 12 根地址線,命名為 addr_rom;數據輸出為 data_rom . 另外在左下角有一個 Addr_decode 模塊,命名為 addr ,有 2 個數據線 ram_sel 和 rom_sel 分別 連接著 RAM 模塊和 ROM 模塊。同時也可以用 VerilogHDL 模塊調用的方法把這些外圍 電路的模塊連接上,這跟用真實的電路器件調試情況很類似。 圖圖 4-14-1 CPUCPU 總體模塊圖總體模塊圖 按照 CPU 總體模塊圖,可實現 CPU 模塊的仿真。步驟如下:首先按照表示各 模塊之間連線的電路圖編制測試文件,即定義 Verilog 的 wire 變

42、量作為連線,連接 各功能模塊之間的引腳,并將輸入信號引入,輸出信號引出。如若需要,可加入必 要的語句顯示提示信息。例如, cpu 的測試文件就是 cputop.v。其次,使用仿真 軟件進行仿真, ,以下介紹 Modelsim 的使用。在進入 Modelsim 的環境之后,在 file 項選擇 change direction 來確定編制的文件所在的目錄,然后在 design 項選 擇或創建一個 library,完成后即可開始編譯。在 design 項選 compile項,進入編 譯環境,選定要編譯的文件進行編譯。完成編譯后,還是在 compile項,選擇 load new design 項,選

43、中編譯后提示的 top module 的名字,然后開始仿真。在 view 項可選波形顯示,信號選擇,功能和操作簡單明了,下圖 4-2 這是 ModelSim SE6.0 進行波形仿真的結果。在 ISE 中可以運行 Timing Analyzer 生成詳細的時序 報告,本設計中 Minimum period: 12.032ns (Maximum Frequency: 83.112MHz), Minimum input arrival time before clock: 6.479ns,Maximum output required time after clock: 9.767ns。 圖圖 4

44、-24-2 仿真時序圖仿真時序圖 4.2 CPU 模塊的綜合 在對所設計的 CPU 模型進行驗證后,如沒有發現問題就可開始做下一步的工作 即綜合。綜合工作往往要分階段來進行,這樣便于發現問題。 所謂分階段就是指: 第一階段:先對構成 CPU 模型的各個子模塊,如狀態控制機模塊(包括 machine 模塊,machinectl 模塊) 、指令寄存器模塊( register 模塊) 、算術邏 輯運算單元模塊( alu 模塊)等,分別加以綜合以檢查其可綜合性,綜合后及時 進行后仿真,這樣便于及時發現錯誤,及時改進。 第二階段:把要綜合的模塊從仿真測試信號模塊和虛擬外圍電路模型(如 ROM 模塊、RA

45、M 模塊、顯示部件模塊等)中分離出來,組成一個獨立的模塊,其中 包括了所有需要綜合的模塊。然后給這個大模塊起一個名字,如本章中的例子, 我們要綜合的只是 CPU 并不包括虛擬外圍電路,可以給這一模塊起一個名字,例 如稱它為 RSC_CHIP 模塊。如用電路圖描述的話,我們還需給它的引腳加上標準的 引腳部件并加標記,見圖 4-3。 圖圖 4-34-3 RSCRSC 模塊模塊 第三階段:加載需要綜合的模塊到綜合器,本例所使用的綜合器是 Synplify, 選定的 FPGA 是 Altera FLEX10K,針對它的庫進行綜合。 也可以使用 QuartusII 或其他綜合工具進行綜合。綜合器綜合的結

46、果會產生一 系列的文件,其中有一個文件報告用了所使用的基本單元,各部件的時間參數以 及綜合的過程。見下面的報告 ,它就是這個 CPU 芯片所用的綜合報告,綜合所用 的庫為 Altera FLEX10K 系列的 FPGA 庫,約定的失蹤頻率為 80MHz。 /- CPU 芯片綜合結果報告開始 -/ #Program:Synplify Pro 8.1 #OS:Windows_NT $ Start of Compile #Fri Jul 01 10:11:03 2009 Synplify Verilog Compiler, version 3.1.0, Build 049R,built May 3

47、2005 Copyright (C) 1994-2005, Synplicity Inc. All Rights Reserved I:”C:Program FileSynplicityfpga_81libalteraaltera.v” I:”C:Program FileSynplicityfpga_81libalteraaltera_mf.v” I:”C:Program FileSynplicityfpga_81libalteraaltera_lpm.v” I:”C:vlogexeex17_2cpu.v” I:”C: vlogexeex17_2cpu.v”:“C:vlogexeex17_2c

48、lk_gen.v” I:”C: vlogexeex17_2cpu.v”:“C:vlogexeex17_2accum.v” Verilog syntax check successful! Compiler output is up to date. No re-compile necessary Selecting top level module cpu N:”C:vlogexeex17_2clk_gen.v”:2:7:2:13Synthesizing module clk_gen N: CL201:“C:vlogexeex17_2clk_gen.v”:18:0:18:5Trying to

49、extract state machine for register state Extracted state machine for register state State machine has 9 reachable states with original encodings of: N:”C:vlogexeex17_2register.v”:4:7:4:14Synthesizing module register N: CL201:“C:vlogexeex17_2machine.v”:44:0:44:5Trying to extract state machine for reg

50、ister state Extracted state machine for register state State machine has 8 reachable states with original encodings of: 000 001 010 N:”C:vlogexeex17_2datactl.v”:11:7:11:13Synthesizing module datactl N:”C:vlogexeex17_2adr.v”:10:8:10:10Synthesizing module adr END Process took 0h:00m:01s realtime,0h:00

51、m:01s cputime #Fri Jul 01 10:11:03 2009 # Version8.1 Synplicity Altera Technology Mapper,Version8.1.0,Build 539R,Built May 6 2005 Copyright(C)1994-2005,Synplicity Inc. All Rights Reserved Automatic dissolve at startup in view:work.cup(verilog) of m_counter(counter) Automatic dissolve at startup in v

52、iew:work.cpu(verilog) of m_adr(adr) RTL optimization done. N:”C:vlogexeex17_2counter.v”:19:0:19:5Found counter in view:work.cpu(verilog) inst m_counter.pc_addr12:0 Encoding state machine work.clk_gen(verilog)-state8:0 Original code-new code - - Encoding state machine work.machine_synplcty(verilog)-s

53、tate7:0 Original code-new code 000- 001- Writing Analyst data base C:vlogexeex17_2rev_1cpu.srm Writing Verilog Netlist and constraint files Writing.vqm output for Quartus Writing Cross reference file for Quartus to C:vlogexeex17_2rev_1cpu.xrf Writing Verilog Simulation files Found clock cpuclk with

54、period 12.50ns Found clock machineinc_pc_derived_clock with period 12.50ns #START OF TIMING REPORT# #Timing Report written on Fri Jul 01 10:11:03 2009 Top view: cpu Requested Frequency: 80.0MHz Wire load mode: top Paths requested: 5 Constraint File(s): N:MT195This timing report estimates place and r

55、oute data.Please look at the place and route timing report for final timing. N:MT197Clock constraints cover only FF-to-FF paths associated with the clock. Performance Summary * Worst slack in design:10.158 Requested Estimated Requested Estimate Clock Clock Starting Clock Frequency Frequency Period P

56、eriod Slack Type Group . cpuclk 80.0MHz 427.0MHz 12.500 2.342 10.158 inferred Inferrd_clkgroup_0 machineinc_pc_derived_clock 80.0MHz 427.0MHz 12.500 2.342 10.158 derived Inferrd_clkgroup_0 Clock Relationships * Detailed Report for Clock:cpuclk Starting Points with Worst Slack * Starting Arrival Inst

57、ance Reference Type Pin Net Time Slack Clock m_accum.accum0 cpuclk stratixii_lcell_ff regout accum_0 0.095 10.158 m_accum.accum1 cpuclk stratixii_lcell_ff regout accum_1 0.095 10.194 Ending Points with Worst Slack * Worst Path Information * Path information for path number 1: Requested Period: 12.50

58、0 -Setup time: 0.403 =Required time: 12.097 -Propagation time: 1.939 =Slack (critical): 10.158 Number of logic level(s): 9 Starting point: m_accum.accum0/regout Ending point: m_alu.alu_out7/adatasdata The start point is clocked by cpuclkrisingon pin clk The end point is clocked by cpuclkrisingon pin

59、 clk Instance/Net Pin Pin Arrival No. of Name Type Name Dir Delay Time Fan Out(s) m_accum.accum0 stratixii_lcell_ff regout Out 0.095 0.095 accum_0 Net - - 0.621 - 4 m_alu.un2_alu_out_carry_0 stratixii_lcell_comb dataf In 0.716 m_alu.un2_alu_out_carry_0 stratixii_lcell_comb cout Out 0.312 1.028 un2_a

60、lu_out_carry_0 Net - - 0.000 1 m_alu.un2_alu_out_carry_1 stratixii_lcell_comb cin In 1.028 - Total path delay(propagation time+setup) of 2.342 is 1.307(55.8%)logic and 1.035(44.2%) route. Detailed Report for Clock:machine_synplctyinc_pc_derived_clock Starting Points with Worst Slack * m_counter.pc_a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論