2012-11-12 33 views
12

Sự khác nhau giữa các nhà điều hành $size$bits trong verilog là gì? nếu tôi đã biến, [9:0]a, [6:0]b, [31:0]c.

c <= [($size(a)+$size(b)-1]-:$bits(b)]; 

Điều gì sẽ là đầu ra tại 'c' từ biểu thức trên?

Trả lời

9

$size sẽ trả lại số phần tử trong thứ nguyên, tương đương với $high - $low + 1. Nó liên quan đến kích thước, không chỉ đếm bit. Nếu loại là mảng đóng gói 1D hoặc loại tích phân, nó bằng $bits.

$bits chức năng hệ thống trả về số bit cần thiết để giữ biểu thức dưới dạng luồng bit.

$bits ([expression|type_identifier]) 

Trả về 0 khi được gọi với loại động có kích thước hiện đang trống. Đó là lỗi khi sử dụng chức năng hệ thống $bits trực tiếp với số nhận dạng loại có kích thước động.

Tôi không có ý kiến ​​gì về câu hỏi của bạn, c <= [($size(a)+$size(b)-1]-:$bits(b)];. Nó là một biểu thức hợp lệ trong RHS? Bạn đang nói về biểu thức dải ô, [n +: m] hoặc [n -: m]?

+0

'$ size (a)' = 10, '$ size (b) = 7',' $ bits (b) '= 7:' c <= x [17-1-: 7] 'Đây là tất cả các loại tiêu chuẩn để '$ bits' và' $ size' sẽ giống nhau. – Morgan

+0

Bạn nói đúng. Nhưng tôi chỉ không nhận ra là một lỗi đánh máy hoặc ý định thực sự cho 'c <= [17 + 7-1] -: 7]; ' – jclin

+0

Ah yes, typo 17 + 7-1. Cũng lưu ý câu hỏi không có biến nó chỉ là một phạm vi vì vậy nó không phải là verilog hợp lệ. – Morgan

19

$size() cung cấp số bit cho một thứ nguyên duy nhất. $bits() cho biết số lượng bit đại diện cho biến hoàn toàn.

Ví dụ:

reg [9:0] a; 
reg [9:0] b [5:0]; 

initial begin 
    $display("a Size ", $size(a)); 
    $display("a Bits ", $bits(a)); 
    $display("b Size ", $size(b)); 
    $display("b Bits ", $bits(b)) ; 
end 

Cung cấp:

a Size   10 
a Bits   10 
b Size   6 // Depth of memory 
b Bits   60 // Width * Depth 

Trong trường hợp của bạn, bạn chỉ cần có 1 mảng chiều, không ký ức hoặc cấu trúc nên $size()$bits() sẽ là điều tương tự.