Altifigence Academy

2 / 63 · Khái niệm

Hệ đếm và biểu diễn độ rộng cố định

Ngoài chuyển đổi hệ đếm, tính phạm vi biểu diễn, số bit cần thiết và sai số cắt bỏ.

Điểm xuất phát của khóa học

Nên có kiến thức đại số phổ thông và lập trình cơ bản. Khóa học sẽ ôn số nhị phân và đại số BooleanĐại số Boolean Đại số của 0, 1 và AND, OR, NOT. Dấu cộng thường biểu diễn OR, nên quy tắc khác phép cộng số nguyên. Tìm hiểu thêm, rồi tiến nhanh ở trình độ thiết kế logic số nhập môn đại học. Hãy tập trung xác định điều kiện đầu vào, độ rộng bit và thời điểm quan sát, rồi kiểm tra bằng ví dụ thay vì chỉ học thuộc công thức.

Phân biệt chuỗi bit và giá trị

Mạch lưu một chuỗi bit hữu hạn. Việc diễn giải chuỗi đó là số nguyên, số có dấu hay số dấu phẩy cố địnhDấu phẩy cố định Cách biểu diễn số bằng vị trí dấu phẩy cố định và một hệ số tỷ lệ áp dụng lên chuỗi bit số nguyên. Phải quy định cả độ rộng, dấu và số bit phần lẻ. Tìm hiểu thêm được xác định bằng quy ước thiết kế. Với kiến thức về phép toán số nguyên và lũy thừa, bạn có thể đi thẳng vào việc tính phạm vi cần cho RTL thực tế.

Giá trị unsignedunsigned Quy tắc diễn giải chuỗi bit là số nguyên không âm. Phạm vi n bit là 0 đến 2^n−1 và có thể khác cách diễn giải signed của cùng chuỗi bit. NN bit được diễn giải như sau.

u=∑i=0N−1bi2i,0≤u≤2N−1u=\sum_{i=0}^{N-1}b_i2^i,\qquad 0\le u\le 2^N-1

10110110 bằng 128+32+16+4+2=182128+32+16+4+2=182. Nhóm mỗi bốn bit được B6, nên 8'hB6 và 8'b10110110 là cùng một chuỗi bit. Một chữ số thập lục phân luôn tương ứng bốn bit, giúp chuyển đổi nhanh khi đọc địa chỉ, mặt nạ và dạng sóng.

Giữ nguyên bit, đổi cách diễn giải

Hãy đổi b7 bên dưới. Với unsigned, bit này cộng trọng số 128; với bù haiBù hai Cách biểu diễn số nguyên có dấu bằng chuỗi bit có độ rộng cố định. Phạm vi n bit là −2^(n−1) đến 2^(n−1)−1. Tìm hiểu thêm, bit cao nhất có trọng số −128. Trước tiên tạo 0x7F và 0x80 để so sánh ranh giới của hai cách diễn giải.

Bit và biểu diễn số

10110110 → unsigned 182 · signed -74 · hex 0xB6

Thay đổi chuỗi bit và diễn giải nó là signed là hai thao tác khác nhau. Dù mạch đều rộng tám bit, kết quả so sánh có thể khác tùy thông tin dấu truyền vào toán tử.

Xác định phạm vi trước, độ rộng bit sau

Số bit tối thiểu để phân biệt MM trạng thái khác nhau là:

N=⌈log⁡2M⌉N=\left\lceil\log_2 M\right\rceil

Đếm từ 0 đến 999 cần biểu diễn 1000 giá trị, nên cần 10 bit. Từ 0 đến 1024 có 1025 giá trị, cần 11 bit. Nhầm giá trị lớn nhất với số trạng thái sẽ làm thiếu đúng một bit ở biên. Nếu tham số RTL cho phép M=1M=1, phải giới hạn độ rộng tối thiểu là 1 để tránh vector rộng 0 bit.

Điều gì xảy ra khi lưu vào tín hiệu hẹp hơn

Lưu unsigned bằng cách bỏ bit cao và chỉ giữ NN bit là phép modulo.

xstored=x mod 2Nx_{stored}=x\bmod 2^N

Ví dụ, lưu kết quả chín bit là 300 vào tám bit sẽ còn 44. Đây không phải làm tròn hay bão hòa. Nếu cần bão hòa, phải thiết kế riêng mạch phát hiện vượt phạm vi và chọn giá trị lớn nhất.

SystemVerilog
logic [7:0] a, b, low;
logic [8:0] full_sum;
assign full_sum = {1'b0, a} + {1'b0, b};
assign low = full_sum[7:0];

Mở rộng cả hai toán hạng trước khi cộng giúp thể hiện rõ ý định giữ cả carry. Đừng cho rằng ký hiệu hệ đếm đã quyết định dấu hoặc độ rộng kết quả. Đọc dạng sóng cần đủ độ rộng, thuộc tính dấu và cơ số.

Tự thử

Cần bao nhiêu bit để đếm từ 0 đến 4095 và từ 0 đến 4096? Lưu 511 vào unsigned tám bit sẽ còn giá trị nào?

Đọc giải thích

Phạm vi đầu có 4096=2124096=2^{12} giá trị, cần 12 bit; phạm vi sau có 4097 giá trị, cần 13 bit. Vì 511 mod 256=255511\bmod256=255, giá trị lưu là 8'hFF. Chỉ từ giá trị này không thể kết luận đã không xảy ra overflow.

Lựa chọn áp dụng cho trình duyệt này. Có thể đổi ở chân trang bất cứ lúc nào.