2017-12-23 24 views
2

1 부이 : 난 항상 코드 중복을 피하기 위해의 Verilog의 기능을 사용할 들었다이유를 Verilog에 사용되는 기능 모듈

에게. 하지만 모듈로 할 수는 없습니까? 내 이해가 정확하다면, 모든 기능은 Verilog에서 모듈로 다시 쓰여질 수 있습니다. 단 모듈은 항상 블록 내부에서 인스턴스화 할 수 없습니다. 이 경우를 제외하고는 항상 모듈을 고수 할 수 있습니다. 나 맞아?

2 부 :

내가 올바른 생각하면, 모듈은 함수의 치료를받을 것을 왜의 Verilog 컴파일러 방식으로 기록 할 수 없습니다? 내 말은 왜 컴파일러가 프로그래머가 n 블록 안에 모듈을 인스턴스화하고 함수를 지원하지 못하게 할 수 없습니까?

+0

실제로 매개 변수와 생성 블록을 사용하여 재귀 모듈을 만들 수 있습니다. 이 [[재귀 적으로 정의 된 LAC를 사용하여 컴퓨터 아키텍처 용으로 작성한 32 비트 ALU] (https://gist.github.com/patrickroberts/3908606ece975eb4c20b4cd8f8b25dd6)를 확인하십시오. –

+0

@PatrickRoberts는 링크를 제공해 주셔서 감사합니다. – user3219492

+0

질문을 편집했습니다. 설명을 위해 링크의 최상위 모듈에 대한 사양의 일부 스크린 샷을 추가했습니다. 네가 체크 아웃 한 것을 기쁘게 생각한다. 호기심에서 모듈 ** 대신 코드 중복을 피하기 위해 함수를 사용하라는 말을 들었습니까? 아니면 일반적으로? 일반적으로 적용된 경우 좋은 조언이기 때문에 특정 상황에서 모듈이 더 적합하다고 생각하기 때문에 모듈에 대한 기능 사용을 적극적으로 방해하려는 의미로이 조언이 제공되었는지 여부는 명확하지 않습니다. –

답변

2
  1. module! = function. Verilog에서의 사용법은 완전히 다릅니다.

    함수는 실제로 확장 표현이며 표현식에 사용됩니다. 이것은 'assign'명령문의 rhs 표현식이나 모든 절차 블록 내부의 표현식에서 사용될 수 있습니다.

    • 기능 시간을 소비하지 수 있습니다.

    • 함수는 값을 반환해야합니다.


    모듈이 동시 절차 블록 (기능을 포함 할 수 있음) 하드웨어 계층 구조를 표현하고 포함하는 데 사용됩니다.

    • 모듈은 시간을 소비 할 수 있습니다.

    • 모듈에서 값을 반환 할 수 없습니다.


    은 잠재적으로 단일의 내부는 항상 차단 기능을 반환하는 항상 블록과 동등한 모듈을 작성 대체하는 기능을 만들 수 있습니다 (출력 포트는 값을 반환하지 않습니다). 그러나 이것이 바로 그 것이다.

  2. 당신이 틀립니다 :). 모든 Verilog 컴파일러가 준수해야하는 Verilog 표준이 있기 때문에 Verilog 컴파일러는 그런 식으로 작성할 수 없습니다. 그렇지 않으면 그것은 Verilog되지 않습니다.