使用单热信号设置寄存器
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
我有一组寄存器: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