day05 设计计算机硬件

嵌入式学习-04_嵌入式技术之从零搭建计算机

1 添加立即数

现有系统的数据RAM存储方式(操作码+操作数)。

地址 指令 opcode(操作码) addr(操作数) 新代码 /数据
000 ld_a 0b00001 0b100 0b0000100000000100
001 add 0b00010 0b101 0b0001000000000101
010 sub 0b00011 0b110 0b0001100000000110
011 str 0b00110 0b111 0b0011000000000111
100 0b0000000000010011
101 0b0000000001000101
110 0b0000000000011011
111

现有我们的RAM中,操作数指的是数据RAM的地址。也就是在执行指令的过程中,需要操作数指定的地址到RAM中读取数据运算所需要的数据。这个数据获取的过程是间接的。

我们希望增加一个直接获取运算的数据的方式,也就是说操作数不是数据ROM的地址,而是表示具体的要参与运算的数据。这样的操作数称为立即数。我们举例说明:比如我们要计算19+69-27。

地址 指令 opcode(操作码) addr(操作数) 新代码 /数据
000 ld_a 0b00001 0b00000010011(19) 0b0000100000010011
001 add 0b00010 0b00001000101(69) 0b0001000001000101
010 sub 0b00011 0b00000011011(27) 0b0001100000011011
011 str 0b00110 0b00000000011(3) 0b0011000000000011

以上就是操作码+立即数的方式。

1.1 增加立即数后的指令

opname opcode 操作
halt 00000 停止时钟
ld_a 00001 将数据RAM的数据载入寄存器A
add 00010 数据RAM的数据+寄存器A再存入寄存器A
sub 00011 寄存器A-数据RAM再存入寄存器A
or 00100 寄存器A||数据RAM再存入寄存器A
and 00101 寄存器A&&数据RAM再存入寄存器A
str 00110 将寄存器A中数据存入数据RAM
jmp 00111 无条件跳转到指定地址
je 01000 比较相等时跳转到指定地址
ld_ia 01001 将立即数存入寄存器A
add_ia 01010 将立即数+寄存器A中的数再存到寄存器A
sub_ia 01011 寄存器A-立即数再存到寄存器A
or_ia 01100 寄存器A||立即数再存到寄存器A
and_ia 01101 寄存器A&&立即数再存到寄存器A

1.2 电路改造

立即数就是将操作码当做数直接进入ALU计算,我们的操作码addr原来表示的是RAM的地址,位数是11。因此,头部补5位的0,就凑成了11位的Din,作为ALU的B信号的输入了。

在这里插入图片描述

将指令寄存器输出的11bit地址补全到16位接入地址总线。通过en_i信号控制。

整体电路如下图:

在这里插入图片描述

1.3 控制器改造

1)增加en_i控制信号

在这里插入图片描述

2)修改控制器查找表

在这里插入图片描述

1.4 测试立即数功能

我们要

相关推荐

  1. 软件设计师考试---计算机硬件基础

    2024-03-26 23:54:01       57 阅读
  2. 网络学习笔记 01 计算机硬件基础 - 数据的表示

    2024-03-26 23:54:01       38 阅读
  3. <span style='color:red;'>day</span><span style='color:red;'>05</span>

    day05

    2024-03-26 23:54:01      46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 23:54:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 23:54:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 23:54:01       87 阅读
  4. Python语言-面向对象

    2024-03-26 23:54:01       96 阅读

热门阅读

  1. 使用Spring ORM和MyBatis简化数据库访问

    2024-03-26 23:54:01       38 阅读
  2. 13、Spring CLI中的特殊命令

    2024-03-26 23:54:01       46 阅读
  3. LeetCode1047:删除字符串中的所有相邻重复项

    2024-03-26 23:54:01       45 阅读
  4. Python 命名规则

    2024-03-26 23:54:01       41 阅读
  5. __init__.py 的作用

    2024-03-26 23:54:01       44 阅读
  6. vue3之动态路由

    2024-03-26 23:54:01       37 阅读
  7. Python networkx库中,G.add_edge方法的原理和使用方法

    2024-03-26 23:54:01       37 阅读
  8. 【CSP试题回顾】201912-2-回收站选址(优化)

    2024-03-26 23:54:01       40 阅读
  9. My SQL 子查询

    2024-03-26 23:54:01       46 阅读
  10. MySQL写shell的问题

    2024-03-26 23:54:01       41 阅读
  11. MySQL数据库索引失效的常见情况

    2024-03-26 23:54:01       45 阅读
  12. 构建一个springboot项目

    2024-03-26 23:54:01       46 阅读
  13. macOS Sonoma 14.4.1(23E224)发布(附黑/白苹果镜像)

    2024-03-26 23:54:01       34 阅读
  14. js的变量

    2024-03-26 23:54:01       42 阅读
  15. 每天一个数据分析题(二百三十一)

    2024-03-26 23:54:01       43 阅读
  16. Xilinx缓存使用说明和测试

    2024-03-26 23:54:01       33 阅读