2014-11-09 9 views
1

У меня есть следующий код 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]; 
     ^

ответ

3

В этой линии:

coutminus1 = c[0]; 
cout = c[1]; 

ключевое слово assign отсутствует. Есть и другие проблемы с вашим кодом. Я бы предложил изменить его на что-то вроде этого:

module trojan 
(
    input [1:0] a, b, 
    input ci, sel, 
    output [1:0] s, 
    output cout, coutminus1 
); 

wire [1:0] c, p, g, tmp; 

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}, tmp); 

assign coutminus1 = c[0]; 
assign cout = c[1]; 
assign s = {(sel) ? ~tmp[1] : tmp[1], tmp[0]}; 

endmodule 
+0

Я пробовал это, но это дает мне четыре новых ошибки. Один из них: «Неправомерное поведение левой стороны. Выбор бит или выбор детали нельзя использовать в левой части этого назначения. Оскорбительное выражение: s [1] '' assign s [1] = (~ s [1]); ' – thetypist

+0

Мне нужно, чтобы' s' был выходным, потому что он используется в другом модуле. Как мне обойти эту ситуацию? Кроме того, я думал, что ключевое слово 'assign' было необходимо, когда в выражении находится булева алгебра. Разве это не так? – thetypist

+0

Я получаю следующую ошибку при объявлении '' '' '' '' '' '' '' '' ''' 'незаконно подключен к выходному порту' s 'модуля « cla_s_unit_2bits », экземпляр« su1 ».' – thetypist

Смежные вопросы