В Verilog я пытаюсь использовать $readmemb для чтения.txt файла, но он только загружает xxxxx (не заботится) в память
Мне нужно загрузить память с некоторыми данными первоначально в двоичном формате. Я читал, что $readmemb может быть использован для этого, и есть даже способ сделать синтезируемым.
Итак, я создал другой модуль с именем RAM_IN (который не является модулем testbench) и "подключен" к верхнему модулю.
Прежде чем узнать о $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 в другой модуль, который не является testbench?
PD: Симуляция этого процесса заполнения памяти, которую я делаю только для практических целей, окончательное намерение состоит в том, чтобы превратить дизайн модуля Top в полноценный SoC, который, я думаю, я сделаю, используя QSYS. Но я очень новичок в этом, поэтому я все еще учусь. Любая помощь будет высоко ценится!!!
4 ответа
Я уже исправил это. Проблема в том, что modelsim не может найти файл.txt, я не знаю, где может быть заранее определенное место для таких файлов, но, посмотрев в Интернете, я обнаружил, что могу объявить в модуле Ram точный путь, например этот
initial
begin
$readmemb("C:/altera/15.0/Prueba5/in_ram.txt", in_ram);
end
Теперь modelsim загружает правильные данные. Спасибо всем.
Вы уверены, что запускаете симуляцию?
Ваш код с туберкулезом:
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
endmodule
module tb;
reg [0:5] indx;
wire [31:0] pix_val;
RAM_IN ram_in(pix_val, indx);
initial
begin
indx = 'b0;
$monitor ($realtime, " Read Data = %0b" ,pix_val);
repeat(4)
begin
#10;
indx = indx + 1'd1;
end
$finish;
end
endmodule
С тем же in_ram.txt.
Questasim:
QuestaSim-64 qverilog 10.4 Compiler 2014.12 Dec 2 2014
Start time: 18:27:01 on May 10,2016
qverilog me.v
-- Compiling module RAM_IN
-- Compiling module tb
Top level modules:
tb
Reading pref.tcl
# 10.4
# vsim -lib work tb -c -do "run -all; quit -f" -appendlog -l qverilog.log -vopt
# ** Note: (vsim-3812) Design is being optimized...
# // Questa Sim-64
# // Version 10.4 linux_x86_64 Dec 2 2014
# //
# // Copyright 1991-2014 Mentor Graphics Corporation
# // All Rights Reserved.
# //
# // THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION
# // WHICH IS THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS
# // LICENSORS AND IS SUBJECT TO LICENSE TERMS.
# // THIS DOCUMENT CONTAINS TRADE SECRETS AND COMMERCIAL OR FINANCIAL
# // INFORMATION THAT ARE PRIVILEGED, CONFIDENTIAL, AND EXEMPT FROM
# // DISCLOSURE UNDER THE FREEDOM OF INFORMATION ACT, 5 U.S.C. SECTION 552.
# // FURTHERMORE, THIS INFORMATION IS PROHIBITED FROM DISCLOSURE UNDER
# // THE TRADE SECRETS ACT, 18 U.S.C. SECTION 1905.
# //
# Loading work.tb(fast)
# run -all
# 0 Read Data = 11111111000000000000000000000000
# 10 Read Data = 10010111000000000000000000000000
# 20 Read Data = 110110000000000000000000000000
# 30 Read Data = 111110000000000000000000000000
# ** Note: $finish : me.v(34)
# Time: 40 ns Iteration: 0 Instance: /tb
# End time: 18:27:02 on May 10,2016, Elapsed time: 0:00:01
# Errors: 0, Warnings: 0
И симуляция:
У меня возникла та же проблема. Это произошло из-за того, что в файле присутствовали не двоичные символы.
Первоначально мой файл .txt выглядел как файл .txt, который я читаю.
Потом убрал все "-" и все заработало. Пожалуйста, проверьте файл .txt один раз, если какой-либо символ опечатан.
Вставка копии файла данных инициализации (например, "in_ram.txt") в каталог проекта..\ Simulation\modelsim\ также решила эту проблему для меня.