2017-04-26 1 views
0

ALU 작성에 대한 숙제를하고 있는데 오류가 있습니다. 나는 그것을 찾지만 이유를 찾지 못했습니다. 왜 그렇게됩니까? 오류 메시지는 S2가 상수가 아닙니다. case ({S2,S1,S0})Verilog 오류 : XXX가 상수가 아닙니다.

```

module ALU(
    input S0, 
    input S1, 
    input S2, 
    input IN1, 
    input IN2, 
    input IN3, 
    output OUT1, 
    output OUT2 
    ); 


case ({S2,S1,S0})//{S2,S1,S0} 
3'b000: 
begin 
    assign OUT1=IN1&IN2;//and a1(OUT1,IN1,IN2); 
    assign OUT2 = 1'b0; 
end 
3'b001: 
begin 
    assign OUT1=IN1|IN2;//or o1(OUT1,IN1,IN2); 
    assign OUT2=1'b0; 
end 
3'b010: 
begin 
    assign OUT1=!IN1; 
    assign OUT2=1'b0; 
end 
3'b011: 
begin 
    assign OUT1=!IN2; 
    assign OUT2=1'b0; 
end 
3'b100: 
begin 
    assign OUT1=IN1^IN2; 
    assign OUT2=1'b0; 
end 
3'b101:FullAdder1 fa(.IN1(IN1),.IN2(IN2),.IN3(IN3),.OUT1(OUT1),.OUT2(OUT2)); 
3'b110:FullSubtracter1 fs(.IN1(IN1),.IN2(IN2),.IN3(IN3),.OUT1(OUT1),.OUT2(OUT2)); 
3'b111: 
begin 
    assign OUT1=1'b0; 
    assign OUT2=1'b0; 
end 
default: 
begin 
    assign OUT1=1'b0; 
    assign OUT2=1'b0; 
end 
endcase 
endmodule 

``` 
+1

실행 가능한 코드를 제공하지 않아서 오류가 재현되지 않습니다. 하지만, 그런 경우에는 모듈을 인스턴스화해서는 안됩니다. – toolic

+0

파일에''timescale 1ns/1ps'를 추가해야 할 수도 있습니다 – Weiby

답변

0

당신은 당신의 스위치의 경우 문에 할당하고 모듈 선언을 사용합니다. 컴파일러는이를 생성 문으로 사용합니다. 즉, 선택 값에 따라 디자인을 구체화 할 때 생성 된 디자인이 달라집니다.

하지만 정수 (매개 변수) 선택에서만 생성 명령문을 사용할 수 있습니다. 즉석에서 하드웨어를 다시 생성 할 수 없기 때문입니다. (다음 경우에 assign를 사용하지만 할당 <= 비 차단하지 않는) 경우 문 밖에서 가산기 및 감산기를 인스턴스화

  • 을 REGS로 출력을 통과

    • :

      당신은 할 두 가지가 별도의 결과 와이어가 해당 케이스에서 산출물에 의해 가치로 간주됩니다.

    이렇게하면 출력은 {S2,S1,S0}에 의해 제어되는 멀티플렉서의 출력에 연결되고 switch-case 문에서 지정한 것과 다른 입력을 갖게됩니다.

  • 관련 문제