王發棟 杜慧玲 史翔
摘 要: 給出一種基于FPGA的8051MCU的IP核設計方案,指令集與標準8051系列處理器完全兼容。采用譯碼——執行兩級流水結構,并通過了仿真與綜合,理論速度較傳統8051MCU有6~10倍的提升。針對CISC流水線設計的復雜性,提出了一種高效的實現方案,可以使執行結構近滿狀態運行,且簡便有效地解決了傳統流水線所必須面對的三種沖突。設計采用Verilog HDL語言描述,并采用ModelsimSE 6.2進行功能和時序驗證,將代碼下載到Xilinx公司的FPGA上進行物理驗證,測試了一個LED流水燈程序,結果表明軟核達到了預期的效果。
關鍵字: 8051微處理器; 流水線; FPGA; 控制冒險
中圖分類號: TN710?34 文獻標識碼: A 文章編號: 1004?373X(2014)05?0080?03
0 引 言
自51單片機應用以來,對其進行功能改進和性能提升的芯片設計層出不窮。但由于其CISC的架構,對其流水線化始終局限于將CISC指令轉換為可以在一周期內完成的類RISC指令,然后使用RISC指令流水作業的方式,這雖然可以讓多條指令同時執行,但增加了譯碼結構的復雜程度,而且需要復雜的控制邏輯解決指令同時執行帶來的傳統流水線所必須面對的三種沖突。本文原創性地提出一種新的實現方案,該方案解決了這三種沖突,且在FPGA的平臺下最大限度地做到填充執行結構,使得指令可以流暢運行。
1 MCU結構與FPGA平臺
本文設計的8051 IP核是與傳統8051指令集兼容的MCU內核,不包含定時器等模塊但通過總線預留接口。其結構如圖1所示。
(1)譯碼器。負責將讀入的指令譯成可供流水線執行結構執行的控制碼,同時向其發送執行所需的地址和數據。它包含4個控制碼隊列,在譯碼過程中循環地向四個隊列中寫入當前指令的控制碼,因此可以不必等待指令執行完畢再繼續下一條指令的譯碼。
(2)流水線執行結構。讀取譯碼器發出的控制碼并進行相應的操作。主要完成對地址單元的讀寫,數據總線的操作和PC的控制。
(3)ALU算術邏輯運算單元。完成8位整數的四則運算和邏輯運算,同時內置了位尋址單元,具有位運算的功能。
(4)256 B的RAM單元。其中低128 B是連續的RAM空間,高128 B是特殊功能寄存器SFR,被分散在各模塊中。
(5) 216 B的ROM單元。指令存儲空間,存儲指令和表格。
設計采用Xilinx XCV300芯片,可以使用Xilinx公司提供的BlockRam。它不消耗邏輯資源,且可以實現雙通道讀寫,增大了內部總線的帶寬。同時,該型可以使用Xilinx提供的乘法器和除法器,有效地縮短了乘法和除法操作的時間。
2 流水線設計及性能分析
2.1 CISC指令流水化的控制碼方案
51單片機采用的是CISC架構,其指令長度從1~3 B不等,指令執行周期也不固定,對其直接進行流水化控制邏輯復雜,難度較大。吸收傳統CISC流水化實現方案的積極因素,針對FPGA平臺的特定結構,對其進行改進。總體思路是將其轉換為可單周期執行的指令,稱其為控制碼,將它發送給流水執行部件,但不像傳統流水線的方式去流水,而是進行單指令流水,即對指令A轉換的指令[a(0)-a(n)]進行流水,在A指令的全部次級指令執行完畢前,不允許其他指令進入流水線。這樣避免了流水線的結構沖突和數據沖突,對于控制沖突,由于PC在執行轉移指令前不會改變,譯碼仍然是順序譯碼,即相當于默認跳轉不成功。若預測失敗,則流水線暫停跳轉后第一條指令的字節數個周期。在中斷到來時,自動生成保存當前PC的控制碼,同時清空控制碼隊列并跳轉到中斷執行程序。
2.2 與傳統流水線方案的對比
流水線思想的最終目的,實質上是盡量并行化地使用MCU的全部資源。因此這里提出兩條觀點:
(1) 不完全流水線化的執行結構若能保證資源的充分使用,因其指令周期較流水化的指令周期短,故其整體效率與流暢的流水線相近。
(2) 盡力避免流水線沖突使得指令運行流暢,不能流暢運行的流水線其效率可能低于無流水的執行結構。
前面提到,與傳統流水線不同,這里采取的方案是單指令流水,其實質是將譯碼和執行分開,讓兩者并行運行。當指令周期與所執行指令的平均字節數即譯碼周期相等時,流水線恰好可以無中斷地運行。在FPGA平臺下,通過對控制碼的優化設計,將指令的平均周期控制在兩個時鐘周期,與51指令集的平均字節數相同,符合提出的理論。同時,在譯碼器中設置了4個控制碼隊列,保證了在字節?周期數不匹配時能夠有足夠的空間進行自動的調節。
3 流水線體系結構
(1) 控制碼定義
對其指令行為進行分析,給出譯碼器發送給流水線執行結構的控制碼定義。控制碼共19位,其中前3位是控制流水線執行器讀取源地址、目的地址及操作數的。第4~9位控制A通道的尋址和數據讀寫,第10~15位控制B通道的尋址和數據讀寫。第16、17位控制將立即數發送到A或B通道上,第18、19位控制ALU模塊讀取A或B通道上的數據。
(2) 地址、立即數與其他信息
指令執行需要的地址、立即數信息由譯碼器發送給流水線執行器,流水線執行器根據控制碼決定是否讀入信息。其中立即數和目的地址兩個字節也可以存放控制轉移類指令所需的PC地址和偏移地址。
(3) ALU控制碼
定義了一組控制碼,發送到ALU控制其執行相關的運算操作。由于ALU運算通常在指令執行的后期,為縮短指令執行周期,采用了提前發送,內部緩存的延遲方式達到同步。
(4) 雙通道下的指令時序設計特點
前面已經提到,設計所采用的FPGA有雙通道的Blockram,將兩個通道分別稱為A通道和B通道,雙通道增加了系統內部總線的帶寬,也給數據通路的設計帶來了很大的方便。例如對于數據傳送類指令,可以在上升沿從A通道讀出數據,在下降沿向B通道中寫入,使得指令在一個時鐘周期內完成。這也是除指令流水化執行以外,提高設計性能的一個重要因素。
4 流水線的實現與沖突的解決
流水線結構存在著三種冒險,即結構冒險、控制冒險和數據冒險。結構冒險指不同的指令在同一時間對同一硬件資源提出了使用的申請,從而產生了沖突;控制冒險發生在控制轉移類指令所需的條件是流水線中尚未得到的結果,因此必須等待該結果得出后才能執行;數據冒險則主要指“未寫先讀”,即后面的指令所需的源操作數是前面指令的目的操作數,因此產生了錯誤。
在本設計中,由于采用單指令流水方案,因此避免了結構冒險和數據冒險。對于控制冒險,譯碼器的預測策略是總是認為跳轉不成功,即不改變PC,繼續譯碼。若預測成功,則流水線無停滯地執行;若預測失敗,則譯碼器首先清空全部控制碼隊列,然后再進行新的譯碼,流水線將阻塞新的程序段第一條指令的字節數個周期。
5 設計仿真與綜合結果
6 結 語
本文針對8051的CISC指令集和FPGA平臺的特點,提出了一種新的CISC流水化執行方案,實現了51指令的流水化執行并解決了流水化所要面對的三種冒險。設計代碼采用Verilog?HDL編寫,仿真測試和綜合的結果表明,該設計邏輯正確,系統參數達到了要求。
參考文獻
[1] Atmel. AT89C51 8?bit microcontroller with 2K bytes flash [M]. USA: Atmel, 2008.
[2] 尚笠,葛元慶,周潤德.80C51微處理器嵌入式內核的設計研究[J].微電子學,2000,30(1):28?30.
[3] PATTERSON D A, HENNESSY J L.計算機組成與設計?軟件硬件接口[M].鄭緯民,譯.2版.北京:機械工業出版社,2012.
[4] Xilinx. Dual?port block memory core v6.3 [EB/OL]. [2005?08?31]. http://www.xilinx.com/support/documentation/ip_documentation/dp_block_mem.pdf.
[5] THIMMANNAGARI C M R. CPU design: answers to frequently asked questions [M]. USA: Springer, 2005.
[6] 李亞民.計算機組成原理與系統結構[M].北京:清華大學出版社,1999.
[7] 周寧寧,劉勝.基于FPGA技術的CPU的設計與實現[J].南京郵電學院學報,2003,23(1):77?79.
[8] 孟現元,錢偉康.FPGA嵌入式系統設計[M].北京:電子工業出版社,2007.
[9] 倪繼利,陳曦,李輝.CPU源代碼分析與芯片設計及Linux移植[M].北京:電子工業出版社,2007.
[10] SIMIC J, TERAN S. 8051 core specification [DB/OL].(2001?09?25)[2013?01?21]. http: //www.opencores.org.
前面已經提到,設計所采用的FPGA有雙通道的Blockram,將兩個通道分別稱為A通道和B通道,雙通道增加了系統內部總線的帶寬,也給數據通路的設計帶來了很大的方便。例如對于數據傳送類指令,可以在上升沿從A通道讀出數據,在下降沿向B通道中寫入,使得指令在一個時鐘周期內完成。這也是除指令流水化執行以外,提高設計性能的一個重要因素。
4 流水線的實現與沖突的解決
流水線結構存在著三種冒險,即結構冒險、控制冒險和數據冒險。結構冒險指不同的指令在同一時間對同一硬件資源提出了使用的申請,從而產生了沖突;控制冒險發生在控制轉移類指令所需的條件是流水線中尚未得到的結果,因此必須等待該結果得出后才能執行;數據冒險則主要指“未寫先讀”,即后面的指令所需的源操作數是前面指令的目的操作數,因此產生了錯誤。
在本設計中,由于采用單指令流水方案,因此避免了結構冒險和數據冒險。對于控制冒險,譯碼器的預測策略是總是認為跳轉不成功,即不改變PC,繼續譯碼。若預測成功,則流水線無停滯地執行;若預測失敗,則譯碼器首先清空全部控制碼隊列,然后再進行新的譯碼,流水線將阻塞新的程序段第一條指令的字節數個周期。
5 設計仿真與綜合結果
6 結 語
本文針對8051的CISC指令集和FPGA平臺的特點,提出了一種新的CISC流水化執行方案,實現了51指令的流水化執行并解決了流水化所要面對的三種冒險。設計代碼采用Verilog?HDL編寫,仿真測試和綜合的結果表明,該設計邏輯正確,系統參數達到了要求。
參考文獻
[1] Atmel. AT89C51 8?bit microcontroller with 2K bytes flash [M]. USA: Atmel, 2008.
[2] 尚笠,葛元慶,周潤德.80C51微處理器嵌入式內核的設計研究[J].微電子學,2000,30(1):28?30.
[3] PATTERSON D A, HENNESSY J L.計算機組成與設計?軟件硬件接口[M].鄭緯民,譯.2版.北京:機械工業出版社,2012.
[4] Xilinx. Dual?port block memory core v6.3 [EB/OL]. [2005?08?31]. http://www.xilinx.com/support/documentation/ip_documentation/dp_block_mem.pdf.
[5] THIMMANNAGARI C M R. CPU design: answers to frequently asked questions [M]. USA: Springer, 2005.
[6] 李亞民.計算機組成原理與系統結構[M].北京:清華大學出版社,1999.
[7] 周寧寧,劉勝.基于FPGA技術的CPU的設計與實現[J].南京郵電學院學報,2003,23(1):77?79.
[8] 孟現元,錢偉康.FPGA嵌入式系統設計[M].北京:電子工業出版社,2007.
[9] 倪繼利,陳曦,李輝.CPU源代碼分析與芯片設計及Linux移植[M].北京:電子工業出版社,2007.
[10] SIMIC J, TERAN S. 8051 core specification [DB/OL].(2001?09?25)[2013?01?21]. http: //www.opencores.org.
前面已經提到,設計所采用的FPGA有雙通道的Blockram,將兩個通道分別稱為A通道和B通道,雙通道增加了系統內部總線的帶寬,也給數據通路的設計帶來了很大的方便。例如對于數據傳送類指令,可以在上升沿從A通道讀出數據,在下降沿向B通道中寫入,使得指令在一個時鐘周期內完成。這也是除指令流水化執行以外,提高設計性能的一個重要因素。
4 流水線的實現與沖突的解決
流水線結構存在著三種冒險,即結構冒險、控制冒險和數據冒險。結構冒險指不同的指令在同一時間對同一硬件資源提出了使用的申請,從而產生了沖突;控制冒險發生在控制轉移類指令所需的條件是流水線中尚未得到的結果,因此必須等待該結果得出后才能執行;數據冒險則主要指“未寫先讀”,即后面的指令所需的源操作數是前面指令的目的操作數,因此產生了錯誤。
在本設計中,由于采用單指令流水方案,因此避免了結構冒險和數據冒險。對于控制冒險,譯碼器的預測策略是總是認為跳轉不成功,即不改變PC,繼續譯碼。若預測成功,則流水線無停滯地執行;若預測失敗,則譯碼器首先清空全部控制碼隊列,然后再進行新的譯碼,流水線將阻塞新的程序段第一條指令的字節數個周期。
5 設計仿真與綜合結果
6 結 語
本文針對8051的CISC指令集和FPGA平臺的特點,提出了一種新的CISC流水化執行方案,實現了51指令的流水化執行并解決了流水化所要面對的三種冒險。設計代碼采用Verilog?HDL編寫,仿真測試和綜合的結果表明,該設計邏輯正確,系統參數達到了要求。
參考文獻
[1] Atmel. AT89C51 8?bit microcontroller with 2K bytes flash [M]. USA: Atmel, 2008.
[2] 尚笠,葛元慶,周潤德.80C51微處理器嵌入式內核的設計研究[J].微電子學,2000,30(1):28?30.
[3] PATTERSON D A, HENNESSY J L.計算機組成與設計?軟件硬件接口[M].鄭緯民,譯.2版.北京:機械工業出版社,2012.
[4] Xilinx. Dual?port block memory core v6.3 [EB/OL]. [2005?08?31]. http://www.xilinx.com/support/documentation/ip_documentation/dp_block_mem.pdf.
[5] THIMMANNAGARI C M R. CPU design: answers to frequently asked questions [M]. USA: Springer, 2005.
[6] 李亞民.計算機組成原理與系統結構[M].北京:清華大學出版社,1999.
[7] 周寧寧,劉勝.基于FPGA技術的CPU的設計與實現[J].南京郵電學院學報,2003,23(1):77?79.
[8] 孟現元,錢偉康.FPGA嵌入式系統設計[M].北京:電子工業出版社,2007.
[9] 倪繼利,陳曦,李輝.CPU源代碼分析與芯片設計及Linux移植[M].北京:電子工業出版社,2007.
[10] SIMIC J, TERAN S. 8051 core specification [DB/OL].(2001?09?25)[2013?01?21]. http: //www.opencores.org.