我需要用一些二进制数据加载内存。我读到 $readmemb 可以用于此,甚至还有一种方法可以合成。
因此,我创建了另一个名为 RAM_IN 的模块(它不是测试平台模块)并“连接”到顶部模块。
在了解 $readmemb 之前,我使用的是以下代码:
initial
begin
in_ram [0] <= 32'b11111111_000000000000000000000000;
in_ram [1] <= 32'b10010111_000000000000000000000000;
in_ram [2] <= 32'b00110110_000000000000000000000000;
in_ram [3] <= 32'b00111110_000000000000000000000000;
in_ram [4] <= 32'b00111111_000000000000000000000000;
in_ram [5] <= 32'b00111110_000000000000000000000000;
end
但是像这样写100个数字对我来说太累了,所以像这样实现$readmemb:
module RAM_IN (pix_val, indx);
input [0:5] indx;
output [31:0] pix_val;
reg [31:0] pix_val;
reg [31:0] in_ram [0:4];
always @ (indx)
pix_val = in_ram [indx];
initial
begin
$readmemb("in_ram.txt", in_ram);
end
读取此文件的目的是最初将 100 个二进制值(模拟 10x10 图像的像素强度)一一加载到顶部模块(稍后将处理并吐出结果......)
我创建了一个 .txt 文件,它的内容看起来完全像这样
11111111000000000000000000000000
10010111000000000000000000000000
00110110000000000000000000000000
00111110000000000000000000000000
00111111000000000000000000000000
当我模拟时,modelsim 向我显示充满 xxxxxxxxxxxxxxxxx 的内存(不在乎),看起来好像没有将任何内容加载到内存中。
我不知道我做错了什么。可能不是 .txt 文件中的数字的处置。也许是因为我打算在另一个不是测试台的模块中加载带有 $readmemb 的文件?
PD:我做这个填充内存的过程的模拟只是为了实际目的,最终的目的是把Top模块设计成一个完整的SoC,我想我会用QSYS来做。但我在这方面很新,所以我还在学习。任何帮助都感激不尽!!!