根据地址访问寄存器
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];
有谁知道 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];