以下文章來源于OpenFPGA,作者碎碎思
項目背景
在 1970s 至 1980s,像 Zilog Z80 和 Intel MCS-51(8051) 這樣的 8 位處理器廣泛用于家用電腦、嵌入式設備和各種單片機系統。

它們設計簡單、指令清晰、學習曲線淺,是許多人的入門 CPU。

而現在,隨著 FPGA 的普及,我們可以在 FPGA 內核中重新實現這些經典 CPU,并構建真實可運行的單板計算機。

這個項目正是這樣的一個嘗試:
在一塊 Intel MAX 10 FPGA 開發板上實現 Z80 或 8051 單板計算機(SBC),讓它能運行原始匯編程序、驅動外圍設備、顯示輸出并與用戶交互。
項目使用的硬件平臺
主板采用的是 Intel MAX 10 FPGA:

是一款基于 Intel 14nm 工藝的低功耗 FPGA
IDE 支持 Quartus Prime
支持配置 Flash、SD 卡、GPIO 等外設

開發者選用這塊板子的原因是:
成本低
易于學習 FPGA
有足夠的資源用于模擬 8 位 CPU
支持豐富引腳擴展

SBC 核心架構
項目實現了兩套單板計算機系統:
Z80 單板電腦
典型架構包括:
Zilog Z80 CPU 軟核
串口 UART
視頻輸出控制器
鍵盤輸入模塊
整個 CPU 子系統在 FPGA 內部運行,執行傳統匯編指令,像真實的 Z80 一樣工作。

MCS-51 (8051) 單板電腦
類似地,這部分實現包括:
8051 CPU 軟核
程序 ROM
I/O 模塊
串口 / UART
計時器和控制邏輯
8051 是最經典的單片機之一,也是微控制器課程教學中的主力架構之一。


