簡體   English   中英

鑿子同步讀取存儲器

[英]Chisel synchronous read memory

我正在嘗試使用以下鑿子通過同步讀取生成內存的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

我做錯了什么使鑿子產生verilog,而verilog在always塊中讀取了內存?

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塊中,但是我認為對於綜合工具來說,獲取同步內存是不必要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM