답변:
행동 코드는 더 높은 수준이며 일반적으로 합성 할 수 없습니다. 루프, 지연 및 "초기"문과 같은 구문은 동작입니다.
RTL 코드는 하위 수준이며 합성됩니다. 회로를 상호 연결된 레지스터와 해당 레지스터 사이의 신호에 대해 수행되는 작업의 조합으로 정의합니다.
Yahoo Answers에서 가져 왔으며 Google에서 즉시 발견되었습니다!
"레지스터 전송 레벨"코드는 레지스터와 조합 로직으로 기술 된 코드로, 이들 사이에 있으며 합성 툴의 입력으로 사용됩니다. 코드는 언어의 합성 가능한 부분 집합 [1]을 고수한다. 명시적인 지연은 없으며 모든 타이밍은 클럭 에지와 관련이 있습니다. 레벨 트리거 래치를 나타내는 구조는 일반적으로 피해야합니다. 레지스터는 일반적으로 타이밍 분석기에 세부 정보를 제공 할 수있는 소수의 클럭에서 클럭킹됩니다. 조합 로직은 일반적으로 단일 클럭 사이클 내에 정착하여 복잡성을 제한 할 것으로 예상된다 [2]. 게이트 레벨 모델보다 높은 레벨이지만 모든 클록 사이클에서 모든 레지스터의 값을 여전히 정의합니다.
"행동 적"코드는 일반적으로 시뮬레이션에 사용하기 위해 더 높은 수준에서 동작을 설명하는 코드이지만 신디사이저화할 수는 없습니다. 시뮬레이션에서 설계를 둘러싼 환경을 설명하는 데 사용될 수 있습니다. 개별 모듈의 자세한 RTL 설계를 수행하기 전에 전체 설계를 구현하기위한 설계의 초기 단계로 사용될 수 있습니다.
[1] 허용되는 정확한 부분 집합은 합성 도구마다 다릅니다.
[2] 시뮬레이션보다 단일 사이클 내에 정착하지 않으면 synthisis는 다른 결과를 낼 수 있으며 타이밍 분석기는 명시 적으로 지시하지 않는 한 위반을 표시합니다.
같은 언어이지만 다른 스타일이 사용됩니다. 경험을 통해 신속하게 구분할 수 있습니다. 각각의 특징은 다음과 같습니다.
동작 Verilog 코드는 일반적으로 initial begin
블록 내에서 위에서 아래로 실행되는 순차 컴퓨터 프로그램처럼 보입니다 . 출력이 콘솔과 같은 시뮬레이터 시설이 될 수 있기 때문에 당신은 최고 수준의 행동 모듈에 정의 된 입력 / 출력 포트가없는 찾을 수 있습니다 $display()
또는 파일 시스템 $open
또는 파형 댐퍼와 $dumpfile
와 $dumpvars
. 긴 시뮬레이션 시간 대기 #4000
및 작업 호출 등을 사용하여 구현 된 명령문 사이의 지연을 살펴보십시오 wishbone_master.checked_read(addr, value)
. 이러한 더 높은 수준의 구성의 경우 합성 된 기술과 동등한 것이 무엇인지 명확하지 않습니다.
연결 용 포트가 없으면 모듈에 부작용이없고 제거 할 수 있으므로 합성 용 Verilog에는 항상 입력 / 출력 포트가 있습니다 [1]. 지연은 아마도 특정 클럭의 사이클을 계산하여 구현 될 것입니다. 예를 들어 일부 Verilog 시스템 기능 $clog2(PARAMETER)
은 합성 코드에서 허용 될 수 있으므로 존재 여부 $function
가 보장되지는 않습니다. 합성 코드는 각각 민감도 목록이있는 많은 독립적 인 '프로세스'를 구성하는 경향이 있습니다. 일부 기술은 initial begin
메모리 초기화를위한 블록을 허용 하므로 다시 보장 할 수는 없습니다.
궁극적으로 디자이너는 작성한 코드의 목적을 알고 있으며 합성 툴셋이나 시뮬레이터에서 적절하게 호출합니다.
[1] JTAG와 같은 내부 칩 설비에 백도어 연결을 할 수있는 특정 IP 블록을 제외하고