Zilog Z80 SBC 基于 MAX10 FPGA
對于運行 Microsoft BASIC 4.7b 版本的最小 Z80 單板計算機,需要 8kB 的 ROM 空間和 4kB 的 RAM 空間。此外,還有大量的邏輯元件和存儲位可用,這有利于未來的擴展。
SBC 系統使用 Quartus II 18.1 版本編譯和測試。只需打開 Quartus II 并恢復歸檔文件即可。
項目文件夾還包含 SRAM 目標文件 (SOF) 和可編程目標文件 (POF),無需編譯即可使用。
將 Micro USB 數據線連接到 MAX10 開發板,并寫入 SOF 或 POF 文件。SOF 文件在斷電重啟后會丟失。POF 文件會存儲在 FLASH 閃存中,每次上電后都會被激活。
下面這段 BASIC 代碼只是在 Z80 SBC I/O 端口上從 0 計數到 255。
05 REM COUNT 0 To 255 on PORT 145 (Z80) 10 FOR I = 0 TO 255 20 PRINT I, 30 OUT 145, 255-I 35 FOR J = 0 TO 99 : NEXT J 40 NEXT I 45 FOR K = 0 TO 4095 : NEXT K 46 OUT 145,255 50 END
以下代碼使用 Microsoft BASIC 4.7b 版本,在 Z80 上實現 ASCIIART 功能,并采用循環方式運行。要退出循環,請按 Ctrl+C。
10 FOR Y=-12 TO 12 20 FOR X=-39 TO 39 30 CA=X*0.0458 40 CB=Y*0.08333 50 A=CA 60 B=CB 70 FOR I=0 TO 15 80 T=A*A-B*B+CA 90 B=2*A*B+CB 100 A=T 110 IF (A*A+B*B)>4 THEN GOTO 200 120 NEXT I 130 PRINT" "; 140 GOTO 210 200 IF I>9 THEN I=I+7 205 PRINT CHR$(48+I); 210 NEXT X 220 PRINT 230 NEXT Y 240 PRINT 250 GOTO 10
基于 MAX10 FPGA 的 Intel MCS-51 單板計算機
有兩個項目鏡像可供直接使用。英特爾最初將 BASIC-52 Ver 1.1 發布到公共領域。但該代碼包含大量漏洞和隱藏的惡意信息。
最后一個版本是 BASIC-52 Ver 1.31,由 Hans-Jürgen B?hling 于 2001 年 2 月發布。Hans-Jürgen B?hling 還發布了 I2C 支持的擴展代碼。
8kB ROM 和 32kB RAM,頻率 50 MHz:
此鏡像僅包含 8kB 代碼內存,不支持任何 I2C 擴展。系統包含 32kB RAM 用于用戶程序。系統時鐘頻率為 50MHz,由 MAX10 內部鎖相環 (PLL) 從 12MHz 頻率轉換而來。
16kB ROM 和 16kB RAM,頻率為 11.059200 MHz:
此鏡像包含 16kB 代碼內存,支持 I2C 擴展。系統包含 16kB RAM 用于用戶程序。系統時鐘頻率為 11.059200 MHz。即使在 11.059200 MHz 的頻率下,該系統的性能也比傳統的 12T 內核快 10 倍。I2C 功能在 11.059200 MHz 的系統時鐘頻率下運行良好。
以下程序使用 BASIC-52 語言,在 PORT1 端口上將一個 LED 從最低有效位 (LSB) 移到最高有效位 (MSB),并重復執行。PORT1 端口映射到 8 個 LED。
01 REM 8 LED SHIFT 02 REM SHIFT LEFT AND RIGHT 10 LED = 1 20 IF LED <= 80H THEN PORT1 = 0FFH.XOR.LED ELSE GOTO 1000 30 LED = LED * 2 40 FOR J = 0 TO 999 : NEXT J 50 GOTO 20 900 REM RIGHT SHIFT 1000 LED = 080H 1100 IF LED >= 1 THEN PORT1 = 0FFH.XOR.LED ELSE GOTO 10 1120 LED = LED/2 1130 FOR J = 0 TO 999 : NEXT J 1200 GOTO 1100
以下程序是使用 BASIC-52 編寫的 ASCIIART 程序。
01 REM ASCII ART SOFT CPU 02 REM ASCII ART FOR MAX10 03 XTAL=50000000 05 TIME=0 : CLOCK 1 10 FOR Y=-12 TO 12 20 FOR X=-39 TO 39 30 CA=X*0.0458 40 CB=Y*0.08333 50 A=CA 60 B=CB 70 I=0 80 T=A*A-B*B+CA 90 B=2*A*B+CB 100 A=T 110 IF (A*A+B*B)>4 THEN GOTO 150 120 I=I+1 : IF I<=15 THEN ?GOTO 80 130 ? ?PRINT?" ", 140 ? ?GOTO 170 150 ? ?IF I>9 THEN I=I+7 160 PRINT CHR(48+I), 170 NEXT X 180 PRINT 190 NEXT Y 200 PRINT TIME 210 GOTO 10 220 END
我們可以注意到上面列出的 Z80 BASIC 和 BASIC-52 之間只有非常細微的差別。如果單板計算機運行在 11.059200 MHz 頻率,則需要注釋掉第 3 行。上述程序適用于 50 MHz 系統。
否則,我們可以在命令提示符中聲明系統頻率。
XTAL = 50000000
上述ASCIIART代碼計算程序運行所需的時間(以秒為單位)。因此,為了精確計算時間,我們需要設置系統時鐘頻率。
我們還可以根據需要實現其他功能以及 ROM、RAM 組合。
可用鏈接
https://github.com/mit41301/10M08SAM153C8G_Zilog-Z80_Intel-8051
https://www.hackster.io/mit41301/z80-and-mcs-51-sbc-on-a-max-10-fpga-742a9c
結語
這個項目展示了一個非常有趣且實用的方向:
用 FPGA 重建經典單板計算機,讓你從軟核 CPU 到外設設計全面理解嵌入式系統。
對于:
FPGA 初學者
想理解 CPU / 單片機架構
喜歡復古計算與硬件實現
想做軟硬件協同系統實驗
這個項目都有很強的啟發意義。
-
處理器
+關注
關注
68文章
20282瀏覽量
253061 -
FPGA
+關注
關注
1661文章
22440瀏覽量
637275 -
單片機
+關注
關注
6077文章
45515瀏覽量
671553 -
單板電腦
+關注
關注
0文章
11瀏覽量
7850
原文標題:在 FPGA 上重生的經典:實現 Z80 與 8051 單板電腦
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
GE最新雙核Intel Core處理器的單板計算機
【作品合集】賽昉科技VisionFive 2單板計算機開發板測評
如何使用工業相機和單板計算機組建視覺采集系統,通過利用labview實現該系統的遠程控制和圖像采集?
構建基于WDC65C02S和Z80 CPU的微型計算機
什么是單板計算機?
2014國外創客最具創意10大DIY單板計算機項目
基于Intel處理器技術的高性能單板計算機產品
單板計算機為什么對于嵌入式計算設計很重要?
基于Intel MAX 10 FPGA實現Z80與8051單板計算機
評論