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

FPGA基础 -- Verilog 访问寄存器数组的指定位示例

涉及 Verilog 中的多维寄存器数组的访问 技巧。我们以如下定义为例展开讲解:

reg [7:0] reg_array [0:15];  // 定义了16个8位寄存器

一、访问指定偏移寄存器

这里的 reg_array 是一个 16 组、每组 8bit 的一维数组,数组下标范围为 0~15。访问其中第 i 个寄存器,只需要使用:

reg_array[i]

示例:

reg [3:0] index;
always @(posedge clk) begindata_out <= reg_array[index];  // 访问 reg_array[index] 的整个 8 位数据
end

二、访问 指定寄存器的某一位

reg_array[i] 是一个 8-bit 的向量,因此你可以像访问普通向量一样访问某一位:

reg_array[i][bit_pos]
  • i:寄存器编号(偏移)
  • bit_pos:位编号(0~7)

示例:

reg [3:0] index;
reg [2:0] bit_sel;
always @(posedge clk) beginsingle_bit <= reg_array[index][bit_sel];  // 访问 reg_array[index] 的 bit_sel 位
end

三、修改某一寄存器的某一位

如果你想置位某一位,比如将第 5 个寄存器的第 3 位置为 1,可以写:

reg_array[5][3] <= 1'b1;

如果你要用变量控制,写法如下:

reg [3:0] idx;
reg [2:0] pos;
always @(posedge clk) beginreg_array[idx][pos] <= 1'b1;
end

四、访问某个寄存器的多个连续 bit

你可以这样写:

reg [3:0] idx;
always @(posedge clk) beginnibble <= reg_array[idx][7:4];  // 访问 reg_array[idx] 的高 4 位
end

也支持组合切片赋值:

reg_array[idx][3:0] <= 4'b1010;

五、组合使用:同时访问多位多个寄存器

例如你要拼接两个寄存器的高4位:

wire [7:0] combined = {reg_array[3][7:4], reg_array[4][7:4]};

总结

类型Verilog 语法示例
访问某个寄存器reg_array[i]reg_array[3]
访问某寄存器某一位reg_array[i][j]reg_array[3][2]
访问某寄存器某一段位reg_array[i][MSB:LSB]reg_array[3][7:4]
动态访问位reg_array[i][bit_sel]reg_array[idx][pos]
组合访问多个寄存器的位{reg_array[i][3:0], reg_array[j][3:0]}{reg_array[3][3:0], reg_array[4][3:0]}
http://www.dtcms.com/a/281896.html

相关文章:

  • 第六章 OBProxy 路由与使用运维
  • [Linux入门] Linux 账号和权限管理入门:从基础到实践
  • Linux实现进程之间Socket通信详解
  • 30 天自制 C++ 服务器--Day3
  • NO.6数据结构树|二叉树|满二叉树|完全二叉树|顺序存储|链式存储|先序|中序|后序|层序遍历
  • 【SpringBoot】实战-开发接口-用户-注册
  • 参数检验?非参数检验?
  • 【openbmc3】时间相关
  • 代码随想录算法训练营第五十一天|图论part2
  • 【FreeRTOS】03任务管理
  • 工业相机GigE数据接口的优势及应用
  • django安装、跨域、缓存、令牌、路由、中间件等配置
  • Jenkins全方位CI/CD实战指南
  • LabVIEW Occurrence功能
  • 嵌入式Linux(RV1126)系统定制中的编译与引导问题调试报告
  • 【RTSP从零实践】12、TCP传输H264格式RTP包(RTP_over_TCP)的RTSP服务器(附带源码)
  • 基于WebRTC技术实现一个在线课堂系统
  • el-input 回显怎么用符号¥和变量拼接展示?
  • Spring Boot 解决跨域问题
  • Spring Boot - Spring Boot 集成 MyBatis 分页实现 手写 SQL 分页
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(5):语法+单词
  • Buffer Pool
  • css 如何实现大屏4个占位 中屏2个 小屏幕1个
  • Samba服务器
  • Git版本控制完全指南:从入门到精通
  • 网络编程/Java面试/TCPUDP区别
  • 基于spring boot养老院老人健康监护平台设计与实现
  • SFT:大型语言模型专业化定制的核心技术体系——原理、创新与应用全景
  • docker run elasticsearch 报错
  • JAVA面试宝典 -《分布式ID生成器:Snowflake优化变种》