Coder Social home page Coder Social logo

deathking / cpme48 Goto Github PK

View Code? Open in Web Editor NEW
7.0 3.0 3.0 3.07 MB

Why CP-YOU? Let's CP-ME! 非常简单的8位CPU的VHDL实现,拥有精简的RISC式指令集。更有配套扩展指令集IR48*、汇编器DASM48、高级语言Cheme,你值得拥有。(课程作业,仅供交流,切勿抄袭!)

VHDL 90.43% Scheme 1.03% Assembly 1.15% Ruby 7.39%

cpme48's Introduction

CPME48

CPME48是一个简易CPU的VHDL实现,它仅支持少量自定义的RISC指令(IR48)。

配套软件

  • cheme:为CPME48设计的高级语言,Scheme的变种子集。cheme拥有语法为S-表达式风格、语义基于副作用、强类型等特点。cheme语言提供的chemec可以将cheme程序编译为CPME48的汇编指令IR48*。
  • dasm: 为CPME48设计的汇编器,能将IR48指令编写的文件汇编为CPME48的机器指令。也能将CPME48的二进制程序反编译。

技术规格

在默认的IR48指令集实现中,CPME48的技术规格如下:

  • CPME48具有8个8位通用寄存器(从R0到R7)(注①)。
  • CPME48的指令寄存器(IR)是16位的。
  • CPME48的数据总线是16位的(注②)。
  • CPME48的地址总线是16位的。
  • CPME48的外设端口设置了8个(注③)。
  • CPME48的存储器大小为64K×16位(注④)。

注:
① CPME48没有对有特殊用途的R7寄存器做保护,即寄存器R7有时作为地址高字节使用,但对汇编语言的程序员来说,R0到R7都是可直接存取的。
② 数据总线仅在读取IR时处理16数据,在读取其它数据时,按照8位总线使用。
③ 由于实际硬件的限制,这8个端口实则同一个端口。
④ 存取指令时,每个单元16位数据都有效;存取数据时,每个单元仅低字节有效。

在IR48的扩展指令集IR48*的意义下,CPME48*基本技术规格与CPME48一致,但新增加了几个寄存器,并将通用寄存器赋予了新的意义。寄存器详细指标如下:

引用代码 寄存器 名字 说明
000 AX(R0) 累加器 通用,或作为累加器
001 BX(R1) 通用
010 CX(R2) 通用
011 DX(R3) 通用
100 SI(R4) 源索引 串复制源地址,数组索引
101 DI(R5) 目的索引 目的地址,数组索引
110 SP(R6) 栈指针 栈顶指针
111 BP(R7) 基址指针 栈中引用位置的地址
--- CS 代码段基址 代码段基址
--- DS 数据段基址 数据段基址
--- SS 栈段基址 栈段基址
111 FLAG 状态位 标志集,状态位
--- IR 指令寄存器 当前指令地址
000 PC 程序计数 将要执行的指令的地址

注:
---表示无法直接引用,只能通过指令间接影响该寄存器。
② 寄存器PC、FLAG只能被特殊指令(如SPOPSPSH指令)引用。

寻址模式

CPME48只支持直接寻址的寻址方式。

内存布局

CPME48采用的内存布局称为“simple”,反应在汇编代码中应为:

.MODEL SIMPLE

在IR48中,数据、代码和运行时栈(Runtime stack)并不严格区分,在IR48*中,引入了CS、DS以及SS寄存器管理这些内存区域。尽管如此,一个程序还是会占用整个存储器空间,因此这种内存布局是“简易的”。

       +--------------------+
0x0000 |     Empty Unit     |
       +--------------------+
0x0001 |                    |
       |    Code Segment    |
0x00FF |                    |
       +--------------------+
0x0100 |                    |
       |    Data Segment    |
0x01FF |                    |
       +--------------------+
0x0200 |                    |
       |   Stack Segment    |
0x02FF |                    |
       +--------------------+

cpme48's People

Contributors

deathking avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.