你们会设计CPU取指执行电路吗?

【前言】
最近手上写了一个练手的小项目,项目的大致要求是实现一个取指,执行电路。取指的指令预存在,从rom中读取指令后,根据预定的解码规则,对指令进行解码,并执行相对应的操作。发出来和大家共同分享。
该工程的设计要求如下:
在ram模块中,储存有初始化的指令数据。我们要设计一个取指电路,并能根据不同的指令执行不同的操作。指令数据为16bit.
指令编码定义如下:
如果指令代码为0,则下一个状态为空闲。如果指令的低位8位为0,高位8位非0,则读取指定高位8位的存储器,并将其写入obuf0。如果指令的低8位非0,且高8位也不是0,则将下8位作为数据,写入地址为上8位的存储器中。
list4显示了指令获取电路。它实例化了五个模块:pc0(程序计数器、8位计数器)、ir0(指令寄存器、16位计数器)、obuf0(输出缓冲器、16位计数器)、state0(状态机)和ram0(存储器,8位256字块ram)。模块pc0用于指定要读取的地址,以便从ram0获取(提取)指令代码。指令代码存储在ir0中。
此指令获取操作在两种状态下执行:fetcha和fetchb。fetcha用于取地址操作,该地址作为读取ram中指令的地址,fetchb用于指令寄存操作,将指令寄存到指令寄存器中。
在execa和execb状态下,执行表1中的操作。如果存储在ir0中的指令代码为0,则下一个状态为空闲。如果指令的低位8位为0,高位8位非0,则读取指定高位8位的存储器,并将其写入obuf0。如果指令的下8位非0,则将下8位写入地址为上8位的存储器。
指令解码列在table1中
顶层代码如图所示:
下面是该工程的测试模块:
下面的ram模块的代码:
状态控制模块的代码:
计数器模块的代码:
设计说明
该工程有以下模块组成:
pc0(程序计数器、8位计数器)、
ir0(指令寄存器、16位计数器)、
obuf0(输出缓冲器、16位计数器)、
state0(状态机)、
ram0(存储器,8位256字块ram)。
其中,pc0,ir0,obuf0是例化计数器模块得到的,该计数器模块拥有计数和寄存数据两个功能,分别由端口 inc 和 端口 load 控制。
当 inc有效时,在下一个时钟,会将计数器内部的计数器自增1,并在q端输出。
当load信号有效时,在下一个时钟会将d端 的数据寄存到该计数器的寄存器中,并在q端输出。
pc0利用的是计数器的计数功能,用于产生取指令的地址信息。
ir0利用的是计数器的寄存功能,用于将ram中取出的指令暂时寄存。
obuf0利用的是计数器的寄存功能,用于将输出中暂时寄存。
在状态机控制模块中,设置了以下五个状态:
idle:空闲态。
fetcha:取地址状态。同时将程序计数器的内部计数值加一。
fetchb:取指令,指令寄存状态。将从ram中读出的指令写入到指令寄存器模块中。
execa:指令解码模块,判断指令的停止,读,写控制信号。如果为写信号,将指令的低8位作为数据写到高8位对应的地址中。如果为读指令,跳转到execb状态,将指令的低8位输出。如果停止信号为真3,跳转到空闲状态。
execb:执行状态。用于将指令的低8位输出。
在ram模块中,储存有初始化的指令数据。


如何将电源PCB关键布局走线优化到最佳状态?
宝马投四亿欧元的iNext电动汽车,竞争对手是特斯拉Model Y
LED显示屏在户外标识标牌领域的应用有哪些
MAXQ架构简介
关于谷歌物联网Android Things你需要知道的10点
你们会设计CPU取指执行电路吗?
三星S7升级安卓7.0了 然而Gear VR眼镜运行不了
pcb设计基础之稳压原理简述
台积电2nm工艺制程研发迎来突破
长期戴耳机听歌的危害,别让这些坏习惯害了你的听力!
OLED中的佼佼者,创维W81系列实力出圈
PCB天线和FPC天线有怎样的特性
苹果已正式关闭了iOS 13.4系统的验证通道
稳定币比央行数字货币更好吗
荣耀magic/华为mate9的保时捷版/荣耀9,华为最漂亮的3部手机,最后一款很值得购买
网红小家电 凯琴的崛起
谈荣威ERX5从15万元到20万元的一步之遥
VCSEL元件成长幅度最显著 将带动整体红外线元件市场持续成长
浅谈Metal Mesh的触控技术优势及限制因素
飞凌嵌入式国网直流充电桩计费控制单元介绍