我一直在查看一些大量使用$readmemh
和$writememh
.
我有一个模糊的理解,这些函数基本上是从内存中读取和写入的。它们的具体功能是什么,它们是如何工作的?
我同意要找到有关 readmem/writemem 的东西并不容易。你可以在这里找到一点: https ://www.fullchipdesign.com/readmemh.htm
反正这些函数就不多说了,语法是:
$readmem[hb]("File", ArrayName, StartAddr, EndAddr)
$writemem[hb]("File", ArrayName, StartAddr, EndAddr)
Verilog 对文件格式非常挑剔,文本文件中的位数必须与数组中的位数相匹配。
我建议你通过定义一个数组来玩一点,用数据填充它,用 writememh/writememb 写出来,然后打印出来。
像这样的东西应该让你开始(没有尝试过!)。
integer i;
reg [7:0] memory [0:15]; // 8 bit memory with 16 entries
initial begin
for (i=0; i<16; i++) begin
memory[i] = i;
end
$writememb("memory_binary.txt", memory);
$writememh("memory_hex.txt", memory);
end