《硬件架构的艺术》笔记(七):处理字节顺序

介绍

 本章主要介绍字节顺序的的基本规则。(感觉偏软件了,不知道为啥那么会放进《硬件架构的艺术》这本书)。

定义

 字节顺序定义数据在计算机系统中的存储格式,描述存储器中的MSB和LSB的位置。对于数据始终以32位形式保存在存储器中的真32位系统,字节顺序没有实际意义,若要将字节或16位半字映射到存储器中32位字的系统,字节顺序不匹配就会影响数据的完整性。

大端模式:将MSB保存在最低存储器地址处。

小端模式:把LSB保存在最低存储器地址处。

下面是将0xAABBCCDD分别以大端和小端模式保存在存储器中。字节0表示最低存储器地址。

 下面是两种模式对应存储器地址:

 上面的是按字节形式处理数据,若按照半字处理数据时:

大端或小端模式:哪个更好

小端模式:首先访问最低位字节,访问其他字节数的汇编语言指令能按同样方式处理所有格式。地址偏移量和字节数1:1,多精度的数学程序也相对容易编写。

大端模式:首先访问高字节,容易判断正负,无需接收所有字节包就能知道符号信息。二进制转十进制程序特别有效。

 大端模式读取和转储16进制很容易,因为通常从低地址读到高地址。

常用计算机系统字节顺序:

 双字节顺序:可以在大端或小端模式间切换。

大多数嵌入式通信系统使用大端模式,因为这些处理器所写的老程序通常遵循网络字节顺序(大端模式)。

常用文件格式和其字节顺序:

 所以写入文件时,需要知道文件结构是怎样的,如大端模式机器些如小端文件,需要将字节顺序反转。

某些CPU可以设置处理器的控制寄存器切换为大端或小端(双字节)模式。

处理字节顺序不匹配的问题

TCP/IP族中的所有协议层都定义为大端模式,有时称为“网络字节顺序”。即使各终端计算机都是小端的,它们之间所传输的数据必须在通过网络传输之前转化成网络字节顺序,再在接收端转成小端模式。

访问32位存储器

字节地址和32位数据总线上特定位的关系:

 8位、16位、32位映射。

处理字节顺序不匹配

(这里标题和7.4都是一样的)

最简单方法:为系统选择一种“字节顺序类型”(大端小端里选一种),并将其他所有不同字节顺序模块转化成为目标自己顺序类型。

推荐目标的字节顺序类型与处理器的字节顺序类型相匹配。对第三方IP选型时要考虑的另一个因素就是确认其是否支持“双字节顺序”结构,以使IP可以方便的编程为大端模式或小端模式,以便与系统无缝集成。万一没有可编程选项,就需要将IP集成到SoC的过程中解决字节顺序不匹配问题。

两种连接相反字节顺序外设方法:将地址保持稳定或将位顺序保持稳定。

保持数据完整性(数据不变,地址变)

数据进位始终时从低位开始进到高位,这个对于大端和小端都是一样的,这种操作的顺序必须保留。

 图中系统中小端外设接收连续帧并将接收到的数据通过DMA/CPU保存到系统存储器,这里存储器、CPU和DMA都是大端模式。首先接收到连续帧的头部,然后是帧的其余部分。

 图中使用数据不变性将小端存储器连接到大端上,为了保证数据位顺寻保持不变,可以直接对访问外设RAM的存储器的地址进行修改,对地址的改动基于要传送数据的大小。映射关系如下图。

 根据上面逻辑可以编写HDL代码:

 地址不变

某些应用程序或系统不需要数据保持特定的次序,但是需要在字节顺序转换后字节数据保持在同样的地址区域,这里就需要使用地址不变的字节顺序转换。

这种方法不改变地址,而是直接改变数据。代码:

图中使用地址不变性将小端存储器连接到大端上(感觉这里上面的地址应该不变才对呀)。

软件字节交换

交换汇编指令

