2016-03-21 3 views
0

Кто-нибудь знает код verilog, чтобы выбрать один регистр из списка регистра в зависимости от адреса регистра.Доступ к регистру зависит от их адреса

Для примера

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

, если я дать адрес как 0x08, то я могу чтение/запись из Reg3 и так далее. Каждый регистр имеет 32 бита.

ответ

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 
0

Как @Morgan предложил, вы можете использовать память на основе флопа сделать рег банк,

reg [7:0] Reg_dat [0:254]; //255 8bit locations 
always @(posedge clk) begin 
    Reg_dat[write_reg_address] <= wr_reg; 
end 

Для записи определенного регистра необходимо указать write_reg_address и значение, которое вы хотите записать в регистре.

Для считывания определенного значения регистра вы должны предоставить только read_reg_address, и он дает значение этого конкретного регистра.

assign read_reg = Reg_dat[read_reg_address]; 
Смежные вопросы