0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

自制CPU(四)程序編寫

學(xué)FPGA,慢慢來 ? 2018-07-16 09:20 ? 次閱讀

在我們設(shè)計出來前邊三種CPU之后,我們來進行程序的編寫。

所謂程序的編寫,就是;利用我們寫好的CPU,根據(jù)我們可執(zhí)行的指令集,來編寫一段程序,可一直用我們的CPU來完成。

首先,我們在寫程序之前,確定你的CPU可以執(zhí)行l(wèi)oad,store,beq,jump,add幾種基礎(chǔ)指令,如果這幾個都沒有,那這個程序怕是也做不出來的。

在你希望實現(xiàn)的小系統(tǒng)中,一定有你的外圍電路,它是將你外部輸入的數(shù)據(jù)寫入外存/數(shù)據(jù)存儲器 中的,并將運算結(jié)果讀出并顯示或... 之后你的指令在開始時寄存器堆中可以預(yù)先有操作數(shù),也可以通過指令讀入。程序在開始前進行l(wèi)oad將數(shù)據(jù)從數(shù)據(jù)存儲器中讀入寄存器堆中,最后再從寄存器堆中用store寫會到數(shù)據(jù)寄存器中。在運算中有判斷時就使用beq來完成,直接跳轉(zhuǎn)一般都在beq跳轉(zhuǎn)到的位置進行有效操作完的下一條指令,為了實現(xiàn)如C語言中的if語句。

最終你的指令是寫成一個case語句中或者寫成一個.coe文件的,coe文件直接寫入數(shù)據(jù)存儲器中,

例如

32'd0 : instruction <= 32'b000001_00001_00100_0000000000000000;?? ??? ??? ?//1 1 4 000 lw
32'd1 : instruction <= 32'b000000_00000_00001_00010_00000_000000;?? ??? ?//0 0 1 2 0 0 add
32'd2 : instruction <= 32'b000001_00010_00101_0000000000000000;?? ??? ??? ?//1 2 5 000 lw
32'd3 : instruction <= 32'b000000_00000_00010_00011_00000_000000;?? ??? ?//0 0 2 3 0 0 add
32'd4 : instruction <= 32'b000001_00011_00110_0000000000000000;?? ??? ??? ?//1 3 6 000 lw
32'd5 : instruction <= 32'b000000_00011_00010_01101_00000_000001;?? ??? ?//0 3 2 13 0 13 sub

32'd6 : instruction <= 32'b000101_00110_01101_0000000000000001;?? ??? ??? ?//5 6 13 6 beq
32'd7 : instruction <= 32'b000111_00000000000000000000000000;?? ??? ??? ??? ?//7 0 j ?
32'd8 : instruction <= 32'b000101_00110_01101_0000000000000110;?? ??? ??? ?//5 6 13 6 beq
32'd9 : instruction <= 32'b000000_00000_00111_01000_00000_000000;?? ??? ?//0 0 7 8 0 0 add
32'd10 : instruction <= 32'b000000_00000_01000_01001_00000_000000;?? ??? ?//0 0 8 9 0 0 add
32'd11 : instruction <= 32'b000000_00000_01001_01010_00000_000000;?? ??? ?//0 0 9 10 0 0 add
32'd12 : instruction <= 32'b000000_00000_01010_01011_00000_000000;?? ??? ?//0 0 10 11 0 0 add

32'd13 : instruction <= 32'b000101_00110_01101_0000000000000110;?? ??? ??? ?//5 6 13 6 beq
32'd14 : instruction <= 32'b000101_00110_00010_0000000000000111;?? ??? ??? ?//5 6 2 7 beq
32'd15 : instruction <= 32'b000101_00110_00011_0000000000001000;?? ??? ??? ?//5 6 3 8 beq
32'd16 : instruction <= 32'b000101_00110_00111_0000000000001001;?? ??? ??? ?//5 6 7 9 beq
32'd17 : instruction <= 32'b000101_00110_01000_0000000000001010;?? ??? ??? ?//5 6 8 10 beq
32'd18 : instruction <= 32'b000101_00110_01001_0000000000001010;?? ??? ??? ?//5 6 9 10 beq
32'd19 : instruction <= 32'b000101_00110_01010_0000000000001010;?? ??? ??? ?//5 6 10 10 beq

32'd20 : instruction <= 32'b000000_00100_00101_01100_00000_000000;?? ??? ?//0 4 5 12 0 0 add
32'd21 : instruction <= 32'b000111_00000000000000000000011110;????????? //7 30 j
32'd22 : instruction <= 32'b000000_00100_00101_01100_00000_000001;?? ??? ?//0 4 5 12 0 1 sub
32'd23 : instruction <= 32'b000111_00000000000000000000011110;??? x????? //7 30 j
32'd24 : instruction <= 32'b000000_00100_00101_01100_00000_000010;?? ??? ?//0 4 5 12 0 2 and
32'd25 : instruction <= 32'b000111_00000000000000000000011110;????????? //7 30 j
32'd26 : instruction <= 32'b000000_00100_00101_01100_00000_000011;?? ??? ?//0 4 5 12 0 3 or
32'd27 : instruction <= 32'b000111_00000000000000000000011110;????????? //7 30 j
32'd28 : instruction <= 32'b000000_00100_00101_01100_00000_000100;?? ??? ?//0 4 5 12 0 4 nor
32'd29 : instruction <= 32'b000111_00000000000000000000011110;????????? //7 30 j

