当前位置: 首页 > news >正文

【地址区间划分】

地址区间划分

  • 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.dtcms.com/a/233412.html

相关文章:

  • 【科研绘图系列】R语言绘制和弦图(Chord diagram plot)
  • 如何通过requests和time模块限制爬虫请求速率?
  • MATLAB读取文件内容:Excel、CSV和TXT文件解析
  • 极昆仑HybridRAG方案:突破原生 RAG 瓶颈,开启大模型应用新境界
  • Linux磁盘管理与文件系统
  • 七彩喜智慧养老平台:科技赋能下的市场蓝海,满足多样化养老服务需求
  • 利率的计量
  • ml307 二次开发
  • SpringBoot项目移动之后无法运行
  • 电路设计基础-3
  • 新建网站部署流程
  • 2025年阿里最新软件测试面试题:Web 测试+接口测试+App 测试
  • GitHub 开源 AI 图像超分辨率工具 upscayl 介绍
  • 为什么使用beego框架接收不到前端的请求体
  • 前端开发面试题总结-CSS篇
  • 编程边界突破:当AI能听懂你的需求时…
  • 【TinyWebServer】线程同步封装
  • Nuxt.js 入门总结教程
  • 前端使用 preview 插件预览docx文件
  • PPT转图片拼贴工具 v3.0
  • MYSQL(三)--服务器启动参数与配置
  • 云服务器代理商的合作模式
  • 【信息系统项目管理师-选择真题】2025上半年(第一批)综合知识答案和详解
  • 每日算法-250605
  • JVM 类初始化和类加载 详解
  • 代码训练LeetCode(24)数组乘积
  • LeetCode 热题 100 - 哈希 - 128
  • ES6中的Map与Set数据结构的简单应用
  • 自定义注解facade 实现切面 进行日志记录和参数校验
  • Python训练第四十五天