문제

시스템 Verilog에서 유지 관리하는 일부 코드를 살펴보면 다음과 같이 정의 된 신호가 표시됩니다.

node [range_hi:range_lo]x;

그리고 다음과 같이 정의 된 다른 것들은 다음과 같습니다.

node y[range_hi:range_lo];

나는 이해 x 포장 된 상태로 정의됩니다 y 포장 풀기로 정의됩니다. 그러나 나는 그것이 무엇을 의미하는지 전혀 모른다.

System Verilog에서 포장되지 않은 벡터의 차이점은 무엇입니까?

편집하다: @Empi의 답변에 응답하여 SV에 글을 쓰는 하드웨어 설계자가 어레이의 내부 표현에 대해 관심을 가져야하는 이유는 무엇입니까? 내가 언제라도 있을까요? 그렇지 않아야합니다 또는 캔트 포장 된 신호를 사용 하시겠습니까?

도움이 되었습니까?

해결책

이 기사는이 문제에 대한 자세한 내용을 제공합니다.http://electrosofts.com/systemverilog/arrays.html, 특히 섹션 5.2.

포장 배열은 벡터를 서브 필드로 세분화하는 메커니즘으로, 어레이 요소로 편리하게 액세스 할 수 있습니다. 결과적으로, 포장 된 배열은 인접한 비트 세트로 표현되도록 보장된다. 포장되지 않은 배열은 그렇게 표현 될 수 있습니다. 포장 된 배열은 포장되지 않은 배열과 다릅니다. 포장 배열이 1 차로 나타날 때 단일 벡터로 처리됩니다.

다른 팁

정확히 포장 및 포장되지 않은 배열이 무엇인지 알기 전에 선언에 의해 어떤 배열인지 알 수있는 방법도 볼 수 있습니다. 포장 된 배열에는 크기 선언 전에 객체 이름이 나옵니다. 예를 들어:

bit [3][7] a;

포장되지 않은 배열에는 객체 이름이 크기 선언 후에 제공됩니다. 예를 들어:

bit a[3];

포장 된 배열은 메모리를 만들지 만 포장을 풀지 않습니다. 이와 같이 포장되지 않은 배열에 액세스/선언 할 수도 있습니다.

reg unpacked_array [7:0] = '{0,0,0,0,0,0,0,1};

포장 된 배열과 포장되지 않은 배열을 모두 혼합하여 다차원 메모리를 만들 수 있습니다. 예를 들어:

bit [3:0][7:0]a[2:0].

깊이가 3 인 4 (예 : 4*8) 바이트의 배열을 만듭니다.

포장 된 배열은 주로 [3 : 0] [7 : 0] A [4 : 0]을 작성할 때 효과적인 메모리 사용에 주로 사용됩니다. 오른쪽 값은 5 개의 슬라이스가 있다는 것을 의미합니다.

포장되지 않은 배열은 포장 된 배열보다 더 많은 컴파일 타임 오류 확인을 제공합니다.

이러한 이유로 모듈의 포트 정의에서 포장되지 않은 배열이 보입니다. 신호의 치수가 포장되지 않은 배열이있는 포트와 정확히 동일하지 않은 경우 컴파일러가 오류됩니다. 포장 된 배열을 사용하면 일반적으로 오류가 발생하지 않고 최선을 다하면 최선을 다해와 연결됩니다.

bit[3:0] a -> 포장 배열 포장 배열은 전체 배열로 사용할 수 있습니다 (a='d1) 또는 배열의 일부 (a[0]='b1)

bit a [3:0] -> 포장되지 않은 배열 포장되지 않은 배열은 다음과 같이 사용할 수 없습니다. a[0]='b1, 그것은 가득 찬 것으로 사용되어야합니다 a={8{'b1}}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top