古老CPU啟示錄-MC14500 1位CPU(ICU 簡(jiǎn)介 在20世紀(jì)80年代4位、8位CPU逐漸成為主流,但是當(dāng)時(shí)的CPU發(fā)展還處于探索階段,所以各種“奇葩”的CPU都有出現(xiàn),今天給大家?guī)?-bit CPU MC14500和GI SBA。兩者差不多以MC14500為例看下這款“奇葩”CPU。 MC14500是一種工業(yè)控制單元(ICU),也被認(rèn)為是1位處理器。它由摩托羅拉(Motorola)生產(chǎn),但幾年前已停止生產(chǎn)。如今,MC14500已經(jīng)被價(jià)格合理的FPGA取代了,包括其所有外設(shè)和程序存儲(chǔ)器。至今仍存在使用MC14500設(shè)計(jì)的不同原因: 1、為舊的MC14500計(jì)算機(jī)創(chuàng)建備件; 2、重復(fù)使用MC14500軟件; 3、FPGA開發(fā)(VHDL代碼=》電子專家)與應(yīng)用程序(應(yīng)用工程師)之間的分離; 4、低成本PLC替代品; 5、在現(xiàn)代FPGA上運(yùn)行具有歷史意義的東西很有趣; 6、使用FPGA的學(xué)習(xí)項(xiàng)目。
特點(diǎn):
(1)16條指令;
(2)編程容易;
(3)容易掌握,不需要特殊的技術(shù)人員;
(4)由于使用外部存儲(chǔ)器,系統(tǒng)變得容易;
(5)能滿足用戶的特定需求,具有豐富的靈活性;
(6)能滿足用戶的特定需求,具有豐富的靈活性;
(7)能夠擴(kuò)展以適應(yīng)所有系統(tǒng)的規(guī)模和復(fù)雜程度;
(8)能夠進(jìn)行程序設(shè)計(jì);
(9)B系列C-MOS符合JEDE規(guī)格;
(10)噪音容限大;
(11)不工作時(shí)漏電流??;
(12)工作電壓3~18V;
(13)時(shí)鐘頻率范圍廣,一般工作頻率1MHz(VDD=5V,一個(gè)時(shí)鐘執(zhí)行一條指令);
(14)信號(hào)輸入和TTL互換;
(15)將判斷作為中心工作,超過微處理器的性能;
(16)應(yīng)用范圍廣,由繼電器回路開始的邏輯判斷處理到中速度的串行數(shù)據(jù)處理,還能減輕超負(fù)荷的微處理器系統(tǒng)的工作。
MC14500允許使用IO地址讀取輸入位。該位可以使用4位指令和內(nèi)部1位結(jié)果寄存器RR進(jìn)行處理。結(jié)果可以寫入IO地址的輸出位。 輸入和輸出數(shù)據(jù)位可以是物理輸入和輸出,其中可以連接電線,但它們可以連接到其他設(shè)備作為RAM或定時(shí)器。 IO的尋址完全在MC14500外部完成。MC14500的所選指令的4位和外部IO多路復(fù)用器的IO地址行導(dǎo)致程序存儲(chǔ)器的數(shù)據(jù)寬度。MC14500使用術(shù)語“內(nèi)存字”來表示從程序內(nèi)存中輸出的數(shù)據(jù)。本文檔使用術(shù)語“command”作為“memory word”的同義詞。因此,命令由兩部分組成:指令和IO地址。 由于IO地址在MC14500的外部,因此不同實(shí)現(xiàn)之間的命令可能不同。此外,命令中4個(gè)指令位的位置也取決于設(shè)計(jì)。指令位可能占用命令中的高位或低位。 MC14500不包含從程序存儲(chǔ)器中尋址要處理的命令的程序計(jì)數(shù)器。因此,MC14500設(shè)計(jì)的程序計(jì)數(shù)器位數(shù)可能不同。
程序內(nèi)存或命令的寬度是指令的4位加上IOaddress行數(shù)。小型MC14500設(shè)計(jì)將使用8位寬的程序存儲(chǔ)器,能夠選擇多達(dá)16個(gè)IO地址。由于這并不多,許多MC14500設(shè)計(jì)使用12位寬的程序存儲(chǔ)器,可以選擇多達(dá)256個(gè)IO地址。12位寬的程序存儲(chǔ)器使用過去存在的4位寬的ROM設(shè)備。其他MC14500設(shè)計(jì)使用8位寬的程序存儲(chǔ)器,但是每個(gè)MC14500命令有兩個(gè)字節(jié)被讀取,因此形成了一個(gè)16位寬的命令,能夠?qū)ぶ范噙_(dá)4096個(gè)IO地址線,用于物理IO、單位寬RAM和定時(shí)器硬件。在MC14500設(shè)計(jì)中,從程序存儲(chǔ)器中讀取兩次會(huì)產(chǎn)生另一種變化,從程序中讀取的第一個(gè)字節(jié)可能在一種設(shè)計(jì)中是低字節(jié),但在另一種設(shè)計(jì)中是命令的高字節(jié)。
利用MC14500搭建的外圍系統(tǒng):
MC14500模擬器
MC14500模擬器使用web技術(shù)和javascript來獨(dú)立于平臺(tái),并且在將來也可以使用。這種實(shí)現(xiàn)的一個(gè)缺點(diǎn)是javascript模擬器不能訪問用戶的文件系統(tǒng)或硬件。
模擬器在支持svg的瀏覽器上運(yùn)行。
按下“步進(jìn)”按鈕意味著下降的時(shí)鐘邊緣,因此MC14500加載指令和輸入數(shù)據(jù)。 釋放“步進(jìn)”按鈕意味著上升的時(shí)鐘邊緣,因此MC14500寫入數(shù)據(jù)。程序計(jì)數(shù)器增加。在程序存儲(chǔ)器訪問時(shí)間之后,下一條指令和IO地址出現(xiàn)在MC14500和輸出、輸入或RAM上。 詳細(xì)的介紹就不過多贅述,網(wǎng)上還有利用Python進(jìn)行匯編程序和反匯編程序的介紹。
FPGA實(shí)現(xiàn)
利用MC14500搭建的CPU 從上面的介紹可以看出MC14500和FPGA有很多相似的地方,接下來就用FPGA實(shí)現(xiàn)一下這款單比特CPU。
module mc14500b( input clk, input rst, input [3:0] i_inst, input i_data, output reg write = 0, output reg jmp = 0 , output reg rtn = 0, output reg flag0 = 0, output reg flagf = 0, output reg o_rr = 0, output reg o_data = 0 ); reg ien = 0, oen = 0; reg skip = 0; always @(negedge clk or posedge rst) begin
// Reset any flags from last clock. jmp 《= 0; rtn 《= 0; flag0 《= 0; flagf 《= 0; write 《= 0;
// FIX this it‘s not right technically. if (rst) begin
// reset behavior. reset internal flags and ignore clock. ien 《= 0; oen 《= 0; o_rr 《= 0; skip 《= 0; end else begin if (~skip) begin // skip case(i_inst) 4’b0000 : flag0 《= 1;
// NOPO 4‘b0001 : o_rr 《= ien & i_data; // LD 4’b0010 : o_rr 《= ien & ~i_data; // LDC 4‘b0011 : o_rr 《= ien & (i_data & o_rr); // AND 4’b0100 : o_rr 《= ien & (~i_data & o_rr); // NAND 4‘b0101 : o_rr 《= ien & (i_data | o_rr);
// OR 4’b0110 : o_rr 《= ien & (~i_data | o_rr); // NOR 4‘b0111 : o_rr 《= ien & (o_rr == i_data);
// XNOR 4’b1000 : begin // STO // DATA -》 RR, WRITE -》 1 for a clock (if oen is allowed)。 o_data 《= oen & o_rr; write 《= oen; end 4‘b1001 : begin // STOC
// DATA -》 ~RR, WRITE -》 1 for a clock. o_data 《= ~o_rr; write 《= oen; end 4’b1010 : ien 《= i_data; 4‘b1011 : oen 《= i_data; 4’b1100 : jmp 《= 1; 4‘b1101 : begin
// RTN rtn 《= 1; skip 《= 1; end 4’b1110 : skip 《= ~o_rr; 4‘b1111 : flagf 《= 1; endcase end else begin
// reset skip flag after clocking with skip once. skip 《= 0; end end end // neg edge// always @(posedge clk) begin// write 《= 0;// endendmodule
原文標(biāo)題:你見過1-bit CPU嗎?
文章出處:【微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
FPGA
+關(guān)注
關(guān)注
1625文章
21620瀏覽量
601238 -
cpu
+關(guān)注
關(guān)注
68文章
10804瀏覽量
210829
原文標(biāo)題:你見過1-bit CPU嗎?
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論