Menu
CoddyTech

Số không có kích thước

Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 15 trên 90.

Số không chỉ định kích thước là số được viết mà không nêu rõ số bit của nó. Khi bạn viết một số mà không có tiền tố kích thước, Verilog mặc định xem số đó là 32 bit.

a = 'b1010;        // Unsized: Verilog treats this as 32 bits
a = 32'b1010;    // Giống như trên, nhưng ghi rõ kích thước

Các số không chỉ định kích thước chỉ dùng định dạng và giá trị: [format][value]

  • format: cơ số của số đó: b cho hệ nhị phân, d cho hệ thập phân, h cho hệ thập lục phân hoặc o cho hệ bát phân
  • value: số thực tế (ví dụ: 1010)

Dấu nháy đơn ' vẫn cần có trước chữ cái định dạng, nhưng không có số bit nào đứng trước nó.

  • 'b1010: số nhị phân 1010 gồm 32 bit
  • 'd255: số thập phân 255 gồm 32 bit
  • 'hFF: số thập lục phân FF gồm 32 bit
  • 'b1: số nhị phân 1 gồm 32 bit (với 31 số 0 ở đầu)

Ví dụ code:

reg [7:0] data;

initial begin
  data = 1010;      // Không chỉ định độ rộng: giá trị 32 bit (có thể gây cảnh báo)
  data = 'd255;     // Unsized: 32-bit decimal 255
  data = 'hFF;      // Không chỉ định độ rộng: số hệ 16 FF có độ rộng 32 bit
end

Không chỉ định kích thước và có chỉ định kích thước

 Không chỉ định kích thướcCó chỉ định kích thước
Ví dụ1010 hoặc 'd2558'b1010 hoặc 8'd255
Độ rộng bit32 bit (mặc định)Tường minh (theo chỉ định)
Dấu nháy đơnBắt buộc khi có định dạngBắt buộc
Khi nào dùngCode testbench đơn giảnGán giá trị cho phần cứng

Vấn đề tiềm ẩn

Số không xác định kích thước có thể gây ra hành vi ngoài dự kiến khi gán cho các thanh ghi nhỏ hơn:

reg [3:0] small_reg;
small_reg = 'b1111;   // 32-bit value, but fits in 4 bits (fine)
small_reg = 'b10000;  // Giá trị 32 bit, nhưng quá lớn! (cảnh báo)

Ví dụ thứ hai gán giá trị 32 bit 10000 cho thanh ghi 4 bit. Chỉ giữ lại 4 bit thấp (0000), có thể không như bạn mong đợi.

Khi nào nên dùng số không xác định kích thước

Số không xác định kích thước phù hợp với:

  • Các số đơn giản trong testbench
  • Biến đếm vòng lặp
  • $display câu lệnh

Với các phép gán phần cứng thực tế, hãy dùng số có kích thước xác định để nêu rõ ý định và tránh cảnh báo.

challenge icon

Thử thách

Trong đoạn code bên dưới, một số số chưa được chỉ định độ rộng. Hãy đổi chúng thành số có độ rộng cụ thể (8 bit) để tránh cảnh báo.

Cần làm gì:

  1. Đổi a thành số nhị phân 8 bit biểu thị 1010
  2. Đổi b thành số thập phân 8 bit biểu thị 255
  3. Đổi c thành số thập lục phân 8 bit biểu thị FF

Tự làm thử

module unsized_challenge;
  reg [7:0] a, b, c;
  
  initial begin
    a = 'b1010;      // Change to sized (8-bit binary)
    b = 'd255;     // Đổi thành giá trị thập phân có độ rộng xác định (8 bit)
    c = 'hFF;      // Change to sized (8-bit hex)
    
    $display("a = %b", a);
    $display("b = %b", b);
    $display("c = %b", c);
    $finish;
  end
endmodule
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Verilog online

Kiểm tra một phép chuyển đổi: Công cụ chuyển đổi hệ cơ số