美文网首页初见
logisim|计算机组成结课设计|16bit-CPU|调试

logisim|计算机组成结课设计|16bit-CPU|调试

作者: 讲故事的万物 | 来源:发表于2020-06-19 10:44 被阅读0次

本文从基础使用开始,说明16bit-CPU中各个参数的意义,同时举几个例子。

基础使用

.s文件对应massem.pl,basic_microcode文件对应uassem.pl,两个分别编译出一个.ram文件与两个.rom文件。

ram文件编译 rom文件编译

然后分别向RAM和ROM中Load image以上三个文件,就能够将你的程序写入这个CPU开始执行了。

接下来来讲ram和rom的编译语言规则,我们不会讲如何修改两个pl文件,只讲关于.s文件和basic_microcode文件的文字规则,以及整个线路的各引脚作用。

各个元件

ram相关

RAM各位控制

计算机中有很多种代码:

  • add、mul等属于计算型0~15 dst型
add r1, r2, r3  #r1=r2+r3
mul r1, r2, r3  #r1=r2*r3
sub r1, r2, r3  #r1=r2-r3
  • jnez属于单数字型 sti型
jnez    r1, aa #跳转到aa行运行
----------------------------------------
40: addrsel=pc  imload=1
    aluop=sub  op2sel=0
这段是jnez 的底层代码,

addrsel=pc对应了'addrsel=pc' =>     0 << 7
意思是第0左移七位,即第八位为0.
addrsel对应的第七第八位是PC的多路复用器的选择位,对应关系如下
00:pc
01:immed存储的是jnez第二个参数
10:alout当前ALU计算输出
11:sreg当前reg的steg输出位

imload=1对应了

  • sw、li单数字赋值 di型
li r5,x  
#给寄存器reg中r5位存x
sw  r0, 256  
#给内存RAM中第256字节存r0的数值,十进制的256是十六进制的100

以上不是用语不是很贴合,但是尽可能做到好理解。


如何在ram内构造循环?

ram中任意一行开头使用以下方式可以存储一个值在x中,x的值为x所在行。

~~~~
x:~~~~
jnez r1,x
#这段的意思是如果r1!=0,则返回x所在行,x可是设置为一个数字,可也以和这段一样实现一个for循环

ram常用语句

除了各种语句和其匹配 参数的调用,还有以下这些:

  • a:
    在每行开头使用可以将a=此行行数,之后可以用a作为一个数字参数使用,编译自动识别数字。
  • goto xxx:
    到xxx语句,运行完本行就会进入这条语句,编译出来的decisionROM为xxx语句在controlROM中所在行。
  • if z then pcincr else jump
    z代表了ALU的z参数,pcincr和jump都是语句,如果z就是ALU输出为zero,运行pcincr,else,运行jump。

rom

在rom里创建新的语句首先要理解rom控制器每一个输出控制位置对应的作用。

如何在rom中制作循环?

rom文件编译

我们先来看这段编译,我们可以看出来,代码分成了两个部分,一部分是后面的语句,一部分是前面的数字,那么前面的数字代表了什么呢?

后面的语句对应了前面的两组数字,两组数字前后分别对应了控制cpu线路的control ROM和控制control ROM的decision ROM。

举个例子,jnez(40:)的代码。

第一句:前侧数字为00004000 8282,其中,00004000对应了二进制的第十五位为1其他为0,控制了imload;而8282对应了decision输出两条数字82/82,这个数字通过cond位选择z\n\c中的一个来选择是第一条还是第二条。
(关于znc在ALU段说明)(此时cond位:17、18位=00)

控制imload作用为让immed读入RAM程序中的数字,这里.s文件中在0006行用loop:存储了一个数loop=0006,在编译.s到.ram中会把loop变成常数0006来使用。(上文我的程序有做修改,源文件中loop在0006行)

第二句:进入82行,前侧数字位00000021 8687,其中,00000021对应了aluop(0001)和op2sel(10),控制ALU用减法,op2sel控制ALU低位输入为0000;而86/87分别对应下一条指令。

下面是jnez循环的重点,在RAM接收jnez前7个控制字的时候,后面数字字第二组为jnez语法的第一个参数,ALU高位输入是这个参数,即r1。


原程序r1为参数
r2为参数

以上,此时ALU计算得r1-0000,计算结果输出在aluout,但是ALU中加配了z参数,所以还有一个输出是z,当输出为zero时,z=1。也就是r1=0,z=1,其他时候z=0.
所以当r1!=0,下一条指令从86行读取,r1==0,下一条指令从87行读取。


r1!=0 r1=00

第三句:进入86/87行,前侧数字位00000800 0000/00000a00 0000。对应下一条指令都是0000,说明要进行下一次轮回了。
00000800,控制pcload=1,即pc+1,进入下一条RAM中的语句。
00000a00,控制pcsle=01,pcload=1,pcsle选择下一条语句为immed中存储的行数,第一局中我们将loop作为行数输入进了immed中,此时又进入到了loop所在行,完成了循环。

以上就是jnez语句的解析,现在我们了解了jnez语句在电路和ROM中的运行了,总结出以下几点:

  • immed可以作为我们while循环的开头存点
    当然,如果要做老师说的第二层,我们就要封装到ROM中,所以简单的loop:加jnez语句的应用是不足够的。作为一个语句,所以我们不仅要会使用,我们要理解底层,然后才能做出jnez级别的语句。
  • z可以作为判断我们while循环的跳出判断
  • 通过z改变decisionROM中的下一位选择,就可以通过线路中(reg或者ram)的数据来让计算机判断接下来进行的步骤。

相关文章

  • logisim|计算机组成结课设计|16bit-CPU|调试

    本文从基础使用开始,说明16bit-CPU中各个参数的意义,同时举几个例子。 基础使用 .s文件对应massem....

  • logisim|计算机组成结课设计|16bit-CPU|完成

    阶乘的制作 本次来制作计算机组成原理的第二层阶段设计,本篇前置知识在调试篇。 我们需要使用底层的代码,通过控制开关...

  • 「组成原理」logisim界面介绍

    logisim,计算机组成原理课用到的工具,今天专门拿出来学习一下做下笔记。 logisim是什么? 个人对log...

  • 计算机科学与技术专业课程

    大一 C语言程序设计 计算机导论 计算机组成原理I 大二 数据结构 计算机组成原理II 面向对象程序设计 操作系统...

  • 课程介绍

    《计算机组成与设计》是计算机学科最重要的专业基础课程,也是四门计算机考研专业课之一,在计算机学科的各门课程中起着...

  • 写一下即将到来的时间线

    结课 第12周,数理方程,web,数据库,还有16天 第14周,计算机组成原理,实变函数,微机原理,还有30天 第...

  • 2019-06-17

    今天整理了计算机组成原理的专业课笔记

  • 计算机组成与设计

    @清华大学出版社 第七章 存储系统

  • 计算机组成与设计

    第二章 计算机指令 MIPS汇编语言 在书写指令时,尽管可以使用序号0到31标示相应的寄存器,但MIPS仍然约定:...

  • 一道题识别不靠谱的程序员

    这是一道关于符号调试器实现原理的讨论题。目的不是考察调试经验或者调试器设计,只是想借助这个话题来考察候选人的计算机...

网友评论

    本文标题:logisim|计算机组成结课设计|16bit-CPU|调试

    本文链接:https://www.haomeiwen.com/subject/zksjxktx.html