地址区间划分

  • 1 decode_addr
    • 1.1 地址区间
    • 1.2 变式

本篇博客主要介绍对地址区间划分的一个比较巧妙参数化的做法。

1 decode_addr

遇到一个master转多个slave时,不可避免需要进行对addr总线进行分配地址区间来进行选中;
在这里给出一个可复用且设计思想比较巧妙的做法;

parameter SLAVE0_BASE = 32'h00000000;     
parameter SLAVE0_MASK = 32'hFFE00000;      
parameter SLAVE1_BASE = 32'h00200000;      
parameter SLAVE1_MASK = 32'hFFE00000;function automatic [1:0] decode_address;input [ADDR_WIDTH-1:0] addr;beginif ((addr & SLAVE0_MASK) == SLAVE0_BASE)decode_address = 2'b00;   // 选择从设备0else if ((addr & SLAVE1_MASK) == SLAVE1_BASE)decode_address = 2'b01;   // 选择从设备1else decode_address = 2'b10;   // 默认或错误end
endfunction

1.1 地址区间

根据代码中的参数和地址解码逻辑,地址范围计算如下:

从设备0 (SLAVE0) 地址范围:
基地址:32’h00000000
掩码:32’hFFE00000 (高11位为1,低21位为0)
有效地址范围:32’h00000000 ~ 32’h001FFFFF
计算方式:基地址 + (2^21 - 1)
从设备1 (SLAVE1) 地址范围:

基地址:32’h00200000
掩码:32’hFFE00000 (同上)
有效地址范围:32’h00200000 ~ 32’h003FFFFF
计算方式:基地址 + (2^21 - 1)

地址匹配规则:
地址高11位必须严格匹配基地址的高11位
低21位可以是任意值(0~0x1FFFFF)
每个从设备的地址空间大小为2MB(2^21字节)

1.2 变式

在这里我想选择地址区间是1MB的时候,只需修改参数即可,代码如下:

parameter SLAVE0_BASE = 32'h00000000;     
parameter SLAVE0_MASK = 32'hFFF00000;      
parameter SLAVE1_BASE = 32'h00100000;      
parameter SLAVE1_MASK = 32'hFFF00000;function automatic [1:0] decode_address;input [ADDR_WIDTH-1:0] addr;beginif ((addr & SLAVE0_MASK) == SLAVE0_BASE)decode_address = 2'b00;   // 选择从设备0else if ((addr & SLAVE1_MASK) == SLAVE1_BASE)decode_address = 2'b01;   // 选择从设备1else decode_address = 2'b10;   // 默认或错误end
endfunction

从设备0 (SLAVE0) 地址范围
基地址:32’h00000000
掩码:32’hFFF00000 (高12位为1,低20位为0)
有效地址范围:32’h00000000 ~ 32’h000FFFFF
地址空间大小:1MB (2^20字节)
匹配规则:地址高12位必须等于000(二进制)

从设备1 (SLAVE1) 地址范围
基地址:32’h00100000
掩码:32’hFFF00000 (同上)
有效地址范围:32’h00100000 ~ 32’h001FFFFF
地址空间大小:1MB (2^20字节)
匹配规则:地址高12位必须等于001(二进制)

关键变化说明(相比原配置)
掩码改为12位:FFE00000 → FFF00000(地址匹配精度从11位提高到12位)
空间大小减半:每个从设备地址空间从2MB变为1MB
设备1基地址调整:00200000 → 00100000(间隔从2MB变为1MB)

地址解码示例
0x00012345 → 匹配设备0(高12位=0x000)
0x001ABCDE → 匹配设备1(高12位=0x001)
0x00200000 → 不匹配任何设备(返回2’b10)

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql复合查询mysql子查询

