Я полагаю, что одной из ваших проблем является попытка назначить тип провода в блоке всегда.Попробуйте изменить объявление Data_Out на reg вместо wire.Следующие 2 примера скомпилированы для меня:
module RAM_HDL(Data_In, Data_Out, Address, RW);
reg [15:0] RAM [127:0];
input wire [15:0] Data_In;
output reg [15:0] Data_Out;
input wire [7:0] Address;
input wire RW;
initial
$readmemb("RAM_DATA.BIN", RAM);
always @(*)
begin
if (RW)
RAM[Address] <= Data_In;
Data_Out <= Address;
end
endmodule
обратите внимание на изменения.вход и выход объявлены на портах.Массив оперативной памяти не является одним из портов, а data_out является регистром
. Другой вариант - переместить назначение данных за пределы блока Always и сохранить его в виде провода:
module RAM_HDL(Data_In, Data_Out, Address, RW);
reg [15:0] RAM [127:0];
input wire [15:0] Data_In;
output wire [15:0] Data_Out;
input wire [7:0] Address;
input wire RW;
initial
$readmemb("RAM_DATA.BIN", RAM);
always @(*)
begin
if (RW)
RAM[Address] <= Data_In;
end
assign Data_Out = Address;
endmodule
изменения в основном одинаковые.объявления ввода-вывода и массив оперативной памяти удаляются из списка портов.Однако Data_Out теперь назначается вне блока Always, поэтому он может оставаться на связи.