Зубило синхронное считывание памяти

Я пытаюсь создать verilog для памяти с синхронным чтением с помощью следующего долота

val my_mem = Mem(Bits(width=64), 4096, seqRead=true)
val read_data = Reg(Bits(width=64))
when(io.re) {
 read_data := my_mem(io.addr)
}
io.ret_data := read_data

Однако это генерирует verilog с этим

wire[63:0] T1;
reg [63:0] read_data;
assign T1 = my_mem[io_addr];

always @(posedge clk) begin
if(io_re) begin
  read_data <= T1;
end

Что я делаю неправильно, чтобы заставить chisel генерировать verilog, который считывает память внутри блока always?


person Austin    schedule 21.06.2014    source источник
comment
Разве чтение уже не внутри блока always?   -  person ɹɐʎɯɐʞ    schedule 21.06.2014
comment
Чтение памяти - это оператор assign, тогда он просто регистрируется на флопе read_data, верно?   -  person Austin    schedule 21.06.2014
comment
Меня немного смущает ваш вопрос, мне кажется, что Chisel действительно сгенерировал синхронную память. Ваши инструменты синтеза должным образом не улавливают этот шаблон и не генерируют соответствующее оборудование?   -  person Chris    schedule 23.06.2014


Ответы (1)


В руководстве Chisel указано, что правильный способ создания синхронной памяти - это зарегистрировать АДРЕС, а не считанные данные. Хотя это немного неинтуитивно, но с повторной синхронизацией регистров, концептуально это одно и то же.

 val my_mem    = Mem(Bits(width=64), 4096, seqRead=true)
 val reg_raddr = Reg(UInt())
 val rdata     = my_mem(reg_raddr)
 when (io.re) { reg_raddr := io.addr }

Что генерирует это:

assign io_out = T0;
assign T0 = my_mem[reg_raddr];

always @(posedge clk) begin
  if(io_re) begin
    reg_raddr <= io_addr;
  end
end 

Считанные данные не находятся в блоке always, но я не считаю, что это необходимо для инструментов синтеза, чтобы понять, что вам нужна синхронная память.

person Chris    schedule 23.06.2014
comment
Хорошо, в этом есть смысл. Ваше право, я считаю, что для инструмента синтеза требуется только, чтобы адрес чтения был зарегистрирован внутри того же модуля. - person Austin; 23.06.2014