Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 115 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
115
Dung lượng
661,92 KB
Nội dung
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN oOo Giáo trình NGƠN NGỮ MƠ TẢ PHẦN CỨNG VERILOG Biên soạn: TS Vũ Đức Lung ThS Lâm Đức Khải Ks Phan Đình Duy 2012 Lời nói đầu Ngày nay, mạch thiết kế với hàng triệu cổng logic tích hợp Chip việc thiết kế mạch dây kết nối tay trở nên bất khả thi, từ lí khái niệm ngơn ngữ có mức độ trừu tượng cao dùng để mô tả thiết kế phần cứng đời, Verilog Cùng với đời ngôn ngữ mô tả phần cứng Verilog hàng loạt công cụ EDA (Electronic Design Automation) CAD (Computer Aided Design) giúp cho kĩ sư thiết kế phần cứng tạo nên Chip có độ tích hợp cao, tốc độ siêu việt chức đa dạng Giáo trình Ngơn ngữ mơ tả phần cứng Verilog nhằm giúp sinh viên trang bị kiến thức thiết kế vi mạch Giáo trình tập trung vào mảng thiết kế mạch số với mạch tổ hợp mạch Giáo trình giới thiệu bước cần thực trình thiết kế vi mạch từ việc mô tả thiết kế, kiểm tra, phân tích tổng hợp phần cứng thiết kế Giáo trình Ngơn ngữ mơ tả phần cứng Verilog dùng cho sinh viên chuyên ngành Kĩ thuật máy tính sinh viên khối điện tử Để tiếp nhận kiến thức dễ dàng, sinh viên cần trang bị trước kiến thức thiết kế số hệ thống số Giáo trình biên dịch tổng hợp từ kinh nghiệm nghiên cứu giảng dạy tác giả ba nguồn tài liệu chính: IEEE Standard for Verilog Hardware Description Language, 2006; Verilog Digital System Design, Second Edition, McGraw-Hill; The Complete Verilog Book, Vivek Sagdeo, Sun Micro System, Inc Nhằm cung cấp luồng kiến thức mạch lạc, giáo trình chia làm chương: Chương 1: Dẫn nhập thiết kế hệ thống số với Verilog Chương giới thiệu lịch sử phát triển ngôn ngữ mô tả phần cứng Verilog, bên cạnh qui trình thiết kế vi mạch sử dụng ngôn ngữ mô tả phần cứng Verilog trình bày cụ thể Chương 2: Trình bày từ khóa sử dụng môi trường mô tả thiết kế Verilog Chương 3: Trình bày loại liệu sử dụng thiết kế mạch Verilog, gồm hai loại liệu loại liệu net loại liệu biến Chương 4: Trình bày tốn tử dạng biểu thức hỗ trợ Verilog Chương 5: Giới thiệu cấu trúc thiết kế, phương thức sử dụng thiết kế Chương 6: Trình bày phương pháp thiết kế sử dụng mơ hình cấu trúc, phương thức này, module thiết kế xây dựng cách gọi module thiết kế nhỏ kết nối chúng lại Chương 7: Trình bày phương thức thiết kế sử dụng mơ hình RTL phép gán nối tiếp mơ hình hành vi sử dụng ngơn ngữ có tính trừu tượng cao tương tự ngơn ngữ lập trình Phần thiết kế máy trạng thái sử dụng mơ hình hành vi nêu chương Chương 8: Trình bày phương pháp thiết kế sử dụng tác vụ hàm Chương 9: Giới thiệu phương pháp kiểm tra chức thiết kế Do thời gian khối lượng trình bày giáo trình khơng cho phép tác giả sâu khía cạnh thiết kế vi mạch phân tích định thời, tổng hợp phần cứng Để có kiến thức độc giả tham khảo tài liệu tham khảo mà giáo trình cung cấp Mặc dù nhóm tác giả cố gắng biên soạn kỹ lưỡng nhiên khó tránh khỏi thiếu sót Nhóm tác giả mong nhận đóng góp mang tính xây dựng từ q độc giả nhằm chỉnh sửa giáo trình hoàn thiện Chương Dẫn nhập thiết kế hệ thống số với Verilog Chương Dẫn nhập thiết kế hệ thống số với Verilog Khi kích thước độ phức tạp hệ thống thiết kế ngày tăng, nhiều công cụ hỗ trợ thiết kế máy tính (CAD) sử dụng vào q trình thiết kế phần cứng Thời kì đầu, cơng cụ mơ tạo phần cứng đưa phương pháp thiết kế, kiểm tra, phân tích, tổng hợp tự động tạo phần cứng cách phức tạp Sự phát triển không ngừng công cụ thiết kế cách tự động phát triển ngôn ngữ mô tả phần cứng (HDLs) phương pháp thiết kế dựa ngôn ngữ Dựa ngôn ngữ mô tả phần cứng (HDLs), công cụ CAD thiết kế hệ thống số phát triển kĩ sư thiết kế phần cứng sử dụng rộng rãi Hiện tại, người ta tiếp tục nghiên cứu để tìm ngôn ngữ mô tả phần cứng tốt Một ngôn ngữ mô tả phần cứng sử dụng rộng rãi ngơn ngữ Verilog HDL Do chấp nhận rộng rãi ngành công nghiệp thiết kế số, Verilog trở thành kiến thức đòi hỏi phải biết kĩ sư sinh viên làm việc học tập lĩnh vực phần cứng máy tính Chương trình bày cơng cụ mơi trường làm việc có sẵn tương thích với ngơn ngữ Verilog mà kĩ sư thiết kế sử dụng qui trình thiết kế tự động để giúp đẩy nhanh tiến độ thiết kế Đầu tiên trình bày bước thiết kế phân cấp, thiết kế mức cao từ việc mô tả thiết kế ngôn ngữ Verilog đến việc tạo phần cứng thiết kế Những qui trình từ khóa chun mơn minh họa phần Kế tiếp thảo luận cơng cụ CAD có tương thích với Verilog chức mơi trường thiết kế tự động Phần cuối chương nói số đặc tính Chương Dẫn nhập thiết kế hệ thống số với Verilog Verilog khiến trở thành ngơn ngữ nhiều kĩ sư thiết kế phần cứng lựa chọn 1.1 Qui trình thiết kế số Trong thiết kế hệ thống số sử dụng mơi trường thiết kế tự động, qui trình thiết kế bắt đầu việc mô tả thiết kế nhiều mức độ trừu tượng khác kết thúc việc tạo danh sách linh kiện đường kết nối linh kiện với (netlist) cho mạch tích hợp với ứng dụng cụ thể (ASIC), mạch in (layout) cho mạch tích hợp theo yêu cầu khách hàng (custom IC), chương trình cho thiết bị logic có khả lập trình (PLD) Hình 1.1 mơ tả bước qui trình thiết kế Bước đầu thiết kế, thiết kế mô tả hỗn hợp mô tả mức độ hành vi (behavioural) Verilog, sử dụng gói (module) thiết kế Verilog thiết kế sẵn, việc gán hệ thống bus wire để liên kết gói thiết kế thành hệ thống hoàn chỉnh Kĩ sư thiết kế phải có trách nhiệm tạo liệu để kiểm tra (testbench) xem thiết kế chức hay chưa dùng để kiểm tra thiết kế sau tổng hợp Việc kiểm tra thiết kế thực việc mơ phỏng, chèn kĩ thuật kiểm tra, kiểm tra thông thường kết hợp ba phương pháp Sau bước kiểm tra đánh giá thiết kế (bước gọi kiểm tra tiền tổng hợp (presynthesis verification)), thiết kế tiếp tục việc tổng hợp để tạo phần cứng thực cho hệ thống thiết kế cuối (ASIC, custom IC or FPLD,…) Nếu hệ thống thiết kế ASIC, thiết kế sẽ sản xuất nhà sản xuất khác; custom IC, thiết kế sản xuất trực tiếp; FPLD, thiết kế nạp lên thiết bị lập trình Sau bước tổng hợp trước Chương Dẫn nhập thiết kế hệ thống số với Verilog phần cứng thực tạo ra, trình mơ khác (hậu tổng hợp (postsynthesis)) phải thực Việc mơ này, ta sử dụng testbench tương tự testbench sử dụng mô tiền tổng hợp (presynthesis) Bằng phương pháp này, mô hình thiết kế mức độ hành vi mơ hình phần cứng thiết kế kiểm tra với liệu ngõ vào Sự khác mô tiền tổng hợp hậu tổng hợp mức độ chi tiết đạt từ loại mô Mô tả thiết kế dùng Verilog module flipflop (q,d,clk); … always(posedge clk) … endmodule Mô tiền tổng hợp: dùng Testbench tạo dạng sóng - Kiểm tra chức - Kiểm tra định thời - Phân tích Tạo liệu trung gian in out Tổng hợp Đặt cell kết Đưa hàm Boole nối Rút gọn biểu thức - Tối ưu diện tích Tạo phần cứng - Tối ưu kết nối kết nối linh kiện 2.1ns Phân tích timing - Chỉ thời gian trì hỗn path mạch - Mô hậu tổng hợp: dùng Testbench tạo dạng sóng - Kiểm tra chức - Kiểm tra định thời in out Nạp thiết kế lên Tạo ASIC netlist tới mức Tạo layout để chế cổng transistor tạo Chip FPGA Hình 1.1 Luồng thiết kế ASIC Chương Dẫn nhập thiết kế hệ thống số với Verilog Những phần mơ tả tỉ mỉ khối Hình 1.1 1.1.1 Dẫn nhập thiết kế Bước thiết kế hệ thống số bước dẫn nhập thiết kế Trong bước này, thiết kế mô tả Verilog theo phong cách phân cấp từ cao xuống thấp (top-down) Một thiết kế hồn chỉnh bao gồm linh kiện mức cổng mức transistor, khối (module) phần cứng có chức phức tạp mô tả mức độ hành vi, linh kiện liệt kê cấu trúc bus Do thiết kế Verilog mức cao thường mô tả mức độ mà mơ tả hệ thống ghi truyền liệu ghi thông qua hệ thống bus, việc mô tả hệ thống thiết kế mức độ xem mức độ truyền liệu ghi (RTL) Một thiết kế hoàn chỉnh mô tả tạo phần cứng tương ứng thực rõ ràng Những cấu trúc thiết kế Verilog mức độ RTL sử dụng phát biểu qui trình (producedural statements), phép gán liên tục (continuous assignments), phát biểu gọi sử dụng khối (module) xây dựng sẵn Những phát biểu qui trình Verilog (procedural statements) dùng để mô tả mức độ hành vi mức cao Một hệ thống linh kiện mơ tả mức độ hành vi tương tự với việc mô tả ngôn ngữ phần mềm Ví dụ, mơ tả linh kiện việc kiểm tra điều kiện ngõ vào nó, bật cờ hiệu, chờ có kiện xảy ra, quan sát tín hiệu bắt tay tạo ngõ Mô tả hệ thống cách qui trình vậy, cấu trúc if-else, case Verilog ngôn ngữ phần mềm khác sử dụng Những phép gán liên tục (continuous assignment) Verilog phép gán cho việc thể chức khối logic, phép Chương Dẫn nhập thiết kế hệ thống số với Verilog gán bus, mô tả việc kết nối hệ thống bus chân ngõ vào ngõ Kết hợp với hàm Boolean biểu thức có điều kiện, cấu trúc ngơn ngữ để mơ tả linh kiện hệ thống theo phép gán ghi bus chúng Những phát biểu gọi sử dụng khối Verilog thiết kế sẵn (instantiantion statements) dùng cho linh kiện mức thấp thiết kế mức độ cao Thay mơ tả mức độ hành vi, chức năng, bus hệ thống, mơ tả hệ thống Verilog cách kết nối linh kiện mức độ thấp Những linh kiện nhỏ mức cổng hay transistor, lớn vi xử lí hoàn chỉnh 1.1.2 Testbench Verilog Một hệ thống thiết kế dùng Verilog phải mô kiểm tra xem thiết kế xem chức chưa trước tạo phần cứng Trong trình chạy mô này, lỗi thiết kế không tương thích linh kiện dùng thiết kế phát Chạy mơ thiết kế đòi hỏi việc tạo liệu ngõ vào kiểm tra trình quan sát kết sau chạy mô phỏng, liệu dùng để kiểm tra gọi testbench Một testbench sử dụng cấu trúc mức cao Verilog để tạo liệu kiểm tra, quan sát đáp ứng ngõ ra, việc bắt tay tín hiệu thiết kế Bên testbench, hệ thống thiết kế cần chạy mô gọi (instantiate) testbench Dữ liệu testbench với hệ thống thiết kế tạo mơ hình mơ mà sử dụng công cụ mô Verilog Chương Dẫn nhập thiết kế hệ thống số với Verilog 1.1.3 Đánh giá thiết kế Một nhiêm vụ quan trọng thiết kế số cần đánh giá thiết kế Đánh giá thiết kế trình mà người thiết kế kiểm tra thiết kế họ có sai sót xảy suốt q trình thiết kế hay khơng Một sai sót thiết kế xảy mơ tả thiết kế mơ hồ, sai sót người thiết kế, sử dụng khối thiết kế Đánh giá thiết kế thực mô phỏng, việc chèn kĩ thuật kiểm tra, kiểm tra thông thường 1.1.3.1 Mô Chạy mô dùng việc đánh giá thiết kế thực trước thiết kế tổng hợp Bước chạy mô hiểu mô mức độ hành vi, mức độ RTL hay tiền tổng hợp Ở mức độ RTL, thiết kế bao gồm xung thời gian clock khơng bao gồm trí hoãn thời gian cổng dây kết nối (wire) Chạy mơ mức độ xác theo xung clock Thời gian việc chạy mô mức độ RTL theo tín hiệu xung clock, không quan tâm đến vấn đề như: nguy hiểm tiềm ẩn khiến thiết kế bị lỗi (hazards, glitch), tượng chạy đua khơng kiểm sốt tín hiệu (race conditions), vi phạm thời gian setup hold tín hiệu ngõ vào, vấn đề liên quan đến định thời khác Ưu điểm việc mô tốc độ chạy mô nhanh so với chạy mô mức cổng mức transistor Chạy mô cho thiết kế địi hỏi liệu kiểm tra Thơng thường mơi trường mô Verilog cung cấp nhiều phương pháp khác để đưa liệu kiểm tra vào thiết kế để kiểm tra Dữ liệu kiểm tra tạo đồ họa sử dụng công cụ soạn Tai lieu Luan van Luan an Do an Chương Biểu thức 4.3.3.1 Toán tử chuỗi Các toán tử chuỗi thường dùng chép, nối chuỗi, so sánh hỗ trợ toán tử Verilog HDL Toán tử chép cung cấp phép gán Toán tử nối chuỗi cung cấp toán tử ghép nối Toán tử so sánh cung cấp toán tử so sánh Khi thao tác giá trị vector reg, reg phải có 8*n bit ( với n số ký tự ASCII) thứ tự phù hợp với mã bit ASCII 4.3.3.2 Giá trị chuỗi đệm vấn đề tiềm ẩn Khi chuỗi gán cho biến, giá trị lưu trữ thêm vào bên trái giá trị số Sự thêm vào ảnh hưởng đến kết toán tử so sánh toán tử nối chuỗi Toán tử so sánh nối chuỗi không phân biệt số kết việc thêm vào số chuỗi thức (\0, ASCII NUL) Ví dụ 4.15 minh họa vấn đề xảy ra: Ví dụ 4.15 reg [8*10:1]s1,s2; initial begin s1="Hello"; s2="world!"; if ({s1,s2}=="Helloworld!") $display("stringsareequal"); end Việc so sánh Ví dụ 4.15 bị lỗi q trình gán vào biến chuỗi giá trị thêm vào biến s1, s2 lưu vào bên dưới: 97 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Chương Biểu thức s1=000000000048656c6c6f s2=00000020776f726c6421 Toán tử ghép nối s1 s2 bao gồm giá trị số thêm vào, kết cho ta giá trị: 000000000048656c6c6f00000020776f726c6421 Bởi chuỗi “Hello world!” khơng bao gồm số thêm vào, phép so sánh bị lỗi theo mô tả sau: 4.3.3.3 Chuỗi rỗng Chuỗi rông (“ “) xem giá trị ASCII NUL (“\0”), có giá trị khác với chuỗi (“0”) 4.4 Biểu thức trì hỗn thời gian tối thiểu, trung bình, tối đa Biểu thức trì hỗn ngơn ngữ Verilog HDL mô tả ba biểu thức ngăn cách dấu hai châm (:) gộp lại với dấu ngoặc đơn (()) Điều thể giá trị đại diện cho thời gian tối thiểu, trung bình tối đa theo thứ tự Cú pháp đưa theo cú Cú pháp 4-2 Cú pháp 4-2 constant_expression ::= 98 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Chương Biểu thức constant_primary | unary_operator { attribute_instance } constant_primary | constant_expression binary_operator { attribute_instance constant_expression | constant_expression ? { attribute_instance } constant_expression constant_expression constant_mintypmax_expression ::= constant_expression | constant_expression : constant_expression : constant_expression expression ::= primary | unary_operator { attribute_instance } primary | expression binary_operator { attribute_instance } expression | conditional_expression mintypmax_expression ::= expression | expression : expression : expression constant_primary ::= (From A.8.4) number | parameter_identifier [ [ constant_range_expression ] ] | specparam_identifier [ [ constant_range_expression ] ] |constant_concatenation | constant_multiple_concatenation | constant_function_call | constant_system_function_call | ( constant_mintypmax_expression ) | string primary ::= 99 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn } Tai lieu Luan van Luan an Do an Chương Biểu thức number | hierarchical_identifier [ { [ expression ] } [ range_expression ] ] | concatenation | multiple_concatenation | function_call | system_function_call | ( mintypmax_expression ) | string Biểu thức trì hỗn ngơn ngữ Verilog HDL thơng thường có ba giá trị Ba giá trị cho phép thiết kế chương trình kiểm tra với giá trị trì hõan tối thiểu, trung bình tối đa Các giá trị thể định dạng min:typ:max sử dụng biểu thức Định dạng min:typ:max sử dụng biểu thức Ví dụ 4.16 Ví dụ - Ví dụ cho thấy biểu thức định nghĩa ba giá trị trì hỗn Trong biểu thức: (a:b:c)+(d:e:f) Giá trị nhỏ tổng a+d, giá trị trung bình tổng b+e, giá trị lớn tổng c+f Ví dụ – ví dụ thể biểu thức điển hình sử dụng giá trị theo định dạng min:typ:max val-(32'd50:32'd75:32'd100) 100 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Chương Biểu thức 4.5 Biểu thức độ dài bit Kiểm soát số lượng bit sử dụng việc tính tốn biểu thức quan trọng phù hợp với kết đạt Một vài tình huấn có giải pháp đơn giản; ví dụ, bit toán tử quy định hai ghi 16 bit, kết giá trị 16 bit Tuy nhiên, vài tình huấn, khơng rõ ràn có bit sử dụng việc tính tốn biểu thức kích cỡ kết Ví dụ, để thực tính tốn phép cộng số học hai ghi 16 bit cần sử dụng 16 bit, cần sử dụng 17 bit để chứa bit tràn? Câu trả lời phụ thuộc vào loại thiết bị mơ hình cách mà thiết bị điều khiển nhớ bit tràn Verilog HDL sử dụng độ dài bit tốn hạng để phát có bit sử dụng q trình tính toán biểu thức Các luật độ dài bit đưa 4.5.1 Trong trường hợp toán tử cộng, độ dài bit toán hạng lớn sử dụng cho biến bên trái phép gán Ví dụ 4.17 reg [15:0] a, b; // ghi 16 bit reg [15:0] sumA; // ghi 16 bit reg [16:0] sumB; // ghi 17 bit sumA = a + b; // biểu thức tính tốn sử dụng 16 bit sumB = a + b; // biểu thức tính tốn sử dụng 17 bit 4.5.1 Qui luật cho biểu thức độ dài bit Các luận quản lý biểu thức độ dài bit trình rõ rành để tình huấn thực tế có giải pháp tự nhiên 101 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Chương Biểu thức Số lượng bit biểu thức (cịn gọi kích cỡ biểu thức) xác định toán hạng gọi biểu thức nội dung biểu thức đưa Một biểu thức tự xác định biểu thức mà độ dài bit xác định tự biểu thức đó, ví dụ, biểu thức thể giá trị trì hỗn Một biểu thức xác định tồn biểu thức mà độ dài bit xác định độ dài bit biểu thức phần biểu thức có liên quan khác Ví dụ, kích cỡ bit biểu thức bên phải phép gán phụ thuộc vào tự kích cỡ biểu thức bên trái Bảng 4.22 thể cách biểu thức thông thường xác định độ dài bit kểt biểu thức Trong Bảng 4.22, i, j k toán hạng biểu thức, L(i) thể độ dài bit toán hạng i Tốn hạng nhân thực mà không bit tràn cách gán kết đủ rộng để chứa Bảng 4.22 Biểu thức xác định độ dài bit kểt biểu thức Biểu thức Độ dài bit Hằng số không xác Bằng độ dài bit định kích thước số integer Hằng số có kích thước Kích thước xác định số i op j, với op là: + - max (L(i),L(j)) Chú thích * / % & | ^ ^~ ~^ op j, với op : + - ~ L(i) i op j, với op là: === 1bit Tốn hạng có kích !== == != > >= < > >> 1l; // thực thi Ở a b cộng với nhau, nên kết xảy tràn, sau dịch phải bit để trì bit nhớ ghi kết 16 bit Vấn đề xảy ra, tất tốn hạng biêut thức có chiều rộng 16 bit Vì vậy, biểu thức (a + b) cho kết 103 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Chương Biểu thức tạm thời giá trị 16 bit, bit nhớ bị trước thực thi việc tính tốn tốn tử dịch phải bit Giải pháp ép buộc biểu thức (a + b) thực tính tốn sử dụng 17bit Ví dụ thêm vào toán tử cộng số integer có giá trị 0, biểu thức tính tốn thực thi sử dụng kích cỡ bit integer Theo ví dụ bên tạo kết với mục đích Answer = (a + b + 0) >> 1; // thực thi Trong ví dụ tiếp theo: Ví dụ 4.19 module bitlength(); reg [3:0] a,b,c; reg [4:0] d; initial begin a = 9; b = 8; c = 1; $display("answer = %b", c ? (a&b) : d); end endmodule Câu lệnh $display hiển thị Answer = 01000 Bằng cách tự nó, biểu thức a&b có chiều dài bit, nội dung biểu thức điều kiện, sử dụng độ dài bit lớn nhất, nên biểu thức a&b có độ dài 5, độ dài d 4.5.3 Ví dụ minh họa biểu thức tự xác định Ví dụ 4.20 104 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Chương Biểu thức reg [3:0] a; reg [5:0] b; reg [15:0] c; initial begin a = 4'hF; b = 6'hA; $display("a*b=%h", a*b); // Kích thước biểu thức tự xác định c = {a**b}; // biểu thức a**b tự xác định // toán tử kết nối {} $display("a**b=%h", c); c = a**b; // Kích thước biểu thức xác định c $display("c=%h", c); end Kết mơ ví dụ này: a*b=16 // 'h96 bị cắt bỏ cịn 'h16 kích thước biểu thức a**b=1 // kích thước biểu thức bit (kích thước a) c=ac61 // kích thước biểu thức 16 bit (kích thước c) 4.6 Biểu thức có dấu Điều khiển dấu biểu quan trọng để tạo kết phù hợp Thêm vào để tuân theo luật 4.6.1 tới 4.6.4, hai chức hệ thống sử dụng để điều khiển theo loại khuôn khổ biểu thức: $signed() $usnigned() Các hàm tính tốn biểu thức đầu vào trả giá trị có kích cỡ giá trị biểu thức đầu vào định nghĩa hàm: 105 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Chương Biểu thức $signed – trả giá trị có dấu $unsigned – trả giá trị khơng dấu Ví dụ 4.21 reg [7:0] regA, regB; reg signed [7:0] regS; regA = $unsigned(-4); // regA = 8'b11111100 regB = $unsigned(-4'sd4); // regB = 8'b00001100 regS = $signed (4'b1100); // regS = -4 4.6.1 Qui định cho loại biểu thức Các luật cho việc xác định kết loại cho biểu thức: Loại biểu thức phụ thuộc vào tốn hạng Nó khơng phụ thuộc vào vế bên trái Số thập phân có dấu Số số khơng có dấu, ngoại trừ trường hợp có thêm ký hiệu s sử dụng số định ( “4’sd12”) Kết bit-select không dấu, bất chấp toán hạng Kết part-select khơng dấu, bất chấp tốn hạng chí part-select định toàn vector reg [15:0] a; reg signed [7:0] b; initial a = b[7:0]; // b[7:0] không dấu Kếu tốn tử kết nối khơng dấu, bất chấp toán hạng Kết toán tử so sánh (1,0) khơng dấu, bất chấp tốn hạng Chuyển đổi từ số thực sang số nguyên loại cưỡng có đấu 106 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Chương Biểu thức Dấu kích cỡ tốn hạng tự xác định xác định tự toán hạng độc lập với yêu cầu biểu thức Đối với toán hạng không tự xác định, áp dụng luật sau: Nếu toán hạng số thực, kết số thực Nếu toán hạng khơng dấu, kết khơng dấu, bất chấp tốn tử Nếu tất tốn hạng có dấu, kết có dấu, bất chấp tốn tử, ngoại trừ trường hợp rõ theo cách khác 4.6.2 Những bước định giá biểu thức Các bước để tính tốn biểu thức: Xác định kích cỡ biểu thức dựa chuẩn luật xác định kích cỡ biểu thức bên Xác định dấu biểu thức sử dụng luật phần 4.6 Truyền lại loại kích thức biểu thức(hoặc tự xác định biểu thức con_ trở xuống toán hạng xác định theo ngữ cảnh biểu thức Nói chung, toán hạng xác định theo ngữ cảnh toán tử giống loại kích thước kết tốn tử Tuy nhiên, có ngoại lệ: Nếu kết tốn tử số thực có tốn hạng xác định theo ngữ cảnh mà khơng phải số thực tốn hạng đối sử thể tự xác định chuyển đổi sang số thực trước toán tử áp dụng Toán tử quan hệ toán tử có tốn hạng mà khơng hồn tồn tự xác định khơng hồn tồn xác định theo ngữ cảnh Toán hạng ảnh hưởng lẫn chúng toán hạng xác định theo ngữ cảnh với loại kích 107 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Chương Biểu thức thước kết ( kích thước lớn toán hạng) xác định theo chúng Tuy nhiên, loại kết thực bit không dấu Loại kích thước tốn hạng độc lập với phần lại biểu thức ngược lại Khi truyền đạt tới toán hạng đơn giản định nghĩa 5.2 tốn hạng chuyển đổi truyền đạt loại kích thước Nếu tốn hạng mở rộng mở rộng dấu loại truyền đạt có dấu 4.6.3 Những bước định giá phép gán Các bước để tính tốn phép gán: Xác định kích thước phần bên phải chuẩn luật xác định kích thước phép gán Nếu cần, mở rộng kích thước toán tử bên phải, thực mở rộng bit dấu nếu phần bên phải toán tử có dấu 4.6.4 Tính tốn biểu thức hai số có dấu X Z Nếu tốn hạng có dấu bị thay đổi kích thước tới kích thước có dấu lớn giá trị bit dấu x, giá trị kết điền thêm Xs Nếu bit dấu có giá trị z, giá trị kết điền thêm Zs Nếu giá trị dấu bit x z, tốn tử khơng hợp logic gọi giá trị kết z loại phù hợp với loại biểu thức 108 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Chương Biểu thức 4.7 Những phép gán phép rút gọn Nếu chiều rộng biểu thức bên phải lớn chiều rộng biểu thức bên trái phép gán, MSBs biểu thức bên phải luôn bị loại bỏ để phù hợp với kích thước biểu thức bên trái Q trình thực khơng u cầu cảnh báo báo cáo lỗi liên quan đến kích thước phép gán khơng phù hợp bị cắt ngắn Cắt ngắn bit dấu biểu thức có dấu thay đổi dấu kết Ví dụ 4.22 Ví dụ 1: reg [5:0] a; reg signed [4:0] b; initial begin a = 8'hff; // sau gán, a = 6'h3f b = 8'hff; // sau gán, b = 5'h1f end Ví dụ 2: reg [0:5] a; reg signed [0:4] b, c; initial begin a = 8'sh8f; // sau gán, a = 6'h0f b = 8'sh8f; // sau gán, b = 5'h0f c = -113; // sau gán, c = 15 // 1000_1111 = (-'h71 = -113) bị cắt ngắn ('h0F = 15) end 109 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Chương Biểu thức Ví dụ 3: reg [7:0] a; reg signed [7:0] b; reg signed [5:0] c, d; initial begin a = 8'hff; c = a; // sau gán, c = 6'h3f b = -113; d = b; // sau gán, d = 6'h0f end 4.8 Bài tập Nêu toán tử thường dùng độ ưu tiên chúng? Nêu thứ tự tính tốn biểu thức logic? Cách sử dụng số nguyên biểu thức? Có loại tốn hạng Verilog? Mơ tả cụ thể loại? Các luật để xác định dấu cho kết biểu thức? Các bước định giá trị biểu thức? Cho a, b, c, d, e khai báo sau: reg [7:0] a, b; reg [8:0]c; reg [15:0] d; Định giá trị biểu thức sau: a = 255; b = 255; c = a + b; 110 Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn Tai lieu Luan van Luan an Do an Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn