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

它們?cè)O(shè)計(jì)簡(jiǎn)單、指令清晰、學(xué)習(xí)曲線淺,是許多人的入門(mén) CPU。

而現(xiàn)在,隨著 FPGA 的普及,我們可以在 FPGA 內(nèi)核中重新實(shí)現(xiàn)這些經(jīng)典 CPU,并構(gòu)建真實(shí)可運(yùn)行的單板計(jì)算機(jī)。

這個(gè)項(xiàng)目正是這樣的一個(gè)嘗試:
在一塊 Intel MAX 10 FPGA 開(kāi)發(fā)板上實(shí)現(xiàn) Z80 或 8051 單板計(jì)算機(jī)(SBC),讓它能運(yùn)行原始匯編程序、驅(qū)動(dòng)外圍設(shè)備、顯示輸出并與用戶(hù)交互。
項(xiàng)目使用的硬件平臺(tái)
主板采用的是 Intel MAX 10 FPGA:

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

開(kāi)發(fā)者選用這塊板子的原因是:
成本低
易于學(xué)習(xí) FPGA
有足夠的資源用于模擬 8 位 CPU
支持豐富引腳擴(kuò)展

SBC 核心架構(gòu)
項(xiàng)目實(shí)現(xiàn)了兩套單板計(jì)算機(jī)系統(tǒng):
Z80 單板電腦
典型架構(gòu)包括:
Zilog Z80 CPU 軟核
串口 UART
視頻輸出控制器
鍵盤(pán)輸入模塊
整個(gè) CPU 子系統(tǒng)在 FPGA 內(nèi)部運(yùn)行,執(zhí)行傳統(tǒng)匯編指令,像真實(shí)的 Z80 一樣工作。

MCS-51 (8051) 單板電腦
類(lèi)似地,這部分實(shí)現(xiàn)包括:
8051 CPU 軟核
程序 ROM
I/O 模塊
串口 / UART
計(jì)時(shí)器和控制邏輯
8051 是最經(jīng)典的單片機(jī)之一,也是微控制器課程教學(xué)中的主力架構(gòu)之一。


