verilog - 使用 one-hot 信号设置寄存器
问题描述
我有一组寄存器:reg [7:0] dataRegs [3:0]
并且我有一个单热信号:reg [3:0] oneHot
。我想将一个值写入由 one-hot 信号指示的寄存器。所以如果oneHot
= 4'b0010,那将写入dataRegs[2]
. 最好的方法是什么?
因此,要从特定寄存器读取,我有如下三态缓冲区:
for (i=0; i<4; i++) begin
output = oneHot[i]?dataRegs[i]:'bz;
end
但是,我不确定如何使用相同的oneHot
信号来写入该寄存器。我想知道是否有一种方法可以避免转换oneHot
为二进制数只是为了索引到 reg 数组。我可以使用寄存器的写使能来做些什么吗?
解决方案
当 i=0 时,只写入 reg[0]。当 i=1 时,只写入 reg[1] 等。
always @(posedge clk) begin
for (i=0; i<4; i++) begin
if (oneHot[i]) dataRegs[i] <= wdata;
end
end
推荐阅读
- numpy - 在 np.array 中传递 np.array
- r - 使用 aes_string 时如何包装 X 轴标签?
- python - 多个值python上的DataFrame条件
- apache-kafka - Kafka - 我应该从哪个 kafka 版本开始
- python - 在控制台界面中中断滚动文本的一般方法
- android - 不能在适配器中使用 kotlin-extension
- sql - 如何返回特定 ID SQL 的最大值和最小值
- javascript - 包含带有父 div 的 html 元素而不更改样式
- c - 从用户读取多个整数并进行一些迭代和计算
- python - python:groupby(合并)下一行与上一行,如果它们在文本数据中以相同的匹配模式开头