Không có gì sai khi sử dụng số nguyên cho RTL mỗi lần , nhưng có một số lý do mà một số người tránh nó. Đây thực sự là một câu hỏi về "thực hành tốt nhất" chủ quan và cuối cùng bạn sẽ phải tự tìm ra những gì bạn thích. Để giúp đỡ điều đó, tôi sẽ chia sẻ kinh nghiệm và suy nghĩ của tôi về điều này.
Về cơ bản , tôi thích sử dụng các số nguyên (bị ràng buộc), cũng như khi viết để tổng hợp. Đôi khi tôi làm điều đó, nhưng trong thực tế , thường thì tôi gắn bó signed
và unsigned
. Tôi sẽ giải thích lý do tại sao.
Bạn sẽ bị buộc phải sử dụng một kiểu dữ liệu được vector hóa trong một phần của thiết kế của bạn:
Hầu như bất kỳ nhà cung cấp-IP hoặc bên thứ 3-IP sẽ sử dụng integer
loại cho các cổng
Ví dụ: khi gửi dữ liệu qua BlockRam, ngay cả khi bạn suy luận và do đó không bao giờ cần phải giao tiếp với bất kỳ IP / macro / nguyên thủy nào, rất có thể bạn sẽ cần phải chuyển đổi sang loại véc tơ
Ngay cả khi không áp dụng một trong những điều trên, bạn hầu như sẽ cần phải giao tiếp với một thứ khác tại một thời điểm nào đó (một cổng cấp cao nhất, nếu không có gì khác)
Vì bạn không thể sử dụng integer
cho thiết kế đầy đủ, bạn có thể muốn bỏ qua tất cả cùng nhau, bởi vì:
Tại một số điểm, dù sao bạn cũng cần thực hiện chuyển đổi và điều này sẽ lấy đi một phần của điểm sử dụng integer
ở nơi đầu tiên
Ngoài ra, để mô phỏng, các chuyển đổi này thường sẽ được gọi bằng các vectơ 'U'
hoặc 'X'
trước khi đặt lại hoặc vào các thời điểm khác và mỗi lệnh gọi như vậy sẽ tạo ra một thông báo cảnh báo từ chức năng gói, làm lộn xộn các cảnh báo / nhắc nhở mô phỏng của bạn
Hạn chế của việc sử dụnginteger
:
Trái với các loại véc tơ, số nguyên không có 'U'
và 'X'
; Tôi tìm thấy những điều rất hữu ích trong mô phỏng. Bạn thấy các tín hiệu chưa được khởi tạo truyền qua thiết kế như thế nào và có thể bạn sẽ phản ứng nếu bạn thấy rất nhiều tín hiệu chưa được khởi tạo sau khi thiết lập lại. Điều này sẽ không xảy ra nếu sử dụng số nguyên.
Với các số nguyên, sẽ có rủi ro mô phỏng / tổng hợp sai lớn hơn khi cộng hoặc trừ dẫn đến kết quả dưới / tràn. (Như đã được chỉ ra bởi người khác.)
Các trường hợp điển hình mà tôi thấy integer
thực sự là một lựa chọn tốt:
Đối với các tín hiệu / bộ đếm gỡ lỗi mà bạn giám sát thông qua chipScope / signalTap, v.v.
Đại diện hoàn toàn nội bộ của các quầy, không bao giờ đi vào hoặc ra khỏi mã của riêng bạn. Vâng, có những trường hợp như vậy, ví dụ như nếu bạn đang viết một FIFO và bạn đang viết dead-reckoning / đọc để hình thành các tín hiệu full
, empty
, almostFull
vv (tuy nhiên arithmetics trên con trỏ là một cách tốt hơn so với dead-reckoning trong trường hợp này. ..)
Kết luận của riêng tôi : Đôi khi tôi sử dụng số nguyên, nhưng ít, và chủ yếu trong các trường hợp được mô tả ở trên. Tôi không thấy nhiều chi phí sử dụng unsigned
và signed
thay vì số nguyên, và do đó, thường bám vào chúng.