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

【ARM AMBA APB 入门 1.1 -- APB 读写寄存器 RTL 实现】


请阅读【ARM AMBA 总线 文章专栏导读】


文章目录

    • APB 寄存器访问
      • APB 读寄存器 RTL 代码实现
      • APB 写寄存器 RTL 代码实现

APB 寄存器访问

在这里插入图片描述

APB 读寄存器 RTL 代码实现

APB 总线读寄存器操作代码实现:

wire [31:0] SOC_PLL_CFG_REG;
wire [31:0] SOC_PLL_LOCK_REG;
wire [31:0] SOC_PLL_BP_REG;always@(posedge clk) beginif(psel & (~pwrite)) begincase(paddr)32'b00000000 + 32'h10 : prdata <= SOC_PLL_CFG_REG;32'b00000000 + 32'h14 : prdata <= SOC_PLL_LOCK_REG;32'b00000000 + 32'h18 : prdata <= SOC_PLL_BP_REG;default: prdata <= 32'hdeadbeaf;endcaseend
endassign SOC_PLL_CFG_REG[31:24] = 8'b0;
assign SOC_PLL_CFG_REG[23:12] = soc_pll_cfg_reg_rd;
assign SOC_PLL_CFG_REG[11:9] = soc_pll_postdiv1;
assign SOC_PLL_CFG_REG[8:6] = SOC_PLL0_postdiv2;
assign SOC_PLL_CFG_REG[5:0] = soc_pll_postdvi2;

从上面代码可以看到 当 psel 为 高,且 pwrite 为 低的时候 去判断 paddr 的地址对应哪个寄存器的地址,然后将该寄存器的值赋值给 prdata。

同时也可以看到,SOC_PLL_CFG_REG 位域中的各个值,来源于不同的信号。

APB 写寄存器 RTL 代码实现

reg_wr = psel & pwrite & penable;
reg_rd = psel & (~pwrite)
assign soc_pll_cfg_reg_wr = (paddr == 32'h00000000 + 32'h10) & reg_wr;
assign soc_pll_cfg_reg_rd = (paddr == 32'h00000000 + 32'h10) & reg_rd;always@(posedge clk or negedge rst_n) beginif(!rst_n) beginsoc_pll_cfg_reg_rd < 12'd57;endelse if (soc_pll_cfg_reg_wr) beginsoc_pll_cfg_reg_rd < pwdata[23:12];end
endalways@(posedge clk or negedge rst_n) beginif(!rst_n) beginsoc_pll_postdiv1 < 3'b0;endelse if (soc_pll_cfg_reg_wr) beginsoc_pll_postdiv1 < pwdata[11:9];end
endalways@(posedge clk or negedge rst_n) beginif(!rst_n) beginsoc_pll_postdiv2 < 3'b3;endelse if (soc_pll_cfg_reg_wr) beginsoc_pll_postdvi2 < pwdata[8:6];end
end
always@(posedge clk or negedge rst_n) beginif(!rst_n) beginsoc_pll_postdvi2 < 6'd4;endelse if (soc_pll_cfg_reg_wr) beginsoc_pll_postdvi2 < pwdata[5:0];end
end

从上面的代码中可以看到,在写 SOC_PLL_CFG_REG 这个寄存器的的时候需要先保证 soc_pll_cfg_reg_wr 这个信号为高,这个信号的作用是保证 寄存器的地址已经 APB 总线都准备好了之后才进行写操作。

http://www.xdnf.cn/news/9742.html

相关文章:

  • 443端口:HTTPS通信的安全基石
  • 奥威BI+AI——高效智能数据分析工具,引领数据分析新时代
  • 零基础认知企业级数据分析平台如何落实数据建模(GAI)
  • React---day4
  • LeetCode 395.至少有K个重复字符的最长子串
  • 基于大模型的重度膝关节骨关节炎全流程预测与治疗方案研究
  • c++ opencv 形态学操作腐蚀和膨胀
  • 三套知识系统实践对比:谁真正融入了研发流程?
  • 经典SQL查询问题的练习第一天
  • Spring Tool Suite(STS)4国内下载与安装教程
  • 最优控制:从变分法到庞特里亚金原理
  • Rocky Linux上安装Go
  • 数据可视化--使用matplotlib绘制高级图表
  • 理解频域滤波
  • 构建一个“论文检索 + 推理”知识库服务,支持用户上传 PDF/LATEX 源码后,秒级检索并获得基于内容的问答、摘要、引用等功能
  • ChemDraw 2023|Win英文|化学结构编辑器|安装教程
  • Kotlin 中集合遍历有哪几种方式?
  • Xshell连接Linux时出现Warning:The remote SSH server rejected X11 forwarding request.
  • Linux---系统守护systemd(System Daemon)
  • 江西某石灰石矿边坡自动化监测
  • 【Linux 基础知识系列】第二篇-Linux 发行版概述
  • LVS +Keepalived高可用群集
  • 设计模式-工厂方法模式
  • 【Python 进阶】抽象基类(Abstract Base Class)
  • 编译原理笔记 2025/4/22
  • 容器(如 Docker)中,通常不建议运行多个进程或要求进程必须运行在前台
  • Linux系列-2 Shell常用命令收集
  • fingerprint2浏览器指纹使用记录
  • Spring框架学习day4--Spring集成Mybatis(IOC)
  • Vue 3 的路由管理