CPU设计实战-Wishbone总线接口

news2024/11/24 14:33:51

为什么需要改用总线接口?

1.但是在实际应用中,程序的体积可能非常大,指令存储器就不能再集成在FPGA内部了,一般使用FPGA芯片外部的Flash作为指令存储器。同理,-般使用FPGA芯片外部的SDRAM作为数据存储器

2.统一接口标准。 很多ip都是买的,需要统一的标准。 2. 功能增减很容易如果要增加新的master或slave,那么新增加一组总线接口就行了。 3. 减少互联线整个系统干净整洁、接口清晰。

Wishbone总线接口定义

需要注意的是:

WE读写使能信号:低位表示读操作,高位表示写操作

SEL数据总线选择信号:用于选择总线上哪些bit是有效的,宽度为位宽/总线粒度(一般为一个字节)

CYC总线周期信号:代表总线正在被占用(不一定是总线操作),在总线使用时须持续有效

STB总线选用信号:有效时代表发起一次总线操作

在发起一次总线操作后,这两个信号都要有效

ACK操作结束信号:操作结束给一个有效位

总线单次读写操作过程

单次读

1.主设备:

WE置低表示读操作,STB和CYC有效表示发起一次总线操作,发送地址ADR和选通信号SEL

2.从设备:

传输数据给主设备,ACK响应信号置高表示传输完成,

3.主设备:

发现ACK高后接收数据,拉低CYC和STB表示总线操作完成

4.从设备:

发现STB低后,拉低ACK信号

单次写操作

1.主设备:

WE置高表示写操作,STB和CYC有效表示发起一次总线操作,发送地址ADR、选通信号SEL、数据DATA

2.从设备:

锁存主设备的数据,ACK响应信号置高表示传输完成

3.主设备:

发现ACK高后接收数据,拉低CYC和STB表示总线操作完成

4.从设备:

发现STB低后,拉低ACK信号

选通信号SEL与数据DATA的关系

取指访存阶段信号改写

本质上是对存储器进行读写,需要注意因为程序放在flash上,数据再SDRAM上,读写需要两个时钟周期,所以取指和访存需要两个时钟周期,在读写未完成时要把流水线进行暂停。暂停在CTRL控制模块中实现。

内部具体实现

使用有限状态机

一共分为三种状态,初始,忙碌和暂停;

当开始使用总线(CE)时,转移到忙碌状态,当访问结束(接收到ACK),转移到空闲状态

需要考虑流水线暂停与异常发生,修改如下:

当开始使用总线(CE)且不处于异常状态时,转移到忙碌状态

当访问结束(接收到ACK)且没有流水线暂停情况,转移到空闲状态;如果有转移到暂停状态:

当暂停结束时,暂停状态才跳转到初始状态

CTRL模块实现

    end else if(stallreq_from_if == `Stop) begin
			stall <= 6'b000111;
			flush <= 1'b0;		

按照之前定义的信号,取指阶段暂停应该是stall赋值为000011,这里为什么是000111?

这是考虑一种特殊情况即延迟槽指令必须执行,试想一下当前指令是转移指令,那么下一条指令就是延迟槽指令,如果只是取指阶段暂停而译码阶段暂停(也就是插入空指令),那么就会把空指令当做延迟槽指令。

所以我们需要将译码阶段和取指一起暂停,保持同步。

总线的通信方式

共享总线

由仲裁器控制总线的占有权,但同一时刻只能有一对主从设备通信

交叉互联

主从设备交叉连接,允许同一时刻多对主从设备通信

交叉互联模块实现

主设备根据地址高四位选择从设备,此处使用的IP最多支持8个主设备16个从设备,

故寻址空间大小2^8=256M,寻址空间0x0-0xFFFFFFF,按照如下接口定义分配地址空间:
 

可以看到指令存储在FLASH中,地址从0x30000000开始,故要修改PC在初始情况的地址:

		if (ce == `ChipDisable) begin
			pc <= 32'h30000000;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1531673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科研学习|研究方法——实验法

1.实验方法的渊源 今天我们说物理学、生物学是实验的科学&#xff0c;应该不会有人再持异议了&#xff0c;然而连物理学这样的学科在历史上也并非一开始就是实验科学。在2000多年以前的亚里士多德时代&#xff0c;众人都认为物理学是非实验性质的&#xff0c;物理学成为实验科学…

cuda多版本安装

主要参考文章&#xff1a; ubuntu 20.04下多版本cuda&cudnn下载与安装 在ubuntu上安装多个版本的CUDA&#xff0c;并且可以随时切换 1 环境检查 nvidia-smiCUDA Version:12.4表示最高支持cuda 12.4版本 nvcc -V如图所示表示系统目前版本为cuda 12.2 2 多版本cuda下载与…

从零开始的LLaMA-Factory的指令增量微调

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径及一点个人思考大模型应用开发实用开源项目汇总大模型问答项目…

外卖项目:使用AOP切面,完成公共字段自动填充(断点调试详细讲解)

文章目录 一、问题描述二、实现思路三、实现步骤四、断点实操五、代码演示 一、问题描述 我们已经完成了后台系统的员工管理功能和菜品分类功能的开发&#xff0c;在新增员工或者新增菜品分类时需要设置创建时间、创建人、修改时间、修改人等字段&#xff0c;在编辑员工或者编…

Sentinel持久化(nacos)

