首页 > 解决方案 > 使用 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 数组。我可以使用寄存器的写使能来做些什么吗?

标签: veriloghdl

解决方案


当 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

推荐阅读