基于图灵完备的cpu设计(四)--ALU
浮世分析者———ALU介绍ALU是Arithmetic Logic Unit的缩写,即算术逻辑单元。它是CPU中的一个重要组成部分,用于执行各种算术和逻辑操作。例如加法,减法,或运算,与运算等。这些运算被集成在ALU中,我们通过输入的电信号来选择相应的功能对输入数据进行操作并输出到总线上。
引脚图介绍
~~ 太丑了,懒得改了,凑合看吧~~
指令 输入对应电平表中数据选择相应模式从ram中读取的8位指令,如果第7位为1,则启用ALU,否则不启用。前三位为启用时的模式选择.前三维指令表如图所示:
输入1 连接特定寄存器一的始终输出引脚
输入2 连接特定寄存器二的始终输出引脚
输出 连接到总线
功能介绍从引脚图我们可以得到ALU也是由对应的指令所控制的,他链接着特定的寄存器,并输出到总线上。
代码实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546module alu ( input alu_sel, //是否启用alu 使能位 input ...
基于图灵完备的cpu设计(三)--BUS
世界的构建者–BUS介绍这个章节会是这个主题中最重要的章节,在这个章节里,我们将会对整个cpu架构有个清楚的认知,之后我们只需要慢慢实现对应的功能模块就好了。
功能介绍cpu中的的存储与处理相关数据依赖着寄存器阵列,寄存器阵列与外部设备之间的数据交换依赖着总线。这些数据交换的通路就是BUS。
我们先假设我们现在的cpu只实现寄存器阵列之间的数据转移,从外部读取数据以及向外输出数据的功能。
有了上面的功能 我们就需要设计我们这方面功能的指令集:
从图片中我们可以看到 指令集的第0位到第2位作为使能寄存器保存位,他决定着要开启对应寄存器的data_in引脚。 我们的寄存器个数为6,从000开始编号 直到101 ,110为cpu的外部输入引脚 所以我们需要例化一个3线转8线模块
指令集的第3位到第5位作为使能寄存器输出位,他决定着要开启对应寄存器的data_out引脚
我们的寄存器个数为6,从000开始编号 直到101 ,110为cpu的外部输出引脚 所以我们需要例化一个3线转8线模块
指令集6为与7位为功能选择位,其中10为copy功能
代码实现1234567 ...
基于图灵完备的cpu设计(二)--解码器
规则的解释者—- 解码器介绍解码器(Decoder)在计算机科学和电子工程中是一种重要的组件,特别是在CPU(中央处理单元)的设计和功能中扮演着关键角色。在CPU中,解码器主要用于指令解码阶段,将从程序存储器中取出的指令(通常为二进制形式)解析成处理器可以理解和执行的操作和操作数。 因为本文中的cpu有四种功能,所以本文的解码器起到了功能调配的作用。
引脚图介绍
opcode 输入信号为8位,取第一位与第二位作为功能选择位。功能选择表如下:
immediate 立即数功能使能引脚
calculate 计算单元使能引脚
copy 复制功能引脚
condition 条件判断功能使能引脚
功能介绍这里的解码器本质来说就是一个2 - 4分线器,现代架构的解码器复杂多了,这里的cpu就只采用最简单的解码器.
代码实现123456789101112131415161718192021module decoder_2to4 ( input reg [1:0] in, // 输入信号口 input reg en, // 解码器使能位 outp ...
基于图灵完备的cpu设计(一)--寄存器
世间记忆的记录者———寄存器介绍在cpu的计算工作中,例如简单的两数相加就需要读取两个数据然后一起送入ALU中进行运算,所以我们就需要一种装置能存储这些数据,这便是寄存器的作用。
引脚图介绍
加载 当输入电平为1时output引脚输出数据,当输入电平为0时寄存器output引脚为高阻抗
保存 当输入电平为1时寄存器接受保存数值引脚的数据并保存其中,为0时保存寄存器内的数据
保存数据引脚 为数据输入引脚
output 受加载引脚控制
始终输出 此引脚始终输出寄存器内的值
功能介绍由上面的引脚我们可以知道,寄存器有着读入与取出数据,保存数据的功能,下面我们来介绍下寄存器的具体实现。
代码实现12345678910111213141516171819202122232425262728293031module register_pluse ( input reg save_en, //加载引脚 input reg load_en, //保存引脚 input reg [7:0] data_in, //保存数据引脚 outpu ...
基于图灵完备的cpu设计(导言)
大幻森罗断罪眼的简单8位CPU—-用verilog一口气全做完(导言)前言大二时学了数电那时产生对于cpu的好奇,网上搜到了cpu架构时看到了许多专业名词,看的也是云里雾里,感觉这个领域不是我这个水平能去接触的,但是在大三时有幸玩到了一款叫做图灵完备的游戏,这款游戏教会了我从几个最简单的门电路搭出了简单的cpu,在这款游戏后面还要搭leg架构的cpu,我打算先把前面这些简单的cpu用verilog搭出来再慢慢研究。
总览中央处理器(Central Processing Unit,简称CPU),网上关于cpu的定义太过专业,对于我的cpu来说他能做到以下几点
1.能从储存器读取字节并解析然后进行对应的操作
2.能进行一些简单的运算 如: 或,与,add(加),sub(减)
3.将一个cpu内部的寄存器转移到另外一个寄存器内
4.条件判断语句件实现c语言中if的操作
5.将存储亲中的每些字直接载入寄存器中(立即数操作)
拥有了上面5种能力,我们就能说这个cpu是图灵完备的(我也不知道啥事图灵完备)
上面的五种能力对应了我们需要实现的功能模块
1.从储存器读取字节对应了我们的ram储存器与p ...