导入依赖 <!--SpringCloud ailibaba sentinel-datasource-nacos --><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency> yml配置 rule-type: naco配置: resource&am…

javaweb遇到的servlet问题,jar包问题

有时候会遇到这种问题&#xff0c;有的地方会报红 这是因为这个找不到这个包&#xff0c;这个项目缺少jar包 在tomcat9之前还不是Jakarta这个名字&#xff0c;我的运行环境与服务器是jdk17与tomcat10 解决方法&#xff1a; 在项目结构中&#xff0c;找到模块&#xff0c;再…

踏“时间”与“空间”前来探寻复杂度的奥妙(Java篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

机器人路径规划:基于广度优先搜索算法的机器人路径规划(提供Python代码)

一、广度优先搜索算法简介 广度优先搜索&#xff08;BFS&#xff09;是一种用于图或树的遍历算法&#xff0c;它从根节点开始&#xff0c;逐层地向下搜索&#xff0c;直到找到目标节点或遍历完整个图。BFS使用队列数据结构来实现&#xff0c;保证了节点的访问顺序是按照层级逐…

拌合楼管理系统(八) c#海康威视摄像头车牌识别

前言: c#调用海康威视SDK实现车牌识别 原本以为海康威视sdk的Demo里面没有车牌识别的实例,后来发现自己肤浅了,官方是有提供的,只是车牌识别是通过安防布警的方式实现的.程序主动监听,触发告警后获取到车牌信息. 一、接口调用的流程&#xff1a; 首先初始化sdk -> 开…

PHP使用PHP_DIO读取串口数据

一、安装PHP_DIO扩展 1. 下载对应版本的dll扩展 根据你的操作系统类型选择对应的扩展名 PECL :: Package :: dio 下载地址&#xff1a; PECL :: Package :: dio 0.2.1 for Windows 以我使用的为例 我本地使用的是phpStudy PHP为7.4.3nts 64位的那就需要下载 注意你的是线程安全…

嵌入式学习42-数据结构-双向链表

知识散记&#xff1a; 1.程序使用时&#xff08;开闭原则&#xff09; …

iOS常见崩溃简介

1. 崩溃 多指在移动设备&#xff08;如iOS、Android设备&#xff09;中或不可移动设备&#xff08;如:Windows、Linux等设备&#xff09;&#xff0c; 在打开或使用应用程序时出现的突然退出中断的情况&#xff08;类似于Windows的应用程序崩溃&#xff09;。 多表现为&#…

全网最详细介绍如何实现图片存储阿里OSS实现资源持久化存储

什么是阿里云OSS 阿里云OSS&#xff08;Object Storage Service&#xff0c;对象存储服务&#xff09;是阿里云提供的一种存储服务&#xff0c;它支持任意类型的数据存储&#xff0c;如图片、视频、日志文件等。OSS以对象&#xff08;Object&#xff09;的形式组织数据&#x…

【导论】数据可信流通 从运维信任到技术信任

信任 信任概念由于其抽象性和结构复杂性&#xff0c;在社会学、心理学、营销学、经济学、管理学等不同 的领域定义是不同的&#xff0c;但是达成共识的观点是&#xff1a;信任是涉及交易或交换关系的基础。 信任的基石 ①身份可确认&#xff0c;②利益可依赖&#xff0c;③能…

docker实战(3)

1, jdk17版本的dockerfile FROM eclipse-temurin:17-jre ADD ./target/ods-poc-0.0.1-SNAPSHOT.jar /home/app/app.jar WORKDIR /home/app ENV TZ Asia/Shanghai ENTRYPOINT ["java","-jar","/home/app/app.jar"] EXPOSE 8083dockerfile 1, …

数据结构的概念大合集02(线性表)

概念大合集02 1、线性表及其逻辑结构1.1 线性表的定义1.2 线性表的基本操作 2、线性表的顺序存储结构2.1 顺序表 3、线性表的链式存储3.1 链表3.1.1 头结点&#xff08;头指针&#xff09;&#xff0c;首指针&#xff0c;尾指针&#xff0c;尾结点3.1.2 单链表3.1.3 双链表3.1.…

Linux第79步_使用自旋锁保护某个全局变量来实现“互斥访问”共享资源

自旋锁使用注意事项:自旋锁保护的“临界区”要尽可能的短。 因此&#xff0c;在open()函数中申请“spinlock_t自旋锁结构变量”&#xff0c;然后在release()函数中释放“spinlock_t自旋锁结构变量”&#xff0c;这种方法就行不通了。如果使用一个变量“dev_stats”来表示“共享…

Nanya(南亚科技)DRAM芯片选型详解

一、DRAM产品选型 普通SDRAM只在时钟的上升期进行数据传输&#xff0c;DDR内存能够在时钟的上升期和下降期各传输一次数据&#xff0c;因此性能翻倍&#xff0c;被称为双倍速率同步动态随机存储器。因此DDR内存可以在与SDRAM相同的总线频率下达到更高的数据传输率。DDR是一种掉…

Pygame AttributeError no attribute ‘display‘问题及其解决方法

目录 前言 错误原因 解决方法 1. 确保正确安装 Pygame 2. 检查 Python 路径和 Pygame 模块位置 3. 修复模块命名冲突 4. 检查代码错误 5. 检查 Pygame 版本兼容性 代码示例 总结 前言 Pygame 是一个非常受欢迎的 Python 游戏开发库&#xff0c;它提供了丰富的功能和…