Inhaltsverzeichnis
8.4.3 修改执行阶段的EX 模块
8.4.4 修改OpenMIPS模块
8.5 测试转移指令的实现效果
8.5.1 测试跳转指令
8.5.2 测试分支指令
Heim Datenbank MySQL-Tutorial 自己动手写CPU之第八阶段(4)转移指令实现过程2

自己动手写CPU之第八阶段(4)转移指令实现过程2

Jun 07, 2016 pm 03:20 PM
cpu 实现 Handschrift 指令 Eigen überweisen 过程 Bühne

将陆续上传本人写的新书《 自己动手写CPU 》,今天是第36篇,我尽量每周四篇 开展晒书评送书活动,在亚马逊、京东、当当三大图书网站上,发表《自己动手写CPU》书评的前十名读者,均可获赠《步步惊芯——软核 处理器 内部 设计 分析 》一书,大家踊跃参与吧

将陆续上传本人写的新书《自己动手写CPU》,今天是第36篇,我尽量每周四篇

开展晒书评送书活动,在亚马逊、京东、当当三大图书网站上,发表《自己动手写CPU》书评的前十名读者,均可获赠《步步惊芯——软核处理器内部设计分析》一书,大家踊跃参与吧!活动时间:2014-9-11至2014-10-20


8.4.3 修改执行阶段的EX 模块

      参考图8-6可知,EX模块需要增加一些接口,增加的接口描述如表8-4所示。

自己动手写CPU之第八阶段(4)转移指令实现过程2

      EX模块的代码主要修改如下,完整代码请参考本书附带光盘Code\Chapter8目录下的ex.v文件。

