当前位置: 首页 > 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)

相关文章:

  • 【科研绘图系列】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
  • 做网站要求付全款/亚马逊alexa
  • 株洲做网站公司/武汉seo优
  • wordpress网站没有阅读量/网络销售怎么找客户
  • 视频网站点击链接怎么做/视频号推广
  • 公司网站开发费用计入什么科目/如何把品牌推广出去
  • 做下载网站赚钱/活动营销推广方案