某些微控制器的指令集包含预定义的交换函数,软件可直接使用于实现针对特定应用的字节顺序转换。

交换库宏

某些软件程序语言同样提供了内置宏以在应用中对字节顺序转换实现字节交换。

协议特定宏

所有通信协议必须定义协议的字节顺序,以使两端节点知道如何通信。

限制

软件中实现交换功能会增加额外的开支。

字节顺序中性代码

避免由字节顺序所引发的问题的最好方式是在设计中使用字节顺序中性。

两种途径:1、将字节顺序选项作为软件可配置的选项。

2、设计(IP)中使用字节使能,并把解码的任务留给系统或者SoC。

字节顺序中性编码指南

1)数据存储和共享存储体——数据必须独立于顺序体系结构的格式保存。

2)字节交换宏

3)数据传送

4)数据类型

5)位域

6)编译器指令

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】内核的编译和加载

Linux内核是操作系统的核心,负责管理系统的硬件资源,并为用户空间的应用程序提供必要的服务。内核的编译和加载是操作系统开发和维护的重要环节。本文将详细介绍Linux内核的编译过程以及如何加载内核到系统中。 1. 引言 Linux内核的编译是一个复杂的过…

【Linux】DHCP服务实验

DHCP实验 实验前提 1、两个linux操作系统,一个为服务器端,一个为客户端 2、两个操作系统设置为仅主机模式 3、在客户端-虚拟网络编辑器-仅主机模式VMnet1-关闭DHCP 实验步骤 新建虚拟机

2022年计算机网络408考研真题解析

第一题: 解析:网络体系结构-数据链路层 在ISO网络参考模型中,运输层,网络层和数据链路层都实现了流量的控制功能,其中运输层实现的是端到端的流量控制,网络层实现的是整个网络的流量控制,数据链…

详解 【AVL树】

AVL树实现 1. AVL的概念AVL树的实现2.1 AVL树的结点结构2.2 AVL树的插入2.2.1 AVL树的插入的一个大概操作:2.2.2 AVL树的平衡因子更新2.2.3 平衡因子的停止条件2.2.4 再不考虑旋转的角度上实现AVL树的插入 2.3 旋转2.3.1 旋转的原则2.3.2 右单旋2.2.3 右单旋代码实现…

Python 爬虫从入门到(不)入狱学习笔记

爬虫的流程:从入门到入狱 1 获取网页内容1.1 发送 HTTP 请求1.2 Python 的 Requests 库1.2 实战:豆瓣电影 scrape_douban.py 2 解析网页内容2.1 HTML 网页结构2.2 Python 的 Beautiful Soup 库 3 存储或分析数据(略) 一般爬虫的基…

一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测

一区北方苍鹰算法优化创新改进Transformer!NGO-Transformer-LSTM多变量回归预测 目录 一区北方苍鹰算法优化创新改进Transformer!NGO-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab NGO-Transformer-LST…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第二十集:制作专门渲染HUD的相机HUD Camera和画布HUD Canvas

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、制作HUD Camera以及让两个相机同时渲染屏幕二、制作HUD Canvas 1.制作法力条Soul Orb引入库2.制作生命条Health读入数据3.制作吉欧统计数Geo Counter4.制作…

Opencv+ROS自编相机驱动

目录 一、工具 二、原理 代码 标定 三、总结 参考: 一、工具 opencv2ros ubuntu18.04 usb摄像头 二、原理 这里模仿usb_cam功能包对Opencv_ros进行修饰,加上相机参数和相机状态,难点在于相机参数的读取。 对于相机参数话题 camera…

计算机网络 | 7.网络安全

1.网络安全问题概述 &#xff08;1&#xff09;计算机网络面临的安全性威胁 <1>计算机网络面临的完全性威胁 计算机网络面临的两大类安全威胁&#xff1a;被动攻击和主动攻击 被动攻击 截获&#xff1a;从网络上窃听他人的通信内容。主动攻击 篡改&#xff1a;故意篡改…

