2013-09-29 2 views
2

저는 초보자로서 자일링스를 통해 Verilog를 작성하고 있습니다. 내가 자일링스를 사용하는 경우 자일링스의 위치 선언 변수의 차이점은 무엇입니까?

module mealy(
    nReset, 
    clk, 
    in, 
    out 
); 

    input nReset; 
    input clk; 
    input in; 
    output out; 
endmodule 

아래,이 변수를 설정하는 기본 옵션이 같은

내가 배운 포트 선언해야한다,이 같이 나타납니다 :

module mealy(
    input nReset, 
    input clk, 
    input in, 
    output out 
); 

endmodule 

을 가끔, 내가 사용하는 경우 두 번째 방법은 오류를 생성합니다. 두 가지 스타일의 차이점은 무엇입니까?


보조 문제, reg의 첫 번째 스타일로 출력을 선언 할 때하는 것은 제대로 작동 두 번째 스타일을 사용하는 경우

module mealy(
    in, 
    out 
); 

    output out; 
    input in; 
    reg out; 
endmodule 

을 즉, 그것은 당신이 두 번 선언 할 수 없다는 오류가 발생합니다.

module mealy(
    input in, 
    output out 
); 
    reg out; 
endmodule 

무엇이 문제입니까? 나는 단지 초심자인데 왜 내가 'reg'를 선언해야하는지 정확히 알지 못한다.

답변

3

Verilog-95 (IEEE 1364-1995)라고도하는 포트는 포트 선언을 길 찾기에서 분리하고 다시 reg 유형에서 분리해야합니다.

Verilog 2001 (IEEE 1364-2001) 이후 더 컴팩트 한 버전을 사용할 수 있습니다.

도구가 95 표준 만 지원하는 경우 2001 년 이후의 코드에서 오류가 발생합니다.

방향을 포함하여 새 포트 선언을 사용하는 경우 와이어가 아닌 경우에도 유형을 선언해야합니다.

module mealy(
    input in,    // Inputs are implicitly wires (reg would not make sense) 
    output  [1:0] out_x, // 2 bit wire type as output 
    output reg [1:0] out_y // 2 Bit reg type as output 
); 
endmodule 

reg 유형과 wire 유형의 차이는 조회해야합니다. 기본적으로 시뮬레이션 최적화입니다. SystemVerilog를 사용하는 경우 logic 유형으로 대체 할 수 있습니다.

Wire은 포트에 의해 구동되거나 명령문을 지정합니다. regalways 또는 initial 블록 안에 할당됩니다. reg이 아니며은 플립 플롭을 의미합니다.

+0

도움을 주신 Morgan에게 감사드립니다. 또 다른 질문은 같은 방식으로 선언 될 수없는 이유입니다. 다른 질문에 대한 코드를 추가했습니다. 한 가지 더 질문에 도움주세요. – dskim

+0

두 가지 질문을했습니다. 두 가지 모두에 대해 오류 메시지를 제공해야합니다. 두 번째 오류는 쉽습니다. 이전 스타일과 새 스타일 선언을 섞어서 사용할 수 없습니다. 첫 번째 오류는 분명하지 않습니다. '가끔'이라고 말하면 오류가 발생합니다. 언제? 오류가 무엇입니까? '밖으로'철사? 'default_nettype'을 어딘가에 설정 했습니까? – EML

+0

@EML 나는 대답이 아니라 질문에 대해 논평하려고 한 것 같아요. 가장 큰 문제는 '차이점은 무엇입니까'라는 오류가 아니라 오류와 관련하여 정확한 도구 오류가 관련성이 없다는 것입니다. – Morgan