0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

FPGA之家 来源:数字积木 作者:数字积木 2021-07-27 16:55 次阅读

【前言】

最近手上写了一个练手的小项目,项目的大致要求是实现一个取指,执行电路。取指的指令预存在,从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中

顶层代码如图所示:

下面是该工程的测试模块:

1796e308-eb92-11eb-a97a-12bb97331649.jpg

下面的ram模块的代码:

17b49bb4-eb92-11eb-a97a-12bb97331649.jpg

状态控制模块的代码:

17c181d0-eb92-11eb-a97a-12bb97331649.png

计数器模块的代码:

17d38f1a-eb92-11eb-a97a-12bb97331649.png

设计说明

该工程有以下模块组成:

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模块中,储存有初始化的指令数据。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10808

    浏览量

    210873

原文标题:简单的CPU取指执行电路设计

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    功率放大电路的转换效率是什么

    功率放大电路的转换效率是 功率放大电路的最大输出功率与电源所提供的功率之比 。这一标用于评估功率放大电路在将电源提供的功率转换为输出功率
    的头像 发表于 10-09 15:50 260次阅读

    为什么外设要通过接口与CPU相连

    外设与CPU之间的连接是计算机系统中一个非常关键的部分。外设(Peripherals)是除了CPU、内存和硬盘之外的所有设备,如键盘、鼠标、打印机、显示器等。这些设备需要与CPU进行
    的头像 发表于 09-30 14:10 380次阅读

    双核cpu和单核cpu的区别

    理器核心连接起来,从而提高计算能力。这种设计使得处理器能够同时执行多个任务,提高计算效率和性能。 单核CPU :只有一个处理器核心,所有的计算任务都由这一个核心来完成。单核CPU在处理多任务时可能
    的头像 发表于 09-24 16:17 1591次阅读

    如何用LM324做PI电路

    我想用你们的公司的LM324运放设计一个PI调节电路,如下图,但是我不知道 电路 中电阻,电容这些元器件具体怎样取值,我只知道理论公式,不知道你们的实际使用时,元器件值是怎样
    发表于 09-03 07:24

    Imagination CPU 系列研讨 | RISC-V 平台的性能分析和调试

    为了让开发者及工程师深入了解Imagination的CPU产品及相关解决方案,Imagination将陆续推出5期线上研讨,包含:RISC-V平台的性能分析和调试;RISC-V安全和全球平台可信
    的头像 发表于 08-10 08:28 233次阅读
    Imagination <b class='flag-5'>CPU</b> 系列研讨<b class='flag-5'>会</b> | RISC-V 平台的性能分析和调试

    简述cpu控制器的工作原理

    : 指令获取 CPU控制器首先需要从内存中获取指令。这个过程称为阶段。在这个阶段,CPU控制器通过程序计数器(PC)来确定下一条指令的地址,并将其从内存中读取出来。程序计数器是一个
    的头像 发表于 06-30 11:04 1157次阅读

    放大电路的带负载能力是什么

    放大电路的带负载能力是电路在输出信号时,能够驱动或承载的负载的大小。放大电路通常用于放大电压或电流信号,将小信号放大成为更大的信号。负载是
    的头像 发表于 03-09 13:59 2382次阅读

    CPU芯片电路板的维修方法

    判断CPU基准时钟电路是否正常的方法。用示波器检查时钟引脚(晶振引脚)的时序波形,如果所检测的时序波形不正常,说明故障在CPU的基准时钟电路
    的头像 发表于 02-03 11:42 1732次阅读

    处理器和cpu是一个东西吗 cpu和主板的区别

    处理器和CPU是一个东西,CPU中央处理器(Central Processing Unit)的简称,是计算机的核心部件,负责执行各种计算任务。
    的头像 发表于 01-19 09:52 1.9w次阅读

    一文了解CPU高速缓存

    CPU的核心功能包括数据运算和指令控制。CPU运算的数据和执行的指令全部存储在CPU的寄存器中,这些数据和指令又都来自于CPU高速缓存。
    的头像 发表于 01-02 16:01 1463次阅读
    一文了解<b class='flag-5'>CPU</b>高速缓存

    CPU和GPU之间的主要区别

    以下是以表格形式提供的CPU和GPU之间的一些区别:中央处理器图形处理器CPU代表中央处理器。GPU代表图形处理单元。CPU是通用处理器。GPU是专用处理器。CPU更灵活,指令集更大,
    的头像 发表于 12-14 08:28 740次阅读
    <b class='flag-5'>CPU</b>和GPU之间的主要区别

    secondary cpu执行流程介绍

    secondary cpu执行流程 aarch64架构secondary cpu的内核入口函数为secondary_entry(arch/arm64/kernel/head.S),以下为其执行
    的头像 发表于 12-05 16:12 770次阅读
    secondary <b class='flag-5'>cpu</b><b class='flag-5'>执行</b>流程介绍

    cpu执行程序内部变化

    CPU(Central Processing Unit)是计算机的核心部件之一,它负责执行计算机程序的指令,并进行数据处理和控制操作。CPU执行程序时会经历一系列复杂的内部变化。本文
    的头像 发表于 12-05 11:26 580次阅读

    CPU中什么是分支预测

    = 5 ; } else { n = - 5 ; } 在执行 if 语句的时候,一定会对判断语句执行结果后的下一条语句进行址和译码,那么在还没有判断结果之前应该对哪一个语句进行
    的头像 发表于 11-29 17:22 981次阅读

    cpu满载是什么原因 cpu容易满载怎么办 cpu过高怎么处理

    cpu满载是什么原因 cpu容易满载怎么办 cpu过高怎么处理  CPU满载是CPU的使用率非
    的头像 发表于 11-28 17:29 1w次阅读