[英]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.