1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

[Nhập môn Verilog HDL] Bài 3: Các toán tử

Thảo luận trong 'THIẾT KẾ PHẦN CỨNG' bắt đầu bởi duong.uitce, 16 Tháng tư 2016.

  1. duong.uitce New Member

    Số bài viết: 21
    Đã được thích: 0
    Điểm thành tích: 1
    Chào các bạn,

    Mời các bạn theo dõi Bài 2 tại: [Nhập môn Verilog HDL] Bài 2: Cấu trúc module

    Trong Bài 2: Cấu trúc module vừa trình bày, các bạn đã đi qua cấu trúc module trong Verilog HDL, đây là nội dung thiết yếu của Verilog HDL mà bất kỳ người kỹ sư nào cũng cần phải nắm rõ. Bắt đầu từ chương 3 này, chúng ta sẽ rẽ hướng đi vào chi tiết các khía cạnh tính năng ngôn ngữ thay vì cấu trúc thiết kế như trong Bài 2: Cấu trúc module.

    Chú ý: Bạn cần đăng nhập để xem được hình ảnh đầy đủ.

    3.1 Toán tử số học
    Tương tự như các ngôn ngữ lập trình như C/C++, Java, ..., Verilog HDL cũng cung cấp các toán tử số học: cộng (add), trừ (subtract), nhân (multiply), chia lấy phần nguyên (divide), chia lấy phần dư (modulus), và số mũ (exponent) như trình bày trong Bảng 3.1.
    [IMG]

    Trong đó, hầu hết các công cụ tổng hợp (synthesis tool) và các thư viện cell thông thường chỉ hỗ trợ tổng hợp các toán tử số học là cộng và trừ. Các toán tử còn lại chỉ có ý nghĩa trong mô phỏng. Và để thay thế cho việc sử dụng các toán tử không được hỗ trợ tổng hợp thì người kỹ sư sẽ thiết kế thêm các module chuyên biệt để thực hiện các toán tử này (trong thuật ngữ chuyên ngành thì thường gọi đây là các IP).

    Có một số điều đặc biệt liên quan đến các toán tử số học như sau:
    1. Các toán tử xem các toán hạng (có thể là toán hạng 1-bit hay toán hạng vector) như là một hằng số. Vì thế nếu toán hạng nào xuất hiện giá trị z hoặc x thì giá trị của số hạng này là một hằng số không xác định và được định giá trị là x.

    2. Nếu kết quả của phép toán có cùng độ rộng bit như độ rộng bit lớn nhất của các toán hạng thì carry-bit (bit nhớ) sẽ bị bỏ qua. Ngược lại, trong trường hợp kết quả của phép toán có độ rộng bit lớn hơn độ rộng bit lớn nhất của các toán hạng thì carry-bit sẽ được thêm vào kết quả.

    3.2 Các toán tử mức bit (bitwise)
    Các toán tử bitwise trong Verilog HDL có thể là toán tử một toán hạng (đối với toán tử inversion) hoặc toán tử hai toán hạng (đối với các toán tử: and, or, xor, xnor) như trình bày trong Bảng 3.2.
    [IMG]

    Những toán tử này hoạt động trên bit của các toán hạng. Nếu các toán hạng có độ rộng bit khác nhau thì trước khi thực hiện phép toán, toán hạng có độ rộng bit nhỏ hơn sẽ được mở rộng bit về phía bên trái và kết quả sẽ có độ rộng bit của toán hạng có độ rộng bit lớn nhất.

    3.3 Các toán tử rút gọn
    Các toán tử rút gọn là các toán tử một toán hạng thực hiện việc rút gọn một vector thành một bit duy nhất. Verilog HDL hỗ trợ các toán tử rút gọn như trình bày trong Bảng 3.3.

    [IMG]

    Cũng như các toán tử vừa tìm hiểu, nếu toán hạng có chứa giá trị x hoặc z thì kết quả có thể sẽ có giá trị không xác định, và được định giá trị là x.

    3.4 Các toán tử quan hệ
    Các toán tử quan hệ được sử dụng đê so sánh các toán hạng, kết quả của phép toán là một bit duy nhất. Các toán tử quan hệ trong Verilog HDL được trình bày trong Bảng 3.4.

    [IMG]

    Kết quả có thể là true (1’b1) hoặc false (1’b0). Nếu một trong các toán hạng có chứa x hoặc z thì kết quả sẽ là không xác định và được định giá trị là x.

    3.5 Các toán tử so sánh bằng
    Về bản chất, các toán tử so sánh bằng cũng là các toán tử quan hệ mà chúng ta vừa đề cập, nhưng chúng có một chút khác biệt và một chút rắc rối.
    Cũng như các toán tử quan hệ, các toán tử so sánh bằng được sử dụng để so sánh các toán hạng, kết quả của phép toán là một bit duy nhất. Verilog HDL hỗ trợ 4 toán tử so sánh bằng như trình bày trong Bảng 3.5.

    [IMG]

    Thường có sự nhầm lẫn giữa toán tử equality và toán tử case equality mà các bạn cần phải cận trọng.
    1. Toán tử equality chỉ hỗ trợ các giá trị xác định là 1 và 0, nên nếu các toán hạng xuất hiện x hoặc z thì kết quả sẽ là không xác định và được định giá trị là x.
    2. Toán tử case equality hỗ trợ toàn bộ các giá trị 0, 1, x, và z. Vì thế các giá trị x và z là khác nhau và phải được so sánh một cách chính xác.

    Nhưng bạn đừng lo lắng quá nhiều, vì toán tử case equality không được hỗ trợ tổng hợp xuống phần cứng và chỉ có ý nghĩa khi mô phỏng.

    3.6 Các toán tử luận lý
    Các toán tử luận lý có thể là các toán tử một toán hạng hoặc là các toán tử hai toáng hạng, và kết quả của các phép toán là một bit duy nhất. Các toán tử luận lý trong Verilog HDL được trình bày trong Bảng 3.6.

    [IMG]

    Những toán tử này thường được sử dụng trong các câu lệnh if và các câu lệnh while trong việc mô tả RTL mà bạn sẽ có cơ hội tìm hiểu ở những bài viết sau này. Đối với các toán tử luận lý, thì các toán hạng có giá chứa giá trị x hoặc z sẽ được xem như các giá trị không xác định và kết quả của phép toán sẽ là không xác định, tất nhiên chúng sẽ được định trị là x.

    3.7 Các toán tử dịch
    Các toán tử dịch trái và dịch phải đều được Verilog HDL hỗ trợ đầy đủ. Bảng 3.7 trình bày những toán tử này.

    [IMG]

    Những toán tử này sẽ dịch trái hoặc dịch phải một vector theo một số lượng bit được chỉ rõ. Và có một số điều cần phải lưu ý đối với các toán tử dịch này:
    1. Đối với các toán tử dịch trái, các vị trí bit bỏ trống sẽ được thay thế bởi các giá trị 0, và các vị trí bit bị dịch đi sẽ được bỏ qua.
    2. Đối với toán tử dịch phải luận lý, các vị trí bit bỏ trống sẽ được thay thế bởi các giá trị 0, và các vị trí bit bị dịch đi sẽ được bỏ qua.
    3. Đối với toán tử dịch phải số học thao tác với số không dấu, các vị trí bit bỏ trống sẽ được thay thế bởi các giá trị 0, và các vị trí bit bị dịch đi sẽ được bỏ qua.
    4. Đối với toán tử dịch phải số học thao tác với số có dấu, các vị trí bit bỏ trống sẽ được thay thế bởi các giá trị bit dấu, và các vị trí bit bị dịch đi sẽ được bỏ qua.

    3.8 Các toán tử đặc biệt
    Có 3 toán tử đặc biệt nhưng cũng rất thông dụng trong Verilog HDL được trình bày trong Bảng 3.8.

    [IMG]

    Toán tử điều kiện hoạt động như câu lệnh if-else nếu bạn đã từng làm quen với bất kỳ ngôn ngữ lập trình nào. Nếu condition là true (1’b1) thì true_value sẽ được sử dụng, ngược lại nếu condition là false (1’b0) thì false_value sẽ được sử dụng.

    Toán tử nối (concatenate) kết hợp hai hay nhiều vector thành một vector lớn hơn có độ rộng bit bằng tổng độ rộng bit của toàn bộ vector thành phần.

    Toán tử lặp (replicate) nhận một vector và lặp lại nó theo một số lần được chỉ rõ.

    3.9 Thứ tự ưu tiên của các toán tử
    Khi bạn sử dụng nhiều toán tử cùng nhau, để chắc chắc toán tử nào bạn muốn thực hiện trước thì một lời khuyên là bạn nên sử dụng cặp dấu ngoặc đơn để nhóm các phép toán lại với nhau để tăng tính dễ hiểu cũng như dễ đọc cho mô tả của bạn.

    Nếu bạn bị dị ứng với cặp dấu ngoặc đơn thần thánh thì bạn sẽ cần phải tra Bảng để biết được thứ tự ưu tiên của các toán tử trong Verilog HDL.

    [IMG]

    Một điều cần phải ghi nhớ ở đây là đối với các toán tử có thể là toán tử một số hạng hoặc là toán tử nhiều số hạng (toán tử + chẳng hạn), thì toán tử một số hạng sẽ có độ ưu tiên cao hơn.

    Các toán tử có độ ưu tiên giảm dần từ trên xuống, nghĩa là độ ưu tiên 1 thì lớn hơn độ ưu tiên 2. Các toán tử dùng một dòng thì có độ ưu tiên bằng nhau.

    Kết thúc Bài 3: Các toán tử.

    Thân ái,

    Mời các bạn theo dõi và tham gia thảo luận về Verilog HDL tại: thegioivimach.com

Chia sẻ trang này