이 연산자를 Verilog에서“+ :”라고합니다.


14

나는 Verilog 테스트 사례를 겪고 있으며 성명서를 발견했다.

assign XYZ = PQR_AR[44*8 +: 64];

"+ :"연산자는 무엇입니까? 나는 이것을 Google에서 찾으려고 시도했지만 관련 답변을 얻지 못했습니다.

답변:


22

이 구문을 indexed part-select 라고합니다 . 첫 번째 항은 비트 오프셋이고 두 번째 항은 폭입니다. 오프셋에 변수를 지정할 수 있지만 너비는 일정해야합니다.

SystemVerilog 2012 LRM의 예 :

logic [31: 0] a_vect;
logic [0 :31] b_vect;

logic [63: 0] dword;
integer sel;

a_vect[ 0 +: 8] // == a_vect[ 7 : 0]
a_vect[15 -: 8] // == a_vect[15 : 8]
b_vect[ 0 +: 8] // == b_vect[0 : 7]
b_vect[15 -: 8] // == b_vect[8 :15]

dword[8*sel +: 8] // variable part-select with fixed width

2

마지막으로 소스 페이지가 있는데이를 Indexed Vector part Select ( "+ :")라고합니다 .

좀 더 설명하기 위해

PQR_AR[44*8 +: 64];

Verilog 2000에 추가 된 Indexed vector part select를 사용하면 전체 버스를 선택하는 대신 버스의 일부를 선택할 수 있습니다.

44 * 8 파트는 파트 선택 변수의 시작점이고 64는 파트 선택의 너비이며 일정합니다. 이는 초기에 초기화 한 경우를 의미합니다

input [415:0] PQR;

우리는 PQR의 특정 부분을 사용하여 선택하고 있습니다.

PQR_AR[44*8 +: 64];

즉 PQR_AR [352+ : 64]이거나 0에서 415 사이에서 352에서 415 사이의 부분을 취하고 있음을 의미합니다.


LRM에서 파생 된 dwikle answer에서 다음과 같이 버스를 초기화 할 때 : input [415 : 0] PQR; 그런 다음 PQR_AR [44 * 8 + : 64]는 PQR_AR [415 : 352]가 아니라 PQR_AR [352 : 288]이어야합니다. 내가 잘못된 방향으로 가고 있다면 나를 수정하십시오.
ABX

64은 다양한 비트 버스로 : @ABX I는 PQR_AR [289 (352)]이어야 제외한 방향에 대해 동의
peterbc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.