32'd30 : instruction <= 32'b000010_00000_01100_0000000000000000;?? ??? ??? ?//2 0 13 000 sw

32'd31 : instruction <= 32'b000111_00000000000000000000000000;?? ??? ??? ??? ?//7 0 j? */

或者.coe文件

memory_initialization_radix = 2 ;
memory_initialization_vector =
10001000001000100000000000000010,
00010100001000100000000000000010,
00001000000000000000000000000000,
10001000001000110000000000000000,
00010100011000100000000000000010,
10101100001001000000000100000010,
00001000000000000000000000000000,
10101100001001010000000100000010,

00001000000000000000000000000000,

最終燒錄驗證就實現(xiàn)了用CPU跑一個小程序了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21539

    瀏覽量

    600501
收藏 人收藏

    評論

    相關(guān)推薦

    cpu自制入門 原碼

    CPU自制入門 配套原碼
    發(fā)表于 11-03 09:39

    編寫無錯C程序秘訣

    本教程是關(guān)于C程序編寫技巧,有利于提高對C程序的掌握程度。
    發(fā)表于 11-09 18:33 ?0次下載

    程序編寫范例

    程序編寫范例,各位看官歡迎評論。。。。有什么好的建議MMMM
    發(fā)表于 12-10 16:43 ?19次下載

    自制STM32開發(fā)板程序

    自制STM32開發(fā)板程序,有需要的朋可以下來看看。
    發(fā)表于 05-20 16:50 ?35次下載

    VFP9.0編寫程序

    數(shù)據(jù)庫編寫程序,VFP9.0編寫程序,中文版利用數(shù)據(jù)庫知識編寫可以運行程序
    發(fā)表于 06-21 16:42 ?0次下載

    VB上位機程序編寫

    VB上位機程序編寫
    發(fā)表于 02-07 16:15 ?62次下載

    單片機程序如何編寫

    設(shè)計編寫單片機程序是一個漸進的過程不可一蹴而就,畢竟單片機程序是與硬件有密切關(guān)系的,我們一般稱為單片機程序叫底層硬件驅(qū)動程序。
    的頭像 發(fā)表于 02-12 14:38 ?3.8w次閱讀
    單片機<b class='flag-5'>程序</b>如何<b class='flag-5'>編寫</b>

    編寫PLC程序的步驟是怎么樣的

    在了解了程序結(jié)構(gòu)和編程方法的基礎(chǔ)上,就要實際地編寫PLC程序了。編寫PLC 程序編寫其他計算機
    發(fā)表于 09-11 16:12 ?22次下載
    <b class='flag-5'>編寫</b>PLC<b class='flag-5'>程序</b>的步驟是怎么樣的

    分享用Labview自制評分程序教程

    分享用Labview自制評分程序教程。
    發(fā)表于 04-11 15:02 ?0次下載

    Verilog程序編寫規(guī)范

    在實際工作中,許多公司對Verilog程序編寫規(guī)范都有要求。在公司內(nèi)部統(tǒng)一Verilog程序編寫規(guī)范不僅可以增強程序的可讀性、可移植性,而且
    的頭像 發(fā)表于 09-15 09:35 ?3827次閱讀

    如何用PID指令如何編寫PID程序

    PID程序除了可以用PID向?qū)ЫM態(tài)的方法編寫,還可以利用PID指令進行編寫,指示程序稍微繁瑣些,如果自己編寫程序可以選用向?qū)瓿?,但是如果調(diào)
    的頭像 發(fā)表于 02-13 14:37 ?5559次閱讀
    如何用PID指令如何<b class='flag-5'>編寫</b>PID<b class='flag-5'>程序</b>

    PLC對一鍵啟停不同方式的程序編寫

    ??對于剛?cè)腴T的PLC新手來說,在沒有理解PLC CPU的掃描工作原理時對于行內(nèi)偶爾提到的一鍵啟停程序編寫總會有一定的難度。今天和大家分享200系列PLC對一鍵啟停不同方式的程序
    發(fā)表于 04-18 11:42 ?786次閱讀

    PLC編寫程序編寫的是什么?

    對于PLC程序編寫,一個好的plc程序一般都具有程序的具有正確性、可靠性、方便性、簡潔性和可讀性就是很好的程序!
    的頭像 發(fā)表于 05-10 17:38 ?1660次閱讀
    PLC<b class='flag-5'>編寫程序</b><b class='flag-5'>編寫</b>的是什么?

    大神手工自制CPU的過程

    為了深入理解這個問題,大神耗時整整半年,“逐點”焊接,自制了一個CPU,杰作如下圖所示。
    的頭像 發(fā)表于 09-27 09:41 ?1222次閱讀
    大神手工<b class='flag-5'>自制</b><b class='flag-5'>CPU</b>的過程

    codeblocks怎么編寫程序

    Code::Blocks是一款免費、開源的集成開發(fā)環(huán)境(IDE),它提供了一個方便的平臺來編寫、調(diào)試和運行C、C++以及其他編程語言的程序。在本篇文章中,我們將詳細討論如何使用Code
    的頭像 發(fā)表于 11-26 10:28 ?1264次閱讀