2011-05-15 4 views
4

Verilog 모듈에서 always 블록을 작성하는 방법에 관한 간단한 질문이 있습니다. 내의 Verilog 모듈 다음 입력이있는 경우
: Verilog 항상 (*) 기호를 사용하여 차단하십시오.

input  [31:0] PCplus4 ;  // Value of PC + 4 
input  [31:0] A;   // Value A, i.e. RSbus (Use Forwarded Value) 
input  [31:0] B;   // Value B, i.e. RTbus (Use Forwarded Value) 
input  [31:0] IMM;   // Extended Immediate Value 
input  [25:0] TARGET;   // Target Address for Jumps 
input   [3:0] BR;   // Branch Selector Input 

는 차이가 나는합니까이 항상 @ (*)

always @ (*) 

대신

always @ (PCplus4 or A or B or IMM or TARGET or BR) 

사용하는 경우가 있습니까 구문은 Verilog의 모든 버전에 유효합니까?

+1

SystemVerilog는 툴 체인이 디자이너 의도에 대해 추가 검사를 수행 할 수있게 해주는'always_comb' (및'always_ff' /'always_latch')를 소개했습니다. – Chiggs

답변

10

always @(*) 구문이 2001 년 IEEE Verilog Std에 추가되었습니다. 모든 최신 Verilog 도구 (시뮬레이터, 합성 등)는이 구문을 지원합니다. 여기

가 LRM (1800년부터 2009년까지)에서 인용이다

이벤트 제어의 불완전한 event_expression리스트 레지스터 트랜스퍼 레벨 (RTL) 시뮬레이션 버그의 일반적인 원인이다. 암시 event_expression, @의 *는 event_expression에 procedural_timing_ control_statement의 (성명 그룹이 될 수 있음) 문에서 읽을 수있는 모든 그물과 변수를 추가하여 이러한 문제를 제거하는 편리한 속기 .

두 줄의 코드가 같을 수도 있습니다 (코드는 always 블록의 내용에 따라 다름). 그러나 @* 구문을 유지하기가 더 쉽습니다.

3

always @(*)은 2001 년 개정판의 언어에 추가되었습니다. 최신 품질 도구의 모든 최신 버전에서 지원됩니다. 임의의 재사용을 목적으로 한 코드에서이 구문을 사용하는 데는 아무런 문제가 없지만 특히 사내 유틸리티가 관련된 경우 always @(*)을 지원하지 않는 오래된 도구가 발생할 가능성이 있습니다.

0

항상 블록이 의존하는 모든 와이어를 나열하기위한 바로 가기입니다. 그 전선은 "감도 목록"입니다. 그것을 사용하는 한가지 이점은 합성 된 코드가 전선이 "물리적으로"함께 연결되기 때문에 감성 목록 (posedge와 negedge 제외)에 넣은 것을 신경 쓸 일이 없다는 것입니다. 시뮬레이터는 목록을 사용하여 블록을 실행할 이벤트를 선택할 수 있습니다. 블록을 변경하고 목록을 업데이트하는 것을 잊어 버리면 시뮬레이션이 실제 합성 된 동작과 다를 수 있습니다.

0

비록 둘 다 동일하지만, [email protected](*)을 사용하면 시뮬레이션 합성 불일치가 발생하지 않습니다.

[email protected](a1 or a2 or ... or a15) 

지금 디자이너가 실수로이 목록에 A14를 가진 놓친 것으로 가정 : 는 다음과 같이 감도 목록에서 15 개 신호가 있다고 가정 할 수 있습니다. 합성 도구는이 사실을 무시하고이 블록 내의 RHS에있는 모든 신호가 민감도 목록에 있다고 가정하여 코드를 합성합니다. 반면 시뮬레이션 도구는 민감도 목록에 따라 다르기 때문에 다르게 동작합니다.

0

첫 번째 질문은 ....두 번째 시나리오에서 출력에 대한 트리거링을 유발할 수있는 유일한 입력이라고 생각하면됩니다. 이상적으로는 "입력의 변화"를 나타내는 *를 사용하는 것이 더 낫습니다. 또한 장황한 코드를 피하는 데 도움이됩니다.

두 번째 질문은 ..... verilog -2001에 소개되었으며 그 이후로 광범위하게 사용되었습니다.

관련 문제