基础表结构创建 表结构包含主外键约束和字符集配置,确保数据完整性 部门表 CREATE TABLE dept (deptno int NOT NULL COMMENT 部门编号,dname varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 部门名称,loc varchar(20) CHARACTE…

vlan(虚拟局域网)逻辑图解+实验详解

VLAN(Virtual Local Area Network,虚拟局域网) 是一种通过逻辑方式(非物理连接)将网络设备划分为多个独立广播域的技术。它允许管理员在同一个物理网络中创建多个隔离的虚拟网络,从而提升网络的安全性、灵…

2025年—Comfy UI 和 Stable Diffusion底层原理

为什么要先讲SD原理 ? 逻辑理解: ComfyUI是节点式操作,需要自行搭建工作流,理解原理才能灵活定制工作流学习效率: 基础原理不懂会导致后续学习吃力,原理是掌握ComfyUI的关键核心价值: ComfyUI最有价值的功能就是自主搭建工作流&a…

深入理解C#中的Web API:构建现代化HTTP服务的完整指南

在当今的软件开发领域,构建高效、可扩展的Web服务已成为一项基本需求。作为.NET开发者,C#中的Web API框架为我们提供了创建RESTful服务的强大工具。本文将全面探讨Web API的核心概念、实现细节和最佳实践,帮助您掌握这一关键技术。 一、Web A…

起重机指挥人员在工作中需要注意哪些安全事项?

起重机指挥人员在作业中承担着协调设备运行、保障作业安全的关键职责,其安全操作直接关系到整个起重作业的安全性。以下从作业前、作业中、作业后的全流程,详细说明指挥人员需注意的安全事项: 一、作业前的安全准备 资质与状态检查&#xff…

【高等数学】傅里叶级数逼近例子

f ( x ) π 2 − ∣ x ∣ f(x)\frac{\pi}{2}-|x| f(x)2π​−∣x∣ 由于是偶函数只需要求 cos ⁡ ( n x ) , 1 \cos(nx),1 cos(nx),1 的系数 a n 0 a_n 0 an​0, n n n 是偶数 a n 1 ( 2 n − 1 ) 2 a_n \frac{1}{(2n-1)^2} an​(2n−1)21​, n n n 是奇数 则 f ( x )…

PowerBI企业运营分析—全动态盈亏平衡分析

PowerBI企业运营分析—全动态盈亏平衡分析 欢迎来到Powerbi小课堂,在竞争激烈的市场环境中,企业运营分析平台成为提升竞争力的核心工具。 该平台通过整合多源数据,实现关键指标的实时监控,从而迅速洞察业务动态,精准…

用ApiFox MCP一键生成接口文档,做接口测试

日常开发过程中,尤其是针对长期维护的老旧项目,许多开发者都会遇到一系列相同的困扰:由于项目早期缺乏严格的开发规范和接口管理策略,导致接口文档缺失,甚至连基本的接口说明都难以找到。此外,由于缺乏规范…

26考研 | 王道 | 计算机组成原理 | 三、存储系统

26考研 | 王道 | 计算机组成原理 | 三、存储系统 文章目录 26考研 | 王道 | 计算机组成原理 | 三、存储系统3.1 存储系统基本概念3.2 主存储器1. 主存储器的基本组成2. SRAM与DRAM1.DRAM和SRAM对比2.DRAM的刷新3.DRAM的地址线复用技术 3. 只读存储器ROM4.双端口RAM和多模块存储…

IDEA 开发PHP配置调试插件XDebug

1、安装PHP环境 为了方便,使用的PhpStudy。 安装路径:D:\resources\phpstudy_pro\Extensions\php\php7.3.4nts 2、下载Xdebug Xdebug: Downloads 选择对应的版本下载,本次使用的是7.3。 3、配置Xdebug 在php.ini中添加Xdebug配置。 D…

Go 语言的 GC 垃圾回收

序言 垃圾回收(Garbage Collection,简称 GC)机制 是一种自动内存管理技术,主要用于在程序运行时自动识别并释放不再使用的内存空间,防止内存泄漏和不必要的资源浪费。这篇文章让我们来看一下 Go 语言的垃圾回收机制是如…

60天python训练计划----day45

DAY 45 Tensorboard使用介绍 知识点回顾: tensorboard的发展历史和原理tensorboard的常见操作tensorboard在cifar上的实战:MLP和CNN模型 之前的内容中,我们在神经网络训练中,为了帮助自己理解,借用了很多的组件&#x…

RocketMQ基础概念的理解

1、生产者 生产者和主题之间存在多对多关系。一个生产者可以向多个主题发送消息,一个主题可以接收来自多个生产者的消息。这种多对多关系有助于提高性能扩展和灾难恢复能力。 2、消费者以及消费者组 一个队列可以被多个消费者(其中这多个消费者必须分…

Flash烧录速度和加载配置速度(纯FPGA ZYNQ)

在工程综合完成或者implement完成后,打开综合设计或者实现设计。 toots--->Edit Device Properties--->打开比特流设置 将bitstream进行压缩 上图中,时钟频率选择的档位有限,最大为66MHZ io的bus width可以设置为x1,x2,x4 vivado在设计…

优化09-表连接

一、表连接介绍 表连接类型 表连接是关系型数据库关键特性,在关系型数据库中,表连接分为三类:循环嵌套连接(Nested Loops Join)、哈希连接(Hash Join)、合并排序连接(Merge Sort J…

Dify工作流实践—根据word需求文档编写测试用例到Excel中

前言 这篇文章依赖到的操作可查阅我之前的文章: dify里的大模型是怎么添加进来的:在Windows本地部署Dify详细操作 flask 框架app.route()函数的开发和调用:PythonWeb开发框架—Flask工程创建和app.route使用详解 结构化提示词的编写&…

AWTK 嵌入式Linux平台实现多点触控缩放旋转以及触点丢点问题解决

前言 最近涉及海图的功能交互,多点触摸又开始找麻烦。 在PC/Web平台awtk是通过底层的sdl2库来实现多点触摸,但是在嵌入式Linux平台,可能是考虑到性能原因,awtk并没有采用sdl库来做事件处理,而是自己实现一个awtk-lin…

Diffusion Planner:扩散模型重塑自动驾驶路径规划(ICLR‘25)

1. 概述 2025年2月14日,清华大学AIR智能产业研究院联合毫末智行、中科院自动化所和香港中文大学团队,在ICLR 2025会议上发布了Diffusion Planner——一种创新性的基于Diffusion Transformer的自动驾驶规划模型架构。该系统联合建模周车运动预测与自车行…

ESP32对接巴法云实现配网

目录 序言准备工作巴法云注册与使用Arduino准备 开发开始配网 序言 本文部分内容摘抄原创作者巴法云-做优秀的物联网平台 代码有部分修改并测试运行正常 巴法云支持免费用户通过开发对接实现各智能音箱设备语音控制智能家居设备,并有自己的App进行配网和控制&…

深度学习习题3

1.训练神经网络过程中,损失函数在一些时期(Epoch)不再减小, 原因可能是: 1.学习率太低 2.正则参数太大 3.卡在了局部最小值 A1 and 2 B. 2 and 3 C. 1 and 3 D. 都是 2.对于分类任务,我们不是将神经网络中的随机权重…