Sự khác nhau giữa các nhà điều hành $size
và $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?
Sự khác nhau giữa các nhà điều hành $size
và $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?
$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]
?
$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()
và $bits()
sẽ là điều tương tự.
'$ 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
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
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