Итак, я только начал изучать Verilog, используя Quartus II, и я создавал простые коды для запуска синтеза и моделирования, чтобы привыкнуть к программному обеспечению. Этот код фактически взят из документа, который я читаю.
Я на самом деле решил проблему, но не понял почему. Если вы видите код до конца, провода i0, i5, i2, i3 определены. i5 ИСПОЛЬЗУЕТСЯ, чтобы быть i1.
Когда я запустил симуляцию с i1, это выдаст эту ошибку.
# Top level modules:
# work
# Model Technology ModelSim ALTERA vlog 10.1d Compiler 2012.11 Nov 2 2012
# -- Compiling module work_vlg_sample_tst
# -- Compiling module work_vlg_check_tst
# -- Compiling module work_vlg_vec_tst
# ** Error: Practice1.vt(182): 'i1' already declared in this scope.
# ** Error: c:/altera/13.0sp1/modelsim_ase/win32aloem/vlog failed.
# Executing ONERROR command at macro ./Practice1.do line 4
Итак, я взглянул на Practice1.vt, он даст следующее:
*// assign statements (if any)
work i1 (
// port map - connection between master ports and signals/registers
.i0(i0),
.i2(i2),
.i3(i3),
.i5(i5),
.s(s),
.y(y)
);
//*
Почему при моделировании используется i1 для определения этой части выражения? Что делает эта часть кода?
module work(
input wire[1:0] s,
input wire i0, i5, i2, i3,
output reg y
);
always @(s)
begin
if (s==2'b00)
y = i0;
else if (s==2'b01)
y = i5;
else if (s==2'b10)
y = i2;
else if (s==2'b11)
y = i3;
else
y = y;
end
endmodule
Извините за странный вопрос ... Просто новичок здесь. Заранее большое спасибо.