module ex(

  ......

  // 处于执行阶段的转移指令要保存的返回地址
  input wire[`RegBus]           link_address_i,

  // 当前执行阶段的指令是否位于延迟槽
  input wire                    is_in_delayslot_i,	
	
  ...... 
	
);
	
  ......

  always @ (*) begin

  ......
	 
    case ( alusel_i ) 
      `EXE_RES_LOGIC:		begin
        wdata_o <br>

<p>      如果alusel_o为EXE_RES_JUMP_BRANCH,那么就将返回地址link_address_i作为要写入目的寄存器的值赋给wdata_o。</p>
<p>      注意一点,此处并没有利用输入的信号is_in_delayslot_i,该信号表示当前处于执行阶段的指令是否是延迟槽指令,这个信号会在异常处理过程中使用到,本章暂时不需要。</p>
<h3 id="修改OpenMIPS模块">8.4.4 修改OpenMIPS模块</h3>
<p>      因为有一些模块添加了接口,所以需要修改顶层模块OpenMIPS,以将这些新增加的接口按照图8-6所示的关系连接起来。具体修改也很简单,不在书中列出,读者可以参考本书附带光盘Code\Chapter8目录下的openmips.v文件。</p>
<h2 id="测试转移指令的实现效果">8.5 测试转移指令的实现效果</h2>
<p>      本节将通过两个测试程序验证转移指令是否实现正确,这两个测试程序分别验证跳转指令、分支指令。</p>
<h3 id="测试跳转指令">8.5.1 测试跳转指令</h3>
<p>      测试代码如下,源文件是本书光盘Code\Chapter8\AsmTest\Test1目录下的inst_rom.S文件。</p>
<pre class="brush:php;toolbar:false">.org 0x0
.set noat
.set noreorder      # 添加这个伪操作,指示编译器不要对程序做出任何优化或是改动
.set nomacro        
.global _start
_start:
   ori  $1,$0,0x0001   # (1)$1 = 0x1                
   j    0x20           #  转移到0x20处
   ori  $1,$0,0x0002   # (2)$1 = 0x2,这是延迟槽指令
   ori  $1,$0,0x1111
   ori  $1,$0,0x1100

   .org 0x20
   ori  $1,$0,0x0003   # (3)$1 = 0x3               
   jal  0x40           #  转移到0x40处,同时设置$31为0x2c
   div  $zero,$31,$1   # (4)此时$31 = 0x2c, $1 = 0x3,所以得到除法结果
                       #     HI = 0x2, LO = 0xe,这是延迟槽指令

   ori  $1,$0,0x0005   # (6)$1 = 0x5
   ori  $1,$0,0x0006   # (7)$1 = 0x6
   j    0x60           #  转移到0x60处
   nop

   .org 0x40
   jalr $2,$31          #  此时$31为0x2c,所以转移到0x2c,同时设置$2为0x48
   or   $1,$2,$0        # (5)$1 = 0x48,这是延迟槽指令

   ori  $1,$0,0x0009    # (10)$1 = 0x9
   ori  $1,$0,0x000a    # (11)$1 = 0xa
   j 0x80               #  转移到0x80处
   nop

   .org 0x60
   ori  $1,$0,0x0007    # (8)$1 = 0x7 
   jr   $2              #  此时$2为0x48,所以转移到0x48处
   ori  $1,$0,0x0008    # (9)$1 = 0x8,这是延迟槽指令
   ori  $1,$0,0x1111
   ori  $1,$0,0x1100

   .org 0x80
   nop
    
_loop:
   j _loop
   nop
Nach dem Login kopieren

自己动手写CPU之第八阶段(4)转移指令实现过程2

8.5.2 测试分支指令

      测试代码如下,源文件是本书光盘Code\Chapter8\AsmTest\Test2目录下的inst_rom.S文件。

.org 0x0
   .set noat
   .set noreorder
   .set nomacro
   .global _start
_start:
   ori  $3,$0,0x8000
   sll  $3,16               # 设置$3 = 0x80000000
   ori  $1,$0,0x0001        #(1)$1 = 0x1                
   b    s1                  # 转移到s1处
   ori  $1,$0,0x0002        #(2)$1 = 0x2,这是延迟槽指令
1:
   ori  $1,$0,0x1111
   ori  $1,$0,0x1100

   .org 0x20
s1:
   ori  $1,$0,0x0003        #(3)$1 = 0x3
   bal  s2                  # 转移到s2处,同时设置$31为0x2c
   div  $zero,$31,$1        #(4)此时$31 = 0x2c, $1 = 0x3,所以除法结果为
                            #    HI = 0x2, LO = 0xe,这是延迟槽指令
   ori  $1,$0,0x1100
   ori  $1,$0,0x1111
   bne  $1,$0,s3
   nop
   ori  $1,$0,0x1100
   ori  $1,$0,0x1111

   .org 0x50   
s2:
   ori  $1,$0,0x0004      #(5)$1 = 0x4
   beq  $3,$3,s3          # $3等于$3,所以会发生转移,目的地址是s3
   or   $1,$31,$0         #(6)$1 = 0x2c,这是延迟槽指令
   ori  $1,$0,0x1111
   ori  $1,$0,0x1100
2:
   ori  $1,$0,0x0007      #(9)$1 = 0x7
   ori  $1,$0,0x0008      #(10)$1 = 0x8
   bgtz $1,s4             # 此时$1为0x8,大于0,所以转移至标号s4处
   ori  $1,$0,0x0009      #(11)$1 = 0x9,这是延迟槽指令
   ori  $1,$0,0x1111
   ori  $1,$0,0x1100

   .org 0x80
s3:
   ori  $1,$0,0x0005      #(7)$1 = 0x5            
   bgez $1,2b             # 此时$1为0x5,大于0,所以转移至前面的标号2处
   ori  $1,$0,0x0006      #(8)$1 = 0x6,这是延迟槽指令
   ori  $1,$0,0x1111
   ori  $1,$0,0x1100

   .org 0x100
s4:
   ori  $1,$0,0x000a      #(12)$1 = 0xa              
   bgezal $3,s3           # 此时$3为0x80000000,小于0,所以不发生转移
   or   $1,$0,$31         #(13)$1 = 0x10c          
   ori  $1,$0,0x000b      #(14)$1 = 0xb
   ori  $1,$0,0x000c      #(15)$1 = 0xc
   ori  $1,$0,0x000d      #(16)$1 = 0xd
   ori  $1,$0,0x000e      #(17)$1 = 0xe
   bltz $3,s5             # 此时$3为0x80000000,小于0,所以发生转移,转移至s5处
   ori  $1,$0,0x000f      #(18)$1 = 0xf,这是延迟槽指令
   ori  $1,$0,0x1100


   .org 0x130
s5:
   ori  $1,$0,0x0010      #(19)$1 = 0x10
   blez $1,2b             # 此时$1为0x10,大于0,所以不发生转移
   ori  $1,$0,0x0011      #(20)$1 = 0x11
   ori  $1,$0,0x0012      #(21)$1 = 0x12
   ori  $1,$0,0x0013      #(22)$1 = 0x13
   bltzal $3,s6           # 此时$3为0x80000000,小于0,所以发生转移,转移到s6处
   or   $1,$0,$31         #(23)$1 = 0x14c,这是延迟槽指令
   ori  $1,$0,0x1100


   .org 0x160
s6:
   ori $1,$0,0x0014       #(24)$1 = 0x14
   nop
   
   
    
_loop:
   j _loop
   nop
Nach dem Login kopieren

      上面的测试程序使用到了所有的分支指令,程序的注释给出了寄存器$1的变化情况,及指令执行顺序,注意寄存器$1的变化是按照注释中的序号顺序进行的。ModelSim仿真结果如图8-9所示,观察$1的变化可知OpenMIPS正确实现了分支指令。

自己动手写CPU之第八阶段(4)转移指令实现过程2


至此,转移指令也实现完毕了,下一步将实现加载存储指令,敬请关注!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie bekomme ich Gegenstände mithilfe von Befehlen in Terraria? -Wie sammle ich Gegenstände in Terraria? Wie bekomme ich Gegenstände mithilfe von Befehlen in Terraria? -Wie sammle ich Gegenstände in Terraria? Mar 19, 2024 am 08:13 AM

Wie bekomme ich Gegenstände mithilfe von Befehlen in Terraria? 1. Was ist der Befehl zum Erteilen von Gegenständen in Terraria? Im Spiel Terraria ist das Erteilen von Befehlen an Gegenstände eine sehr praktische Funktion. Durch diesen Befehl können Spieler die benötigten Gegenstände direkt erhalten, ohne gegen Monster kämpfen oder sich an einen bestimmten Ort teleportieren zu müssen. Dies kann erheblich Zeit sparen, die Effizienz des Spiels verbessern und es den Spielern ermöglichen, sich mehr auf die Erkundung und den Aufbau der Welt zu konzentrieren. Insgesamt macht diese Funktion das Spielerlebnis flüssiger und angenehmer. 2. So verwenden Sie Terraria, um Objektbefehle zu erteilen 1. Öffnen Sie das Spiel und rufen Sie die Spieloberfläche auf. 2. Drücken Sie die „Enter“-Taste auf der Tastatur, um das Chat-Fenster zu öffnen. 3. Geben Sie im Chatfenster das Befehlsformat ein: „/give[Spielername][Artikel-ID][Artikelmenge]“.

Der Betriebsprozess des WIN10-Diensthosts belegt zu viel CPU Der Betriebsprozess des WIN10-Diensthosts belegt zu viel CPU Mar 27, 2024 pm 02:41 PM

1. Zuerst klicken wir mit der rechten Maustaste auf die leere Stelle der Taskleiste und wählen die Option [Task-Manager] oder klicken mit der rechten Maustaste auf das Startlogo und wählen dann die Option [Task-Manager]. 2. In der geöffneten Task-Manager-Oberfläche klicken wir ganz rechts auf die Registerkarte [Dienste]. 3. Klicken Sie in der geöffneten Registerkarte [Dienst] unten auf die Option [Dienst öffnen]. 4. Klicken Sie im sich öffnenden Fenster [Dienste] mit der rechten Maustaste auf den Dienst [InternetConnectionSharing(ICS)] und wählen Sie dann die Option [Eigenschaften]. 5. Ändern Sie im sich öffnenden Eigenschaftenfenster die Option „Öffnen mit“ in „Deaktiviert“, klicken Sie auf „Übernehmen“ und dann auf „OK“. 6. Klicken Sie auf das Startlogo, dann auf die Schaltfläche zum Herunterfahren, wählen Sie [Neustart] und schließen Sie den Neustart des Computers ab.

144-Kerne, 3D-gestapelter SRAM: Fujitsu stellt den Rechenzentrumsprozessor MONAKA der nächsten Generation vor 144-Kerne, 3D-gestapelter SRAM: Fujitsu stellt den Rechenzentrumsprozessor MONAKA der nächsten Generation vor Jul 29, 2024 am 11:40 AM

Laut Nachrichten dieser Website vom 28. Juli berichteten die ausländischen Medien TechRader, dass Fujitsu den FUJITSU-MONAKA-Prozessor (im Folgenden als MONAKA bezeichnet) detailliert vorgestellt habe, dessen Auslieferung im Jahr 2027 geplant sei. MONAKACPU basiert auf der „Cloud Native 3D Many-Core“-Architektur und übernimmt den Arm-Befehlssatz. Es ist auf die Bereiche Rechenzentrum, Edge und Telekommunikation ausgerichtet. Es ist für KI-Computing geeignet und kann RAS1 auf Mainframe-Ebene realisieren. Fujitsu sagte, dass MONAKA einen Sprung in puncto Energieeffizienz und Leistung machen wird: Dank Technologien wie der Ultra-Low-Voltage-Technologie (ULV) kann die CPU im Jahr 2027 die doppelte Energieeffizienz von Konkurrenzprodukten erreichen, und für die Kühlung ist keine Wasserkühlung erforderlich Darüber hinaus kann die Anwendungsleistung des Prozessors doppelt so hoch sein wie die Ihres Konkurrenten. In puncto Anleitung ist MONAKA mit Vector ausgestattet

Leak enthüllt wichtige Spezifikationen von Intel Arrow Lake-U, -H, -HX und -S Leak enthüllt wichtige Spezifikationen von Intel Arrow Lake-U, -H, -HX und -S Jun 15, 2024 pm 09:49 PM

Intel Arrow Lake wird voraussichtlich auf der gleichen Prozessorarchitektur wie Lunar Lake basieren, was bedeutet, dass Intels brandneue Lion Cove-Leistungskerne mit den wirtschaftlichen Skymont-Effizienzkernen kombiniert werden. Während Lunar Lake nur als Ava verfügbar ist

AM4 will nicht sterben, laut Nachrichten wird AMD Ryzen 9 5900XT/7 5800XT auf den Markt bringen: getaktet mit bis zu 4,8 GHz AM4 will nicht sterben, laut Nachrichten wird AMD Ryzen 9 5900XT/7 5800XT auf den Markt bringen: getaktet mit bis zu 4,8 GHz Jun 05, 2024 pm 09:43 PM

Laut Nachrichten dieser Website vom 1. Juni hat die Quelle @CodeCommando heute getwittert und einige Screenshots der bevorstehenden Präsentationsdokumente von AMD auf der Computex2024-Veranstaltung geteilt. Der Inhalt des Tweets war „AM4 wird niemals sterben“, und das dazugehörige Bild zeigte zwei neue Prozessoren der Ryzen5000XT-Serie. Den Screenshots zufolge sind die folgenden zwei Produkte zu sehen: Ryzen95900XTR Ryzen95900XT ist relativ hochpreisig positioniert. Dabei handelt es sich um einen neuen 16-Kern-AM4-Prozessor mit einer Taktrate, die etwas niedriger ist als die von AMDs Ryzen95950X. Ryzen75800XT Es handelt sich um eine schnellere Variante des bestehenden Ryzen75800X-Prozessors. Beide Prozessoren sind mit bis zu 4,8 G getaktet

Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Mar 24, 2024 am 11:27 AM

Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Mit dem Aufkommen der sozialen Medien ist WeChat zu einem unverzichtbaren Kommunikationsmittel im täglichen Leben der Menschen geworden. Viele Menschen können jedoch auf ein Problem stoßen: Sie können sich gleichzeitig auf demselben Mobiltelefon bei mehreren WeChat-Konten anmelden. Für Huawei-Mobiltelefonbenutzer ist es nicht schwierig, eine doppelte WeChat-Anmeldung zu erreichen. In diesem Artikel wird erläutert, wie eine doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen erreicht wird. Erstens bietet das EMUI-System, das mit Huawei-Mobiltelefonen geliefert wird, eine sehr praktische Funktion – das doppelte Öffnen von Anwendungen. Durch die doppelte Öffnungsfunktion der Anwendung können Benutzer gleichzeitig

Die perfekte Lösung für das Problem der hohen CPU-Auslastung im Chrome-Browser Die perfekte Lösung für das Problem der hohen CPU-Auslastung im Chrome-Browser Mar 14, 2024 pm 12:25 PM

Wenn der Computer läuft, stellen einige Benutzer fest, dass Google Chrome im Task-Manager extrem viel CPU beansprucht. Wenn die Verarbeitung nicht rechtzeitig erfolgt, bleibt der Computer zunehmend hängen oder friert sogar ein. Wie geht man also mit der hohen CPU-Auslastung des Chrome-Browsers um? Schauen wir uns dieses Thema gemeinsam an. Probleme mit hoher CPU-Auslastung in Google Chrome sind normalerweise darauf zurückzuführen, dass „SoftwareReporterTool“ im Task-Manager nicht ordnungsgemäß ausgeführt wird. Bei diesem Tool handelt es sich eigentlich um ein Chrome-Browser-Reinigungstool, mit dem unnötige oder schädliche Erweiterungen, Anwendungen oder Homepage-Hijacker usw. entfernt werden. Bei der Installation von Chrome wird auch Software_reporter_tool.exe auf SwR heruntergeladen

2024 neueste CPU-Leiterdiagrammfreigabe (detaillierte High-Definition) 2024 neueste CPU-Leiterdiagrammfreigabe (detaillierte High-Definition) Mar 13, 2024 pm 08:19 PM

Für spielbegeisterte Benutzer steht die CPU-Leistung im Mittelpunkt der Computerkonfiguration, insbesondere bei LOL und CS:GO. Es ist genauer und objektiver, sich direkt mit dem Single-Core zu befassen Die Leistung einiger umfangreicher 3D-Spiele hängt hauptsächlich von der Planung der Grafikkarte und der CPU ab. Welche CPU hat also die bessere Leistung? Dieser Artikel stellt Ihnen die Himmelskarte vor. Die neueste hochauflösende Vollversion des CPU-Kontaktplans

See all articles