计算机组成原理—— 总线系统(十一)
在追求梦想的旅途中,我们常常会遇到崎岖的道路和难以预料的风暴。然而,正是这些挑战塑造了我们的坚韧和毅力,使我们能够超越自我,触及那些看似遥不可及的目标。不要因为一时的困境而气馁,也不要因为他人的质疑而动摇自己的信念。你的价值不由外界定义,而是由你内心深处对理想的执着所决定。
想象一下,站在高山之巅俯瞰世界的感觉,那是经过无数次攀登、滑倒再站起后才能体会到的壮丽景象。每一次的努力都是向着这个目标迈进的一小步,无论多么微小的进步,都是通向成功的宝贵积累。即使前路漫漫,即使希望渺茫,心中的火焰也不应熄灭,因为它代表着你的热情、你的决心以及你对未来无限的可能。
记住,在这漫长的旅途中,最重要的是过程而非结果。享受每一个学习的机会,珍惜每一段成长的经历,让它们成为你心中最宝贵的财富。即使最终没有达到预期的目标,但只要你在过程中尽力了、奋斗了,那么你就已经赢得了属于自己的胜利。
因此,请继续怀揣着梦想,勇敢地向前迈进。用你的行动证明给世界看,你可以超越一切限制,实现心中所愿。因为在你的心中,蕴藏着改变世界的无限力量,只要你愿意挖掘并释放它,没有什么是不可能的。未来正等待着你去书写,而你是那个唯一能够创造属于自己辉煌篇章的人。
计算机组成原理资源网
https://www.wenjingketang.com/这里面有ppt课后习题及答案,需要的可以自行下载
目录
7.2 总线接口
7.2.1 信息传送方式
同步传输
异步传输
半同步传输
7.2.2 总线接口的基本概念
功能模块详解
7.3 总线仲裁
7.3.1 集中式仲裁
链式查询(Daisy Chaining)
计数器定时查询
独立请求(Independent Request)
7.3.2 分布式仲裁
CAN总线仲裁机制
CSMA/CD协议
案例分析与扩展
PCI Express总线
HyperTransport总线
总结
7.2 总线接口
7.2.1 信息传送方式
同步传输
技术细节
同步传输依赖全局时钟信号(如CPU主时钟)协调所有操作。每个时钟周期完成固定操作,如地址发送、数据读写等。时序要求严格,所有设备必须同步。
时序图示例
plaintext
时钟周期: | 1 | 2 | 3 | 4 | 地址线: | A | A | B | B | 数据线: | D | D | X | X | 控制线: | Write | Read | Idle | Idle |
Verilog代码实现
verilog
module sync_transfer (input clk,input [7:0] data_in,output reg [7:0] data_out,input write_en );reg [7:0] buffer;always @(posedge clk) beginif (write_en) beginbuffer <= data_in; // 写入数据data_out <= 8'bz; // 输出高阻态end else begindata_out <= buffer; // 读取数据endend endmodule
案例:SDRAM控制器
SDRAM通过同步接口与CPU交互,时钟频率为133MHz。每个时钟周期完成一次突发传输(Burst Transfer),连续传输4/8/16个数据。
异步传输
技术细节
异步传输使用握手协议(Req/Ack)协调设备。无全局时钟,设备根据自身速度调整时序。
时序图示例
plaintext
Req: __/‾‾‾\____ Ack: ____/‾‾‾\__ 数据有效区间: 在Req和Ack同时有效时
C代码模拟握手协议
c
void async_transfer(uint8_t* data) {// 发送方set_req_high();while (!check_ack()); // 等待接收方应答send_data(data);set_req_low();while (check_ack()); // 等待接收方释放Ack// 接收方if (req_is_high()) {read_data(data);set_ack_high();while (req_is_high()); // 等待发送方释放Reqset_ack_low();}
}
案例:RS-232串口通信
波特率9600bps,起始位1位,数据位8位,停止位1位。通过UART控制器实现异步数据传输。
半同步传输
技术细节
在同步传输基础上添加等待信号(Wait),允许从设备延长时钟周期。
时序图示例
plaintext
时钟: | 1 | 2 | 3 | 4 | Wait: | __/‾‾‾\________ | 数据线: | X | D | D | X |
VHDL代码实现
vhdl
process(clk) beginif rising_edge(clk) thenif wait_signal = '0' thendata_out <= internal_buffer;else-- 保持当前状态end if;end if; end process;
案例:PCI总线
PCI总线支持半同步传输,从设备通过DEVSEL#信号声明响应,TRDY#信号控制数据传输节奏。
7.2.2 总线接口的基本概念
功能模块详解
-
地址译码器
-
实现方式:基于比较器或可编程逻辑阵列(PLA)。
-
示例:
verilog
module address_decoder (input [15:0] addr,output reg select_device1,output reg select_device2 );always @(*) beginselect_device1 = (addr[15:12] == 4'b0001);select_device2 = (addr[15:12] == 4'b0010);end endmodule
-
-
数据缓冲器
-
类型:单向缓冲(如74LS244)、双向缓冲(如74LS245)。
-
FIFO实现:循环队列管理读写指针。
c
#define FIFO_SIZE 16 uint8_t buffer[FIFO_SIZE]; int head = 0, tail = 0;void fifo_write(uint8_t data) {buffer[head] = data;head = (head + 1) % FIFO_SIZE; }
-
-
错误检测算法
-
CRC-32计算(以太网标准):
python
def crc32(data):crc = 0xFFFFFFFFpoly = 0xEDB88320for byte in data:crc ^= bytefor _ in range(8):crc = (crc >> 1) ^ poly if (crc & 1) else crc >> 1return crc ^ 0xFFFFFFFF
-
7.3 总线仲裁
7.3.1 集中式仲裁
链式查询(Daisy Chaining)
电路设计
plaintext
仲裁器 → Grant → Device1 → Grant → Device2 → ... → DeviceN 每个设备的Grant输入连接到前一个设备的Grant输出。
优先级问题
-
固定优先级:Device1 > Device2 > ... > DeviceN
-
故障影响:若Device3损坏,后续设备无法获得授权。
Verilog实现
verilog
module daisy_chain_arbiter (input clk,input [3:0] req,output reg [3:0] grant );always @(posedge clk) begingrant[0] = req[0];grant[1] = req[1] & ~grant[0];grant[2] = req[2] & ~grant[1];grant[3] = req[3] & ~grant[2];end endmodule
计数器定时查询
算法流程
-
仲裁器维护一个计数器(0到N-1循环)。
-
收到请求后,从当前计数值开始扫描设备。
-
第一个遇到请求的设备获得授权。
动态优先级示例
c
int current_device = 0;int arbitrate(int requests[]) {for (int i = 0; i < MAX_DEVICES; i++) {int device = (current_device + i) % MAX_DEVICES;if (requests[device]) {current_device = (device + 1) % MAX_DEVICES;return device;}}return -1; // 无请求
}
独立请求(Independent Request)
硬件设计
每个设备有独立的Req和Grant线,仲裁器使用优先级编码器。
优先级编码器示例(4设备)
verilog
module priority_encoder (input [3:0] req,output reg [1:0] grant );always @(*) begincasex(req)4'b1xxx: grant = 2'b00; // Device0优先级最高4'b01xx: grant = 2'b01;4'b001x: grant = 2'b10;4'b0001: grant = 2'b11;default: grant = 2'b00;endcaseend endmodule
7.3.2 分布式仲裁
CAN总线仲裁机制
非破坏性逐位仲裁
-
每个节点发送ID的同时监听总线。
-
若发现更高优先级ID(二进制0),则退出发送。
ID比较逻辑
c
// CAN标准ID为11位
#define ID_MASK 0x7FFvoid can_arbitrate(uint16_t my_id) {transmit_id(my_id);for (int i = 10; i >= 0; i--) {bool bit = (my_id >> i) & 1;bool bus_bit = read_bus_bit();if (bit != bus_bit) {if (bus_bit == 0) {// 检测到更高优先级ID,停止发送enter_listen_mode();return;}}}// 仲裁胜利,继续发送数据transmit_data();
}
CSMA/CD协议
冲突检测与退避算法
-
发送前监听总线(Carrier Sense)。
-
检测到冲突后发送Jam信号。
-
退避时间计算:二进制指数退避(0 ~ 2^k -1时隙,k为冲突次数)。
退避算法代码
python
import randomcollision_count = 0def backoff_time():max_slots = 2 ** min(collision_count, 10) - 1return random.randint(0, max_slots) * slot_time
案例分析与扩展
PCI Express总线
分层协议架构
-
事务层:处理TLP(Transaction Layer Packet)。
-
数据链路层:错误检测与重传(Ack/Nak机制)。
-
物理层:差分信号传输,支持多通道绑定。
TLP包格式
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| Header | 12或16 | 包含路由、操作类型等 |
| Payload | 0-4096 | 传输数据 |
| ECRC | 4 | 端到端CRC校验 |
HyperTransport总线
点对点传输
-
双向链路上行与下行分离。
-
基于包的路由:直接内存访问(DMA)和中断传递。
-
带宽计算:
带宽=频率×位宽×2(双工)带宽=频率×位宽×2(双工)例如:1.6GHz × 16位 × 2 = 6.4GB/s。
总结
总线技术是计算机系统的核心,其设计需平衡速度、可靠性和复杂度。现代系统倾向于使用高速串行总线(如PCIe)和分布式仲裁(如以太网),而嵌入式领域仍依赖CAN等实时性协议。理解总线接口与仲裁机制,是优化系统性能的关键。
相关文章:
计算机组成原理—— 总线系统(十一)
在追求梦想的旅途中,我们常常会遇到崎岖的道路和难以预料的风暴。然而,正是这些挑战塑造了我们的坚韧和毅力,使我们能够超越自我,触及那些看似遥不可及的目标。不要因为一时的困境而气馁,也不要因为他人的质疑而动摇自…...
电商小程序(源码+文档+部署+讲解)
引言 随着移动互联网的快速发展,电商小程序成为连接消费者与商家的重要桥梁。电商小程序通过数字化手段,为消费者提供了一个便捷、高效的购物平台,从而提升购物体验和满意度。 系统概述 电商小程序采用前后端分离的架构设计,服…...
8、k8s的pv和pvc
pv和pvc的概念 静态 动态——>自动分配 pv:persistent volume,持久化存储卷,描述或者定义存储卷的类型。集群范围内的存储概念,代表的是实际的存储空间(本地磁盘、网络系统文件nfs,云存储)…...
【limit 1000000,10 加载很慢该怎么优化?】
在 SQL 数据库中,使用 LIMIT 子句进行分页查询时,如果偏移量(offset)很大,查询性能可能会变得非常差。 这是因为数据库需要扫描和跳过大量的记录才能到达所需的起始位置,然后再取出所需的记录数。 例如,LIMIT 1000000, 10 表示跳过前 100 万条记录,然后取接下来的 10…...
通过IDEA傻瓜式快速分析java堆内存快照
背景 很多开发都觉得分析堆快照查找内存泄漏、大对象等是一个比较需要技术功底的能力,但其实不然,通过IDEA就可以直接快速分析。 操作流程 通过idea直接打开已经找运维或自行dump好的.hprof文件 选中后,IDEA默认会在底部分析器tab展示解析…...
测试方案整理
搜索引擎放在那里?研发 查看问题样本或者在提取再批量入录等情况,一旦我没有勾选或者全选中已经批量入录的样本,那么在直接点击批量提取或查看问题样本的后,会自动默认为选择全选样本还是按照输入错误处理? 批量查看返…...
2025年视觉、先进成像和计算机技术国际学术会议(VAICT2025)
2025年视觉、先进成像和计算机技术国际学术会议(VAICT2025) 2025 International Conference on Vision, Advanced Imaging,and Computer Technology 【重要信息】 二轮截稿时间:2025年3月18日 注册截址时间:2025年4月11日 会…...
【黑马点评】jmeter测试秒杀接口前后耗时,和查询店铺(redis+caffeine二级缓存)接口
【黑马点评】jmeter测试秒杀接口前后耗时,和查询店铺缓存穿透接口 4.测试秒杀接口耗时4.1 修改VoucherOrderController4.2 测试原本的接口耗时 5. 测试缓存穿透 这篇是测试,使用RabbitMQ消息异步处理订单,以及不异步处理订单的耗时对比 以及查…...
盛铂科技 SCP4006/4018/4040:国产袖珍式功率计 射频微波功率探头 平均功率计
在通信、电子测量等领域,功率计是确保信号稳定、系统高效运行的关键设备。盛铂科技自主研发的 SCP4000 系列自带 USB 接口的袖珍式 CW 信号平均功率计,以其卓越的性能、高性价比和便捷的操作,在众多同类产品中脱颖而出,成为行业内…...
数据科学之数据管理|统计学
使用python学习统计 目录 01 统计学基础 7 一、 统计学介绍 7 二、 数据和变量 8 02 描述统计 10 一、 描述统计概述 10 二、 分类变量的描述 11 三、 等距数值变量的描述 13 四、 等比数值变量的描述 16 五、 常用软件包介绍 16 六、 数值变量的描述统计 18 (一)…...
C++ 设计模式-建造者模式
以下是一个完整的C建造者模式示例,包含产品类、建造者接口、具体建造者、指挥者以及测试代码: #include <iostream> #include <string> #include <memory>// 产品类:汽车 class Car { public:void setBody(const std::str…...
从零搭建:Canal实时数据管道打通MySQL与Elasticsearch
Canal实时同步Mysql Binlog至 Elasticsearch 文章目录 Canal实时同步Mysql **Binlog**至**Elasticsearch** 一. 环境准备1.环境检查检查Mysql是否开启BinLog开启Mysql BinlogJava环境检查 2.新建测试库和表3.新建Es索引 二.**部署 Canal Server****2.1 解压安装包****2.2 配置 …...
Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现一次触发控制三个光源开关分别采集三张图像(C#)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现一次触发控制三个光源开关分别采集三张图像(C#) Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过BGAPI SDK使用定序器功能预期的相机动作定序器的工作原理 Baumer工业相机通过BGAP…...
网络安全用centos干嘛 网络安全需要学linux吗
网络安全为啥要学Linux系统,据不完全统计,Linux系统在数据中心操作系统上的份额高达70%。它一般运行于服务器和超级计算机上。 所以我们日常访问的网站后台和app后端都是部署在Linux服务器上的,如果你不会Linux系统操作,那么很多…...
【React】react-redux+redux-toolkit实现状态管理
安装 npm install reduxjs/toolkit react-reduxRedux Toolkit 是官方推荐编写Redux的逻辑方式,用于简化书写方式React-redux 用来链接Redux和React组件之间的中间件 使用 定义数据 创建要管理的数据模块 store/module/counter.ts import { createSlice, Payloa…...
如何通过AI轻松制作PPT?让PPT一键生成变得简单又高效
如何通过AI轻松制作PPT?让PPT一键生成变得简单又高效!在这个信息化飞速发展的时代,PPT已经成为我们日常工作、学习和生活中不可或缺的一部分。无论是公司会议、学术报告,还是个人展示,PPT的作用都不容忽视。很多人对于…...
Springer |第七届2025年区块链、人工智能和可信系统国际会议
Springer |第七届2025年区块链、人工智能和可信系统国际会议 International Conference on Blockchain, Artificial Intelligence, and Trustworthy Systems 【重要日期】 论文提交截止日期:2025年03月01日(第2轮) 会议报名截止日期&…...
新一代SCADA: 宏集Panorama Suite 2025 正式发布,提供更灵活、符合人体工学且安全的应用体验
宏集科技宣布正式推出全新Panorama Suite 2025 SCADA软件!全新版本标志着 Panorama Suite的一个重要里程碑,代表了从 Panorama Suite 2022 开始并跨越三个版本(2022、2023、2025)的开发过程的顶峰。 此次重大发布集中在六个核心主…...
AI在电竞比分网中的主要应用场景
AI在电竞体育比分网的数据应用非常广泛,能够显著提升数据分析、预测、用户体验和商业价值。以下是AI在电竞比分网中的主要应用场景: 1. 实时数据采集与分析 比赛数据实时更新:AI通过自动化系统实时采集比赛数据(如击杀数、经济差、…...
前端快速生成接口方法
大家好,我是苏麟,今天聊一下OpenApi。 官网 : umijs/openapi - npm 安装命令 npm i --save-dev umijs/openapi 在根目录(项目目录下)创建文件 openapi.config.js import { generateService } from umijs/openapi// 自…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
