版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址

  http://www.cnblogs.com/Colin-Cai/p/8254096.html 

  作者:窗户

  QQ:6679072

  E-mail:6679072@qq.com

  前几天写了一篇《如何设计一个电子计算器》,一个朋友看了之后说实在太low,好吧,依照他的意思,那我就采用文中FPGA设计的方式,然后自己从指令集设计cpu设计汇编器设计汇编程序设计一路设计过去,再多写个几篇水文,组一个系列,取名就叫《深入设计电子计算器》。基本的计算器原理方面,还是先看一下《如何设计一个电子计算器》

    设计的第一步,是设计CPU的指令集,我这里一切从零开始设计。以前想在chinaunix召集人设计一个32位处理器来学习学习,并移植gcc或者llvm来编译C语言,当时考虑做一个RISC,采用三条流水线,最终移植编译器有人而一起设计CPU没人。当然,本系列只是一个抛砖引玉,我并不打算用很深的原理来设计这个CPU,那会花费很多的时间与精力,而只是让这个CPU可以运行起来而已。

  此CPU为16位,CPU核中有8个通用寄存器,为r0~r7,都为16位寄存器。指令存储和数据存储分开,采用哈佛结构,两套总线。

  有两个中断信号,对于我这个演示来说应该足够了。中断信号外面接一个中断控制器,接入两个中断源。这两个中断源一个接定时器,另外一个直接拖出去给外部用。而中断控制器和定时器都挂在数据总线上,以便CPU来设置。

  整个模块架构如下:

  设置以下指令:(rn、rm这里,n、m为寄存器数字编号,i为立即数,但不同指令范围有区别,=>是赋值,[r7]在这里代表r7地址的数据RAM)

  赋值指令:

  mov rn, rm  rm=>rn

  movi rn, i   i=>rn  此处i为立即数,范围0~65535

  movib rn,i    i=>rn  此处i为立即数,范围0~255

  movtr rn   rn=>[r7]

  movfr rn   [r7]=>rn

  算术指令:

  add rn, rm  rn+rm=>rn

  sub rn,rm  rn-rm=>rn

  addi rn,i    rn+i=>rn

  subi rn,i   rn-i=>rn

  mul      r0Xr1=>r2:r3

  umul    r0Xr1=>r2:r3

  div     r2:r3/r0=>r1,r4

  udiv     r2:r3/r0=>r1,r4

  逻辑指令:

  and rn, rm  rn&rm=>rn

  or rn,rm      rn|rm=>rn

  xor rn, rm    rn^rm=>rn

  not rn     ~rn=>rn

  sl rn,i     rn<<i=>rn

  sr rn,i    rn>>i=>rn

  跳转指令:

  bz i    如果上一条指令出现了0就跳转到当前指令地址+i    

  bb rn,i,im  如果寄存器rn的第i位为1就跳转到当前指令地址+i

  b i    无条件跳转到i地址   

  call i   把下一条指令地址压栈,r0~r7压栈,并跳转到i地址 

  ret    把之前call压栈的r0~r7恢复,并回到call压栈的执行地址    

  reti    当中断发生的时候,会把当前执行地址,r0~r7压栈,reti会把这些寄存器弹出,并回到之前执行地址,并通知中断控制器

  

  这些指令对于CPU基本是完备了。

  以上指令集还有点问题,我也还没有设计准确的opcode,可能会被修改,但我尽我自己完成这一系列,本篇是这个系列的第一篇。尽管偷工减料版也可能会花去我相当的时间,但我想对于来看的网友多少有那么一点点帮助吧,那就可以了,希望支持。 

