2017-12-14 30 views
0

한다고 가정 우리는 128 비트 등록이 있습니다의 Verilog : 비트 슬라이스 벡터 두 번

reg [127:0] line; 

그리고 우리는 먼저 그것의 32 비트 단어를 선택하고,이 단어에서 모든 사용하여 슬라이스를 바이트를 선택

word = line[(127-32*byte_addr[3:2])-:32]; 
byte = word[7:0]; 

잘 작동합니다. 그러나 두 사업자를 합치 지 않으면 동일한 라인에서 허용되지 않는 것으로 보입니다.

mybyte = line[(127-32*byte_addr[3:2])-:32][7:0]; //all the hell breaks loose 

불행하게도 나는이 금지 SV의 3.1A 사양의 명확한 규칙을 찾을 수 없습니다.

+0

정확히 무엇이 오류입니까? 어떤 도구를 사용하고 있습니까? – mkrieger1

+0

"구문 오류입니다. 토큰은 '[' 'VCS입니다. – artemonster

+0

오류가 정확합니다. 'line'은 1 차원 배열로 선언 되었기 때문에 하나의 인덱스 선택기 만 사용할 수 있습니다. – Serge

답변

1

당신의 SystemVerilog의 3.1A 사양을 삭제하고 섹션 11.4.12에 설명 된 free copy of the 1800-2012 LRM

병합 연산자는 당신이 원하는 것을 얻을 바랍니다.

mybyte = {line[(127-32*byte_addr[3:2])-:32]}[7:0]; 
1

1800년에서 2012년까지 LRM 말한다 (7.4.6)

패킹 배열 또는 가정 정수 타입 의 일부분을 선택할 수식이 0

까지 넘버링되는

part-select라는 용어는 팩형 어레이의 하나 이상의 연속 비트 중 하나를 선택하는 것을 의미합니다.

파트 - 셀렉트의 파트 - 셀렉트에 대한 언급이 없습니다.

line을 다차원 적으로 만들 수 있습니까? 같은 것

reg [3:0][7:0] line [3:0]; 

이렇게하면 색인 생성이 간단 해집니다.

+0

참조 사양을 주셔서 감사합니다. 아니, 불행히도이 경우에는 할 수 없다. 또는 "unslice"/ 다차원 배열을 128 비트 reg에 팩하는 방법이 있습니까? – artemonster