Zilog Z80 SBC 基于 MAX10 FPGA
對(duì)于運(yùn)行 Microsoft BASIC 4.7b 版本的最小 Z80 單板計(jì)算機(jī),需要 8kB 的 ROM 空間和 4kB 的 RAM 空間。此外,還有大量的邏輯元件和存儲(chǔ)位可用,這有利于未來(lái)的擴(kuò)展。
SBC 系統(tǒng)使用 Quartus II 18.1 版本編譯和測(cè)試。只需打開(kāi) Quartus II 并恢復(fù)歸檔文件即可。
項(xiàng)目文件夾還包含 SRAM 目標(biāo)文件 (SOF) 和可編程目標(biāo)文件 (POF),無(wú)需編譯即可使用。
將 Micro USB 數(shù)據(jù)線連接到 MAX10 開(kāi)發(fā)板,并寫(xiě)入 SOF 或 POF 文件。SOF 文件在斷電重啟后會(huì)丟失。POF 文件會(huì)存儲(chǔ)在 FLASH 閃存中,每次上電后都會(huì)被激活。
下面這段 BASIC 代碼只是在 Z80 SBC I/O 端口上從 0 計(jì)數(shù)到 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 上實(shí)現(xiàn) ASCIIART 功能,并采用循環(huán)方式運(yùn)行。要退出循環(huán),請(qǐng)按 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 單板計(jì)算機(jī)
有兩個(gè)項(xiàng)目鏡像可供直接使用。英特爾最初將 BASIC-52 Ver 1.1 發(fā)布到公共領(lǐng)域。但該代碼包含大量漏洞和隱藏的惡意信息。
最后一個(gè)版本是 BASIC-52 Ver 1.31,由 Hans-Jürgen B?hling 于 2001 年 2 月發(fā)布。Hans-Jürgen B?hling 還發(fā)布了 I2C 支持的擴(kuò)展代碼。
8kB ROM 和 32kB RAM,頻率 50 MHz:
此鏡像僅包含 8kB 代碼內(nèi)存,不支持任何 I2C 擴(kuò)展。系統(tǒng)包含 32kB RAM 用于用戶(hù)程序。系統(tǒng)時(shí)鐘頻率為 50MHz,由 MAX10 內(nèi)部鎖相環(huán) (PLL) 從 12MHz 頻率轉(zhuǎn)換而來(lái)。
16kB ROM 和 16kB RAM,頻率為 11.059200 MHz:
此鏡像包含 16kB 代碼內(nèi)存,支持 I2C 擴(kuò)展。系統(tǒng)包含 16kB RAM 用于用戶(hù)程序。系統(tǒng)時(shí)鐘頻率為 11.059200 MHz。即使在 11.059200 MHz 的頻率下,該系統(tǒng)的性能也比傳統(tǒng)的 12T 內(nèi)核快 10 倍。I2C 功能在 11.059200 MHz 的系統(tǒng)時(shí)鐘頻率下運(yùn)行良好。
以下程序使用 BASIC-52 語(yǔ)言,在 PORT1 端口上將一個(gè) LED 從最低有效位 (LSB) 移到最高有效位 (MSB),并重復(fù)執(zhí)行。PORT1 端口映射到 8 個(gè) 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 編寫(xiě)的 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 之間只有非常細(xì)微的差別。如果單板計(jì)算機(jī)運(yùn)行在 11.059200 MHz 頻率,則需要注釋掉第 3 行。上述程序適用于 50 MHz 系統(tǒng)。
否則,我們可以在命令提示符中聲明系統(tǒng)頻率。
XTAL = 50000000
上述ASCIIART代碼計(jì)算程序運(yùn)行所需的時(shí)間(以秒為單位)。因此,為了精確計(jì)算時(shí)間,我們需要設(shè)置系統(tǒng)時(shí)鐘頻率。
我們還可以根據(jù)需要實(shí)現(xiàn)其他功能以及 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
結(jié)語(yǔ)
這個(gè)項(xiàng)目展示了一個(gè)非常有趣且實(shí)用的方向:
用 FPGA 重建經(jīng)典單板計(jì)算機(jī),讓你從軟核 CPU 到外設(shè)設(shè)計(jì)全面理解嵌入式系統(tǒng)。
對(duì)于:
FPGA 初學(xué)者
想理解 CPU / 單片機(jī)架構(gòu)
喜歡復(fù)古計(jì)算與硬件實(shí)現(xiàn)
想做軟硬件協(xié)同系統(tǒng)實(shí)驗(yàn)
這個(gè)項(xiàng)目都有很強(qiáng)的啟發(fā)意義。
-
處理器
+關(guān)注
關(guān)注
68文章
20280瀏覽量
253026 -
FPGA
+關(guān)注
關(guān)注
1661文章
22439瀏覽量
637231 -
單片機(jī)
+關(guān)注
關(guān)注
6077文章
45514瀏覽量
671500 -
單板電腦
+關(guān)注
關(guān)注
0文章
11瀏覽量
7849
原文標(biāo)題:在 FPGA 上重生的經(jīng)典:實(shí)現(xiàn) Z80 與 8051 單板電腦
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
GE最新雙核Intel Core處理器的單板計(jì)算機(jī)
【作品合集】賽昉科技VisionFive 2單板計(jì)算機(jī)開(kāi)發(fā)板測(cè)評(píng)
基于PowerPC的單板計(jì)算機(jī)該怎樣去設(shè)計(jì)?
如何使用工業(yè)相機(jī)和單板計(jì)算機(jī)組建視覺(jué)采集系統(tǒng),通過(guò)利用labview實(shí)現(xiàn)該系統(tǒng)的遠(yuǎn)程控制和圖像采集?
構(gòu)建基于WDC65C02S和Z80 CPU的微型計(jì)算機(jī)
什么是單板計(jì)算機(jī)?
2014國(guó)外創(chuàng)客最具創(chuàng)意10大DIY單板計(jì)算機(jī)項(xiàng)目
基于Intel處理器技術(shù)的高性能單板計(jì)算機(jī)產(chǎn)品
STD Bus 8085單板計(jì)算機(jī)開(kāi)源分享
Z80 MBC3單板計(jì)算機(jī)開(kāi)源
單板計(jì)算機(jī)為什么對(duì)于嵌入式計(jì)算設(shè)計(jì)很重要?
如何選擇適合教育用途的單板計(jì)算機(jī)?
單板計(jì)算機(jī)是什么?它與其他計(jì)算機(jī)有何不同?
使用邏輯和轉(zhuǎn)換優(yōu)化單板計(jì)算機(jī)(SBC)系統(tǒng)
基于Intel MAX 10 FPGA實(shí)現(xiàn)Z80與8051單板計(jì)算機(jī)
評(píng)論