2014-11-09 2 views
1

다음 Verilog HDL 코드가 있습니다. 이것은 기본적으로 ab을 추가하고 PG 단위, Carry 생성 단위 (cg_unit) 및 Sum 단위 (s_unit)를 갖는 2 비트 덧셈기입니다. ci은 2 비트 가산기의 캐리 인입니다. sel은 트로이를 활성화하는 것으로, 즉 s[1]의 값을 무효화합니다. coutminus1cout은 단순히 캐리 아웃 및 캐리 아웃 이전의 캐리입니다. 나는 다음과 같은 구문 오류가 몇 가지 이유를 들어구문 오류 '='

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 [1] = (~ s [1]); ' – thetypist

+0

's'가 다른 모듈에서 사용되기 때문에 결과물이 필요합니다. 이 상황에 어떻게 가야합니까? 또한 부울 대수가 표현식에있을 때'assign' 키워드가 필요하다고 생각했습니다. 이것은 사실이 아닌가? – thetypist

+0

'출력 레지스터'로 's'를 선언 할 때 다음과 같은 오류가 발생합니다 : '레지스터'가 모듈 "cla_s_unit_2bits", 인스턴스 "su1"의 출력 포트 "s"에 불법으로 연결되었습니다. " – thetypist

관련 문제