2009-01-25 32 views
23

Nhìn vào một số mã tôi đang duy trì trong hệ thống Verilog Tôi thấy một số tín hiệu được định nghĩa như thế này:đóng gói vs vectơ giải nén trong hệ thống verilog

node [range_hi:range_lo]x; 

và những người khác được định nghĩa như thế này:

node y[range_hi:range_lo]; 

Tôi hiểu rằng x được định nghĩa là được đóng gói, trong khi y được định nghĩa là chưa được giải nén. Tuy nhiên, tôi không biết điều đó có nghĩa là gì.

Sự khác biệt giữa các vectơ đóng gói và giải nén trong Hệ thống Verilog là gì?

Chỉnh sửa: Trả lời câu trả lời của @ Empi, tại sao một nhà thiết kế phần cứng viết thư viện SV về biểu diễn nội bộ của mảng? Có lần nào khi tôi không nên hoặc không thể sử dụng tín hiệu được đóng gói?

Trả lời

13

Bài viết này cung cấp thêm chi tiết về vấn đề này: http://electrosofts.com/systemverilog/arrays.html, đặc biệt là phần 5.2.

Một mảng đóng gói là một cơ chế để phân chia một vector vào trường con mà có thể được truy cập thuận tiện như phần tử mảng. Do đó, một mảng được đóng gói được đảm bảo được biểu diễn dưới dạng một tập các bit liền nhau. Một mảng được giải nén có thể có hoặc không được đại diện như vậy. Một mảng được đóng gói khác với một mảng được giải nén trong đó, khi một mảng được đóng gói xuất hiện như một mảng chính, nó được coi là một vectơ đơn.

5

Trước khi biết chính xác những mảng được đóng gói và giải nén là gì, hãy xem cách bạn có thể biết mảng nào là gì, chỉ bằng cách khai báo. Các mảng được đóng gói có tên đối tượng xuất hiện trước khi khai báo kích thước. Ví dụ:

bit [3][7] a; 

Mảng chưa được đóng gói có tên đối tượng xuất hiện sau khi khai báo kích thước. Ví dụ:

bit a[3]; 

Mảng đóng gói tạo bộ nhớ trong khi Unpacked dont. Bạn có thể truy cập/khai báo mảng giải nén như thế này cũng

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

Bạn có thể kết hợp cả hai mảng đóng gói và giải nén để thực hiện một bộ nhớ đa chiều. Ví dụ:

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

Nó làm cho một mảng của 4 (tức là 4 * 8) byte với độ sâu 3.

+0

"Mảng được đóng gói tạo bộ nhớ trong khi không được giải nén." Điều đó nghĩa là gì? Có rất nhiều công cụ tổng hợp FPGA sẽ chuyển đổi các mảng được giải nén thành một số loại bộ nhớ (cả FF hoặc RAM). –

1

mảng đóng gói được sử dụng chủ yếu để sử dụng bộ nhớ hiệu quả khi chúng ta đang viết một [3: 0 ] [7: 0] A [4: 0] có nghĩa là trong các vị trí bộ nhớ 32 bit 4 bit mỗi 8 bit được đóng gói để tạo thành 32 bit. Giá trị bên phải có nghĩa là có 5 lát như vậy.

0

Mảng không được đóng gói sẽ giúp bạn kiểm tra lỗi thời gian biên dịch hơn so với mảng được đóng gói.

Tôi thấy các mảng chưa được đóng gói trên định nghĩa cổng của mô-đun vì lý do này. Trình biên dịch sẽ báo lỗi nếu kích thước của tín hiệu không chính xác giống như cổng với các mảng được giải nén.Với mảng được đóng gói, thông thường nó sẽ tiếp tục và nối dây những thứ tốt nhất có thể, không phát ra lỗi.

Các vấn đề liên quan