根据寄存器的地址,有没有人知道 verilog 代码从寄存器列表中选择单个寄存器。
例如
+------+--------------+---------+
| Name | Offset_value | Address |
+------+--------------+---------+
| Reg1 | 01 | 0x00 |
| Reg2 | 00 | 0x04 |
| Reg3 | 00 | 0x08 |
| Reg4 | 00 | 0x0C |
+------+--------------+---------+
如果我将地址设为0x08,那么我可以从Reg3读取/写入,依此类推。 每个寄存器都是32位。
答案 0 :(得分:0)
根据您的描述,您有多个基于写地址要更新的触发器或寄存器。
always @(posedge clk) begin
case ( address )
8'h00 : Reg1 <= data;
8'h04 : Reg2 <= data;
endcase
end
但是,如果您想使用内存结构而不是REG1 / 2/3
reg [7:0] Reg_dat [0:254]; //255 8bit locations
always @(posedge clk) begin
Reg_dat[address] <= data;
end
答案 1 :(得分:0)
正如@Morgan建议的那样,你可以使用基于翻牌的内存制作reg bank,
reg [7:0] Reg_dat [0:254]; //255 8bit locations
always @(posedge clk) begin
Reg_dat[write_reg_address] <= wr_reg;
end
要编写特定的reg,您必须提供write_reg_address和要在寄存器中写入的值。
为了读取特定的寄存器值,您必须只提供read_reg_address并且它给出该特定寄存器的值。
assign read_reg = Reg_dat[read_reg_address];