根据地址访问寄存器

Accessing register depending their address

有谁知道 Verilog 代码到 select 寄存器列表中的单个寄存器,具体取决于寄存器的地址?

例如

+------+--------------+---------+
| Name | Offset_value | Address |
+------+--------------+---------+
| Reg1 |           01 | 0x00    |
| Reg2 |           00 | 0x04    |
| Reg3 |           00 | 0x08    |
| Reg4 |           00 | 0x0C    |
+------+--------------+---------+

如果我给地址 0x08,那么我可以 read/write 从 Reg3 等等。 每个寄存器都是32位。

根据您的描述,您有多个触发器或寄存器要根据写入地址进行更新。

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

正如@Morgan 所建议的,您可以使用基于 flop 的内存来制作 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];