深入设计电子计算器(一)——CPU指令集设计的更多相关文章

  1. 深入设计电子计算器(一)——CPU框架及指令集设计

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/8278418.html 作者:窗户 Q ...

  2. CPU指令集设计RISC和CISC

    CPU指令集 硬件实现具有速度快,成本高,灵活性差,软件实现与之相反.因此出现频率高的基本功能首选硬件实现.指令集的不同反映了设计原理.制造技术和系统类别. RISC 精简指令集计算机(Reduced ...

  3. CPU指令的流水线运行

    指令集是CPU体系架构的重要组成部分.C语言的语法是对解决现实问题的运算和流程的方法的高度概况和抽象,其主要为算术.逻辑运算和分支控制,而指令集就是对这些抽象的详细支持,汇编仅仅只是是为了让开发者更好 ...

  4. 四十年前的 6502 CPU 指令翻译成 JS 代码会是怎样

    去年折腾的一个东西,之前 blog 里也写过,不过那时边琢磨边写,所以比较杂乱,现在简单完整地讲解一下. 前言 当时看到一本虚拟机相关的书,正好又在想 JS 混淆相关的事,无意中冒出个问题:能不能把某 ...

  5. 一文彻底搞懂CAS实现原理 & 深入到CPU指令

    本文导读: 前言 如何保障线程安全 CAS原理剖析 CPU如何保证原子操作 解密CAS底层指令 小结 朋友,文章优先发布公众号,如果你愿意,可否扫文末二维码关注下? 前言 日常编码过程中,基本不会直接 ...

  6. 从 Java 代码到 CPU 指令

    从 Java 代码到 CPU 指令 我们都知道,编写的 Java 代码,最终还是要转化为 CPU 指令才能执行的.为了理解 Java 内存模型的作用,我们首先就来回顾一下从 Java 代码到最终执行的 ...

  7. Vivado实战—单周期CPU指令分析

    引言   不知道你是否和我有过同样的感受,<计算机组成原理>这门学科学起来如此的艰难:一节课下来,教室黑板上留下了满满的 "足迹",看上去也挺简单的,不就是 0 和 1 ...

  8. CPU 指令环 ring0,ring1,ring2,ring3

    Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3. Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用.如果 ...

  9. cpu指令如何读写硬盘

    我们提到cpu的主要作用之一就是控制设备之间的数据交互.这其中自然也包括了硬盘.系统的所有数据基本都在硬盘中,所以知道怎么读写硬盘,对程序来说非常重要,所以我们先来探索下传说中的pio模式. cpu要 ...

随机推荐

  1. Amicable numbers -- Javascript 实现

    问题描写叙述: Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide eve ...

  2. TCP/IP具体解释--UDP数据报中的IP分片

    1.UDP首部 2.UDP分片 在第二章,讲链路层是,提到过以太网.刨除数据帧帧头.最多传输的长度为1500.也就是说,假设一个ip数据报,长度大于1500,则须要分片. 分片方法: 在ip头中3位标 ...

  3. Gson转Map

    使用google的Gson包.把json字符串转成Map<String,Object>以及List<Object>对象,记得下载Gson包, 我使用的是gson-2.1.jar ...

  4. 在Azure Container Service创建Kubernetes(k8s)群集运行ASP.NET Core跨平台应用程序

    引子 在此前的一篇文章中,我介绍了如何在本地docker环境中运行ASP.NET Core跨平台应用程序(http://www.cnblogs.com/chenxizhang/p/7148657.ht ...

  5. 10个最有用的 IntelliJ IDEA 插件

    IntelliJ IDEA鼓舞了许多Java开发人员编写插件,从J2EE到代码编辑工具再到游戏.现在,它拥有了一个强大的插件生态系统,超过1500可用的插件以及几乎每周都有新的插件出现.在这篇文章中, ...

  6. 浅谈Android数据库DBFlow

    一.项目配置 1.根目录下的build.gradle 中添加 maven { url "https://www.jitpack.io" } 如下: classpath 'com.n ...

  7. 4.python迭代器生成器装饰器

    容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元素存储在内存中 ...

  8. iOS: FFmpeg编译和使用 学习

    ffmpeg是一个多平台多媒体处理工具,处理视频和音频的功能非常强大.目前在网上搜到的iOS上使用FFMPEG的资料都比较陈旧,而FFMPEG更新迭代比较快: 且网上的讲解不够详细,对于初次接触FFM ...

  9. Java I/O---IO流的规律小结

    IO流的规律总结:解决的问题,就是开发中具体要使用哪个流对象的问题. 1,明确数据源,数据汇(数据目的) 其实就是在明确要使用的IO体系:字节流 InputStream & OutputStr ...

  10. [置顶] Xamarin android沉浸式状态栏

    虽然关于android "沉浸式"状态栏有很多博客介绍过,从小菜到大神无一例外.我第一次看到这种"沉浸"式的效果我也以为真的是这么叫,然而根本不是这么回事,完全 ...