У меня есть следующий код Verilog HDL. Это, в основном, двухбитовый сумматор, который добавляет a
и b
, и имеет блок PG, блок генерирования несущей (cg_unit
) и единица суммирования (s_unit
). ci
- это перенос для двухбитового сумматора. sel
- это то, что активирует троян, то есть отрицает значение s[1]
. coutminus1
и cout
- это просто выполнение и перенос, предшествующий выполнению, соответственно.Ошибка синтаксиса '='
module trojan
(
input [1:0] a, b,
input ci, sel,
output [1:0] s,
output cout, coutminus1
);
wire [1:0] c, p, g;
cla_pg_unit_2bits pgu1(a, b, p, g);
cla_cg_unit_2bits cgu1(p, g, ci, c);
cla_s_unit_2bits su1(p, {c[0], ci}, s);
coutminus1 = c[0];
cout = c[1];
[email protected](sel)
begin
if (sel == 1)
assign s[1] = ~s[1];
else
assign s[1] = s[1];
end
endmodule
По некоторым причинам я получаю следующий синтаксис ошибки:
Following Verilog source has the following syntax error: token is '='
coutminus1 = c[0];
^
Я пробовал это, но это дает мне четыре новых ошибки. Один из них: «Неправомерное поведение левой стороны. Выбор бит или выбор детали нельзя использовать в левой части этого назначения. Оскорбительное выражение: s [1] '' assign s [1] = (~ s [1]); ' – thetypist
Мне нужно, чтобы' s' был выходным, потому что он используется в другом модуле. Как мне обойти эту ситуацию? Кроме того, я думал, что ключевое слово 'assign' было необходимо, когда в выражении находится булева алгебра. Разве это не так? – thetypist
Я получаю следующую ошибку при объявлении '' '' '' '' '' '' '' '' ''' 'незаконно подключен к выходному порту' s 'модуля « cla_s_unit_2bits », экземпляр« su1 ».' – thetypist