机器翻译基础与模型 之四:模型训练

1、开放词表 1.1 大词表和未登陆词问题 理想情况下&#xff0c;机器翻译应该是一个开放词表&#xff08;Open Vocabulary&#xff09;的翻译任务。也就是&#xff0c;无论测试数据中包含什么样的词&#xff0c;机器翻译系统都应该能够正常翻译。 现实的情况是即使不断扩充词…

ThingsBoard规则链节点:Azure IoT Hub 节点详解

目录 引言 1. Azure IoT Hub 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 数据传输 3.2 数据分析 3.3 设备管理 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0c;提供了设备…

MongoDB相关问题

视频教程 【GeekHour】20分钟掌握MongoDB Complete MongoDB Tutorial by Net Ninja MongoDB开机后调用缓慢的原因及解决方法 问题分析&#xff1a; MongoDB开机后调用缓慢&#xff0c;通常是由于以下原因导致&#xff1a; 索引重建&#xff1a; MongoDB在启动时会重建索引…

三种蓝牙架构实现方案

一、蓝牙架构方案 1、hostcontroller双芯片标准架构 手机里面包含很多SoC或者模块&#xff0c;每颗SoC或者模块都有自己独有的功能&#xff0c;比如手机应用跑在AP芯片上&#xff0c;显示屏&#xff0c;3G/4G通信&#xff0c;WiFi/蓝牙等都有自己专门的SoC或者模块&#xff0…

sql工具!好用!爱用!

SQLynx的界面设计简洁明了&#xff0c;操作逻辑清晰易懂&#xff0c;没有复杂的图标和按钮&#xff0c;想对哪部分操作就在哪里点击右键&#xff0c;即使你是数据库小白也能轻松上手。 尽管SQLynx是一款免费的工具&#xff0c;但是它的功能却丝毫不逊色于其他付费产品&#xff…

UE5肉鸽游戏教程学习

学习地址推荐&#xff1a;UE5肉鸽项目实战教程_哔哩哔哩_bilibili

反向代理服务器的用途

代理服务器在网络中扮演着重要的角色&#xff0c;它们可以优化流量、保护服务器以及提高安全性。在代理服务器中&#xff0c;反向代理服务器是一种特殊类型&#xff0c;常用于Web服务器前&#xff0c;它具备多种功能&#xff0c;能够确保网络流量的顺畅传输。那么&#xff0c;让…

面试经典 150 题:205,55

205. 同构字符串 【解题思路】 来自大佬Krahets 【参考代码】 class Solution { public:bool isIsomorphic(string s, string t) {map<char, char> Smap, Tmap;for(int i0; i<s.size(); i){char a s[i], b t[i];//map容器存在该字符&#xff0c;且不等于之前映射…

信创改造 - TongRDS 替换 Redis

记得开放 6379 端口哦 1&#xff09;首先在服务器上安装好 TongRDS 2&#xff09;替换 redis 的 host&#xff0c;post&#xff0c;passwd 3&#xff09;TongRDS 兼容 jedis # 例如&#xff1a;更改原先 redis 中对应的 host&#xff0c;post&#xff0c;passwd 改成 TongRDS…

嵌入式工程师面试笔试总结——day1

第一章、进程与线程 1、什么是进程、线程&#xff0c;有什么区别&#xff1f; 进程是资源&#xff08; CPU 、内存等&#xff09;分配的基本单位&#xff0c;线程是 CPU 调度和分配的基本单位&#xff08;程序执行的最小单 位&#xff09;。同一时间&#xff0c;如果CPU 是单…

算法之区间和题目讲解

题干 难度&#xff1a;简单 题目分析 题目要求算出每个指定区间内元素的总和。 然而&#xff0c;区间在输入的最下面&#xff0c;所以按照暴力破解的思路&#xff0c;我们首先要遍历数组&#xff0c;把它的值都存进去。 然后&#xff0c;遍历下面的区间&#xff0c;从索引a…