1. 程式人生 > >《步步驚“芯”——軟核處理器內部設計分析》前兩章讀書筆記

《步步驚“芯”——軟核處理器內部設計分析》前兩章讀書筆記

文件 發現 elf ram 復制 erl step 第一條 spa

第一章

1.軟核處理器概念:

技術分享圖片

2.部分開源軟核處理器:

①OR1200

技術分享圖片

技術分享圖片

......

第二章 實驗環境搭建

本章做了兩個實驗:

1.Linux環境下編寫一個匯編文件Example.S,程序功能是將兩個寄存器的值相加並存到被加寄存器中。將該匯編程序編譯、鏈接成可執行文件,在OR1200模擬器OR1KSim中運行該可執行代碼,觀察結果。

2.創建一個OR1200運行的最小系統,在該系統中執行1中的可執行文件,使用仿真軟件ModelSim觀察結果。

【筆者決定暫不糾結於工具,因為有些太老了已經下載不了了,重要的是搞清楚實驗步驟和原理】

2.1實驗一

Step1.搭建實驗環境。安裝虛擬機工具並掛載ubuntu鏡像,在

ubuntu下安裝針對目標平臺的GNU工具鏈。

技術分享圖片

安裝軟件:VitualBox虛擬機工具和OR1200 Ubuntu鏡像

Step2.編寫Example.S匯編程序

技術分享圖片

Step3.編譯Example.S得到Example.o。我們編寫的匯編程序放置在Example.oSection.text中。

技術分享圖片

Step4.建立鏈接描述腳本ram.ld,使得Section.text從地址0x100處開始放置,因為執行的第一條指令就是此地址的。執行下面的鏈接命令,得到可執行文件Example.or32

技術分享圖片

Step5.編寫makefile文件,規範化對源程序的編譯鏈接過程。[makefile文件的編寫方法見前幾篇博客

]

Step6.使用OR1KSim模擬器運行程序。

技術分享圖片

跟蹤程序的執行信息並對其進行剖析,如下圖

可以發現,執行完這段程序後,r1寄存器和r2寄存器的值都是0xa

技術分享圖片

總結:該實驗的目的是了解程序如何能在硬件上執行。過程是:將一段匯編代碼在OR1200(的模擬器)中編譯、鏈接並執行,跟蹤執行過程和結果。實驗環境是ubuntu,所需工具是gnu工具鏈。

2.2實驗二

1.創建最小系統如下:

技術分享圖片

Step1.ModleSim中建立工程min_or1200。將OR1200的所有Verilog文件加入其中。

Step2.新建測試平臺(test bench)文件or1200_tb.v。只令時鐘、復位信號有效,其余接口輸入信號置

0

Step3.修改OR1200配置。通過註釋和取消註釋配置文件or1200_defines.v中的宏定義,保留需要的模塊,去掉不需要的模塊,以構建最小系統。

Step4.修改or1200_qmem.vOR1200將從QMEM中讀取指令、加載存儲數據。

2.運行仿真

Step1.初始化QMEM,將可執行代碼存入其中。修改文件or1200_spram_2048x32.v,在611行添加如下代碼initial $readmemh(“mem.data”,mem); 表示從mem.data中讀取數據初始化memQMEM)。

註意:mem.data不能是Example.or32的內容,因為後者是一個ELF格式的文件,需要操作系統來解釋該文件。而上述1過程構建的最小系統是一個硬件裸機,也就是說當加電復位的時候CPU只知道從0x100處讀入指令開始執行,其余什麽也不知道。所以我們要手動把Example.or32中的可執行代碼放到0x100處。

mem.data內容如下:

技術分享圖片

Step2.mem.data復制到min_or1200工程的根目錄,單擊Simulate,選擇or1200_tb作為測試平臺,觀察下面四個信號的波形(Add to wave)

技術分享圖片

選擇菜單Simulate->Run->Run-All開始仿真。顯示波形如下:

技術分享圖片

3.自動化生成mem.data

如上2中所述的mem.data是我們手工編寫的。實際該過程可由makefile自動完成。步驟為將Example.or32中的內容轉化為二進制,再寫入memdata即可。

總結:該實驗通過配置創建了一個OR1200的最小系統,然後將實驗1可執行代碼存入cpu啟動後首先讀取的地址處,觀察仿真結果。

技術分享圖片

思考心得:一段匯編程序,先編譯成.o文件,將匯編碼變成十六進制代碼,然後鏈接成.or32文件,安排程序在內存中的存放位置,就可以執行了(但需要操作系統或加載器,因為.or32是一個ELF文件)。如果想在裸機上執行,要先知道該cpu加電後最先取哪個存儲體的哪個地址的指令開始執行,然後把程序的十六進制代碼放到該地址處即可。

《步步驚“芯”——軟核處理器內部設計分析》前兩章讀書筆記