使用单热信号设置寄存器

Setting registers using a one-hot signal

我有一组寄存器: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