Luận văn Nghiên cứu và thiết kế lõi IP mềm của I2C Core

Kể từ khi được phát triển bới hãng điện tử Phillips vào đầu những năm 1980, chuẩn giao tiếp I2C đã trở thành một chuẩn giao tiếp quốc tế, được công nhận ở hơn 50 quốc gia trên thế giới.Bus I2C hiện nay được rất nhiều các hãng điện tử nổi tiếng tích hợp vào trong các sản phẩm của hãng như vi xứ lý, vi điều khiển Do đó khả năng ứng dụng của bus I2C trong thiết kế vi mạch và các hệ thống số là rất rộng lớn.Tuy tốc độ giao tiếp không cao bằng nhiều chuẩn giao tiếp ra đời sau này, nhưng nhờ sự đơn giản về phần cứng, bus I2C vẫn là một sự lựa chọn phổ biến cho các hệ thống điều khiển sử dụng vi xử lý hay vi điều khiển. Xuất phát từ các yêu cầu thực tế và khả năng ứng dụng rộng rãi của bus I2C, nhóm chúng em quyết định chọn việc nghiên cứu và thiết kế lõi IP mềm của I2C Core với mục tiêu đề ra và đã đạt được là Core có thể điều khiển các chế độ hoạt động chủ yếu theo chuẩn giao tiếp I2C như: o Chủ truyền (Master Transceiver) o Chủ nhận (Master Receiver) o Tớ truyền (Slave Transceiver) o Tớ truyền (Slave Receiver) Đồng thời Core có thể giao tiếp ở tốc độ tiêu chuẩn (100kb/s) và tốc độ nhanh (400kb/s). Khả năng ứng dụng thực tế của đề tài này là có thể tích hợp I2C Core này vào các vi xử lý hay vi điều khiển do trung tâm ICDREC thiết kế. Sau đây là bố cục các nội dung được trình bày trong khóa luận: • Chương 1: Cung cấp các kiến thức cơ bản về ngôn ngữ Verilog , phần mềm Quartus II và chương trình mô phỏng ModelSim. • Chương 2: Giới thiệu về chuẩn giao tiếp I2C ở các phần cơ bản như cấu trúc phần cứng,cách kết nối giữa các phần tử trên bus,cách thực hiện giao tiếp truyền nhận dữ liệu giữa các phần tử,định dạng khung dữ liệu.Tiếp theo là đôi nét cơ bản về bộ điều khiển bus I2C PCF8584 do hãng Phillips chế tạo.Thiết kế của I2C Core trình bày trong luận văn này là dựa theo hình mẫu của PCF8584 với một số chỉnh sửa nhằm tạo sự đơn giản và thuận tiện cho việc thiết kế. • Chương 3: Là phần mô tả đặc tính chi tiết của từng module (bộ phận) trong I2C Core.Mỗi module đều được miêu tả chi tiết ở các chân vào (input)/ra (output), cách hoạt động và kết nối với các module khác để tạo nên một I2C Core hoàn chỉnh.Ngoài ra các sơ đồ khối,sơ đồ máy trạng thái,giản đồ định thì của các module cũng được trình bày nhằm giúp người đọc có thể dễ dàng tham khảo. • Chương 4: Tổng kết kết quả đạt được,những ưu điểm và hạn chế của đề tài cũng như hướng phát triển của đề tài trong tương lai.

doc85 trang | Chia sẻ: oanhnt | Lượt xem: 1360 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Luận văn Nghiên cứu và thiết kế lõi IP mềm của I2C Core, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lời cảm ơn Chúng em xin chân thành cảm ơn thầy Ngô Đức Hoàng và các anh Nguyễn Minh Chánh,Trương Trọng Phúc (Trung tâm ICDREC) đã nhiệt tình giúp đỡ và hỗ trợ trong suốt quá trình làm khóa luận tốt nghiệp,tạo điều kiện cho chúng em hoàn thành tốt khóa luận này. Chúng em xin chân thành cám ơn quý thầy cô bộ môn Điện-Điện tử đã cung cấp cho chúng em những nền tảng kiến thức cơ bản vững chắc để chúng em có đủ khả năng hoàn thành khóa luận này. Tp Hồ Chí Minh, tháng năm Võ Thanh hải NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… MỤC LỤC DANH MỤC CÁC BẢNG BIỂU Bảng 2.1 Sơ đồ và chức năng chân PCF8584 [2] 22 Bảng 2.2 Thiết lập giá trị đường SCL bằng các bit S21,S20 [2] 24 Bảng 2.3 Giá trị các bit S24, S23, S22 tương ứng với giá trị tần số đồng hồ ở chân CLK [2] 24 Bảng 2.4 Thanh ghi điều khiển/trạng thái S1 [2] 26 Bảng 2.5 Giá trị bit STA-STO 27 Bảng 2.6 Cách truy cập các thanh ghi của PCF8584 29 Bảng 2.7 Các tín hiệu tự động cài đặt bởi PCF8584 khi giao tiếp với vi điều khiển / vi xử lý [2] 32 Bảng 3.1 Sơ đồ chân I2C Core 35 Bảng 3.2 Các thanh ghi 37 Bảng 3.3 Chức năng các bit của thanh ghi S1 control (S1c) 37 Bảng 3.4 Chức năng các bit của thanh ghi S1 status (S1s) 38 Bảng 3.5 Thanh ghi data_buffer (S0d) 39 Bảng 3.6 Mô tả chân khối cpu_interface 43 Bảng 3.7 Giải mã địa chỉ các thanh ghi 44 Bảng 3.8 Mô tả chân khối control 47 Bảng 3.9 Mô tả chân khối i2c_interface 52 Bảng 3.10 Bảng lựa chọn giữa gen_clko và scli 578 Bảng 3.11 Mô tả chân khối compare 601 Bảng 3.12 Mô tả chân khối clock_generetor 623 Bảng 3.13 Bảng chia tần số đường SCL 63 Bảng 3.14 Bảng chia tần số clock hoạt động của Core 634 Bảng 3.15 Mô tả chân khối interrupt 645 DANH MỤC CÁC HÌNH VẼ Hình 2.1 BUS I2C và các thiết bị ngoại vi [5] 11 Hình 2.2 Kết nối thiết bị vào bus I2C ở chế độ chuẩn (Standard mode) và chế độ nhanh (Fast mode) [3] 12 Hình 2.3 Truyền nhận dữ liệu giữa chủ/tớ [3] 13 Hình 2.4 Điều kiện START và STOP của bus I2C [3] 14 Hình 2.5 Quá trình truyền 1 bit dữ liệu [3] 15 Hình 2.6 Dữ liệu truyền trên bus I2C [3] 16 Hình 2.7 Bit ACK, Not-ACK trên bus I2C [3] 16 Hình 2.8 Cấu trúc byte dữ liệu đầu tiên [3] 17 Hình 2.9 Quá trình truyền dữ liệu [3] 17 Hình 2.10 Ghi dữ liệu từ chủ đến tớ [3] 18 Hình 2.11 Đọc dữ liệu từ thiết bị tớ [3] 19 Hình 2.12 Quá trình phối hợp đọc/ghi dữ liệu [3] 19 Hình 2.13 Hình dạng và sơ đồ chân bộ điều khiển bus I2C PCF8584 [2] 20 Hình 2.14 Sơ đồ khối PCF8584 [2] 21 Hình 2.15 Thanh ghi đồng hồ S2 [2] 23 Hình 2.16 Thanh ghi dịch/đệm (shift register/read buffer) dữ liệu S0 [2] 25 Hình 2.17 Giản đồ định thì chế độ chủ truyền [2] 29 Hình 2.18 Giản đồ định thì chế độ chủ nhận [2] 30 Hình 2.19 Giản đồ định thì chế độ tớ truyền [2] 30 Hình 2.20 Giản đồ định thì chế độ tớ nhận [2] 30 Hình 2.21 Định thì RESET (tw4>=30tclk) [2] 31 Hình 2.22 Chu kì STROBE (tw5=8tclk) [2] 31 Hình 2.23 Chọn lựa chế độ giao tiếp: (1) Giao tiếp với họ MOTOROLA;(2) giao tiếp với họ INTEL [2] 32 Hình 2.24 Sơ đồ giao tiếp với vi điều khiển 8051/8048 [2] 33 Hình 2.25 Sơ đồ giao tiếp với vi điều khiển 68000 [2] 33 Hình 3.1 Sơ đồ chân I2C core 35 Hình 3.2 Sơ đồ khối I2C IP Core 36 Hình 3.3 Bộ giải mã các thanh ghi 41 Hình 3.4 Sơ đồ chân khối cpu_interface 42 Hình 3.5 Ghi dữ liệu vào thanh ghi 45 Hình 3.6 Đọc dữ liệu từ thanh ghi 45 Hình 3.7 Sơ đồ chân khối control 46 Hình 3.8 Sơ đồ máy trạng thái khối control 50 Hình 3.9 Sơ đồ chân khối i2c_interface 52 Hình 3.10 Sơ đồ máy trạng thái của khối i2c_interface 54 Hình 3.11 Mạch phát hiện điều kiện Start/Stop trên bus I2C 56 Hình 3.12 Mạch tạo tín hiệu nội i2c_busy_ox 56 Hình 3.13 Mạch đồng bộ scl_s và sdai với clock hệ thống 57 Hình 3.14 Mạch lấy dữ liệu tại cạnh lên của xung scli 58 Hình 3.16 Quá trình đọc data và ghi ACK ra I2C bus 58 Hình 3.17 Quá trình trì hoãn xung sclovà khi bus lỗi 59 Hình 3.18 Timing của một số tín hiệu khác 59 Hình 3.19 Sơ đồ chân khối compare 60 Hình 3.20 Timing compare địa chỉ 61 Hình 3.21 Sơ đồ chân khối clock_generator 62 Hình 3.22 Sơ đồ chân khối interrupt 64 Hình 3.23 Mạch tạo cờ ngắt 65 Hình 3.24 Chủ phát Start + địa chỉ + truyền dữ liệu + phát Stop 65 Hình 3.25 Tớ nhận điều kiện Start + địa chỉ + nhận dữ liệu + điều kiện Stop 66 Hình 3.26 Chủ phát Start + địa chỉ + nhận dữ liệu + phát Stop 66 Hình 3.27 Tớ nhận điều kiện Start + địa chỉ + phát dữ liệu +điều kiện Stop 67 Hình 3.28 Chủ phát Start + địa chỉ + truyền dữ liệu + Stop + Start 67 Hình 3.29 Chủ tiếp tục phát địa chỉ + truyền dữ liệu và lệnh Stop 68 Hình 3.30 Tớ nhận điều kiện Start + địa chỉ + nhận dữ liệu + điều kiện Stop + Start 68 Hình 3.31 Tớ nhận tiếp địa chỉ + nhận dữ liệu + điều kiện Stop 68 Hình 3.32 Chủ phát Start + địa chỉ + truyền dữ liệu + Stop + Start + địa chỉ + nhận dữ liệu 69 Hình 3.33 Tớ nhận điều kiện Start + địa chỉ + nhận dữ liệu + điều kiện Stop + điều kiện Start + địa chỉ + truyền dữ liệu 69 Hình 3.34 Chủ phát Start + địa chỉ + nhận dữ liệu + Stop + Start + địa chỉ + truyền dữ liệu 70 Hình 3.35 Tớ nhận điều kiện Start + địa chỉ + truyền dữ liệu + điều kiện Stop + điều kiện Start + địa chỉ + nhận dữ liệu 71 Hình 3.36 Chủ phát Start + địa chỉ + nhận dữ liệu + Stop +Start + địa chỉ + nhận dữ liệu 71 Hình 3.37 Tớ nhận điều kiện Start + byte địa chỉ + truyền dữ liệu + điều kiện Stop + điều kiện Start + địa chỉ+ truyền dữ liệu 72 Hình 3.38 Chủ phát Start + địa chỉ + truyền dữ liệu + Restart + địa chỉ + truyền dữ liệu 72 Hình 3.39 Chủ phát Restart + nhận dữ liệu 73 Hình 3.40 Tớ nhận điều kiện Start + địa chỉ + nhận dữ liệu + Restart + địa chỉ + nhận dữ liệu 73 Hình 3.41 Tớ nhận điều kiện Restart + địa chỉ + truyền dữ liệu 74 Hình 3.42 Bus lỗi khi phát hiện điều kiện Start sai vị trí 74 Hình 3.43 Bus lỗi khi phát hiện điều kiện Stop sai vị trí 75 DANH MỤC CÁC TỪ VIẾT TẮT Từ viết tắt Từ đầy đủ IC Integrated Circuit I2C-BUS Inter IC bus SDA Serial Data Line SCL Serial Clock Line VHDL VHSIC (Very High Speed Integrated Circuits) Hardware Language Design IEEE Institute of Electronics and Electrical Engineers FPGA Field-programmable Gate Array ACK Acknoledgement LỜI NÓI ĐẦU Kể từ khi được phát triển bới hãng điện tử Phillips vào đầu những năm 1980, chuẩn giao tiếp I2C đã trở thành một chuẩn giao tiếp quốc tế, được công nhận ở hơn 50 quốc gia trên thế giới.Bus I2C hiện nay được rất nhiều các hãng điện tử nổi tiếng tích hợp vào trong các sản phẩm của hãng như vi xứ lý, vi điều khiển…Do đó khả năng ứng dụng của bus I2C trong thiết kế vi mạch và các hệ thống số là rất rộng lớn.Tuy tốc độ giao tiếp không cao bằng nhiều chuẩn giao tiếp ra đời sau này, nhưng nhờ sự đơn giản về phần cứng, bus I2C vẫn là một sự lựa chọn phổ biến cho các hệ thống điều khiển sử dụng vi xử lý hay vi điều khiển. Xuất phát từ các yêu cầu thực tế và khả năng ứng dụng rộng rãi của bus I2C, nhóm chúng em quyết định chọn việc nghiên cứu và thiết kế lõi IP mềm của I2C Core với mục tiêu đề ra và đã đạt được là Core có thể điều khiển các chế độ hoạt động chủ yếu theo chuẩn giao tiếp I2C như: Chủ truyền (Master Transceiver) Chủ nhận (Master Receiver) Tớ truyền (Slave Transceiver) Tớ truyền (Slave Receiver) Đồng thời Core có thể giao tiếp ở tốc độ tiêu chuẩn (100kb/s) và tốc độ nhanh (400kb/s). Khả năng ứng dụng thực tế của đề tài này là có thể tích hợp I2C Core này vào các vi xử lý hay vi điều khiển do trung tâm ICDREC thiết kế. Sau đây là bố cục các nội dung được trình bày trong khóa luận: Chương 1: Cung cấp các kiến thức cơ bản về ngôn ngữ Verilog , phần mềm Quartus II và chương trình mô phỏng ModelSim. Chương 2: Giới thiệu về chuẩn giao tiếp I2C ở các phần cơ bản như cấu trúc phần cứng,cách kết nối giữa các phần tử trên bus,cách thực hiện giao tiếp truyền nhận dữ liệu giữa các phần tử,định dạng khung dữ liệu.Tiếp theo là đôi nét cơ bản về bộ điều khiển bus I2C PCF8584 do hãng Phillips chế tạo.Thiết kế của I2C Core trình bày trong luận văn này là dựa theo hình mẫu của PCF8584 với một số chỉnh sửa nhằm tạo sự đơn giản và thuận tiện cho việc thiết kế. Chương 3: Là phần mô tả đặc tính chi tiết của từng module (bộ phận) trong I2C Core.Mỗi module đều được miêu tả chi tiết ở các chân vào (input)/ra (output), cách hoạt động và kết nối với các module khác để tạo nên một I2C Core hoàn chỉnh.Ngoài ra các sơ đồ khối,sơ đồ máy trạng thái,giản đồ định thì của các module cũng được trình bày nhằm giúp người đọc có thể dễ dàng tham khảo. Chương 4: Tổng kết kết quả đạt được,những ưu điểm và hạn chế của đề tài cũng như hướng phát triển của đề tài trong tương lai. CHƯƠNG 1: NGÔN NGỮ VERILOG VÀ PHẦN MỀM THIẾT KẾ, MÔ PHỎNG 1.1 Giới thiệu sơ lược về ngôn ngữ lập trình Verilog [4] 1.1.1 Mô tả Verilog là một trong hai ngôn ngữ mô tả phần cứng chính (gồm VHDL và Verilog ) được người thiết kế phần cứng sử dụng để mô tả, thiết kế các hệ thống số, ví dụ như máy tính hay linh kiện điện tử. Verilog dễ học và dễ sử dụng hơn VHDL. Verilog được chuẩn hoá theo chuẩn IEEE vào năm 1995 và 2001. Verilog rất giống ngôn ngữ C và được giới chuyên môn nghiên cứu, sử dụng nhiều. Vừa gần gũi với người sử dụng vừa có cấu trúc khá đơn giản. Verilog có thể được sử dụng để thiết kế hệ thống số ở nhiều mức khác nhau, ví dụ ở mức cao như các mô hình đặc trưng đến các mức thấp như mô hình bố trí dây, điện trở, transistor trên một mạch tích hợp; mô tả các cổng logic, flip_flop trong hệ thống số; mô tả thanh ghi và sự di chuyển dữ liệu giữa các thanh ghi (RTL - Register Transfer Level). 1.1.2 Tại sao sử dụng Verilog ? Hệ thống số là một hệ thống phức tạp bậc cao. Ở cấp độ chi tiết nhất, chúng có thể bao gồm hàng nghìn thành phần như: các transistor hoặc các cổng logic, cho nên với hệ thống số lớn, thiết kế ở mức cổng không còn sử dụng nữa. Qua nhiều thập kỷ, giản đồ logic của các thiết kế logic cũng không còn nhiều nữa. Ngày nay, sự phức tạp của phần cứng đã tăng lên ở một mức độ mà giản đồ của cổng logic hầu như vô ích khi nó chỉ biểu diễn một mạng lưới phức tạp các liên kết không theo chức năng của thiết kế. Từ những năm 1970, các kỹ sư điện và máy tính đổi hướng theo ngôn ngữ mô tả phần cứng (HDL). Hai ngôn ngữ mô tả phần cứng nổi bật trong kỹ thuật là Verilog và VHDL nhưng những nhà thiết kế công nghệ thích sử dụng Verilog hơn do giao diện gần gũi với người sử dụng hơn,Verilog khá giống với ngôn ngữ C nên dễ hiểu và dễ sử dụng hơn so với VDHL. Verilog cho phép các nhà thiết kế logic thiết kế và mô tả hệ thống số ở nhiều mức độ khác nhau và có sự hỗ trợ từ các công cụ thiết kế bằng máy tính để giúp cho việc xử lý thiết kế ở những mức độ khác nhau. Cách sử dụng cơ bản của Verilog trong thiết kế mạch tích hợp là mô phỏng thiết kế và tạo mẫu trên FPGA trước khi chuyển sang sản xuất. Verilog được sử dụng để mô tả một cách chính xác chức năng của bất kỳ hệ thống số nào và nạp chương trình tạo mẫu lên FPGA, ví dụ như máy tính, các bộ vi xử lý,… tuy tốc độ chậm và lãng phí diện tích hơn. Những thiết kế mức thấp hơn trong Verilog được thực hiện trên VLSI để đạt đến tốc độ cực đại và có diện tích cực tiểu. Tuy nhiên sử dụng thiết kế dùng Verilog trên FPGA sẽ tiết kiệm chi phí và thời gian thiết kế. 1.1.3 Một số qui ước thiết kế [1] Các qui ước gần với ngôn ngữ lập trình C. Lời giải thích được đặt ở cuối câu bởi dấu “//” hay kí hiệu /* . .  . */. Các từ khóa được dành riêng và tất cả ký tự là chữ thường. Ngôn ngữ phân biệt chữ in và chữ thường. Một số có thể có dấu hoặc không dấu được xác định theo công thức xác định số bit. là ký tự đơn “ ‘ ”, theo sau là một trong các ký tự b (nhị phân), d(thập phân), o(bát phân) và h(thập lục phân). chứa các chữ số phù hợp. Ví dụ : ‘h8fa  //số hex ‘o765 //số bát phân 4’b1101 // số nhị phân 4 bit 1101 5’d3   // số thập phân 5 bit - 4’b11 //số bù hai 4 bit của 0011 là 1101 Các toán tử là một, hai hay ba ký tự được sử dụng trong biểu thức 1.1.3.1 Cấu trúc chương trình: Module: ngôn ngữ Verilog mô tả hệ thống số như là thiết lập một module Cấu trúc một module như sau : module module_name (danh sách các port);     //các khai báo     input, output, inout, reg, wire, parameter . . .     //các câu lệnh     Initial statement     Always statement     Module Instantiation     Continuous assignment endmodule Ví dụ : Thiết kế mô hình hành vi cho cổng NAND module NAND (in1, in2, out);     input in1, in2;     output out;     assign out=~(in1&in2) endmodule   Với & là toán từ “and”, ~ là toán tử đảo bit. Điều lệnh assign chờ sự thay đổi ở vế phải biểu thức và kết quả được gán cho biểu thức bên trái (ngõ ra out). 1.1.3.2 Các kiểu dữ liệu và vùng nhớ: Vì mục đích của Verilog là thiết kế phần cứng số, nên loại dữ liệu cơ bản để thiết kế là  thanh ghi (reg) và dây (wire). Biến reg lưu trữ giá trị trước đó, giá trị được gán theo qui trình, trong khi đó biến wire mô tả sự kết nối vật lý giữa các thực thể vật lý như cấu trúc các cổng. Wire không lưu trữ giá trị. Thực tế một biến wire chỉ là một nhãn trên dây. Dữ liệu wire chỉ là một trong những loại dữ liệu net trong Verilog. a. các kiểu dữ liệu: Các đối tượng dữ liệu wire và dữ liệu reg có thể có những giá trị sau : 0 logic 0 hoặc sai 1 logic 1 hoặc đúng X giá trị logic không xác định Z trạng thái tổng trở cao của cổng ba trạng thái Biến reg được gán giá trị ban đầu là X ở đầu chương trình. Biến wire không được nối với bất kỳ cái gì cũng có giá trị là X Có thể xác định cỡ của thanh ghi hoặc dây trong khai báo. Ví dụ : reg [7:0] A,B; //thanh ghi A và B có 8 bit từ 0 – 7, bit cao nhất là bit 7 (MSB) wire [3:0] data; //dây data có 4 đường từ 0 – 3 b. Vùng nhớ: Vùng nhớ được định nghĩa giống như vectơ của thanh ghi. Ví dụ một vùng nhớ gồm 1024 từ, mỗi từ 16 bit: reg [15:0] Mem [1024:0]; Kí hiệu Mem[0] sẽ tham chiếu đến vùng nhớ đầu tiên . . . Chú ý rằng không thể tham chiếu đến một bit trong 1 từ của vùng nhớ, muốn làm điều này phải chuyển dữ liệu vào một thanh ghi trung gian. 1.1.3.3 Toán tử a.Toán tử so sánh: Gồm các toán tử quan hệ so sánh 2 toán hạng và trả ra giá trị logic. Đúng là 1, sai là 0. Nếu bất kì bit nào không xác định thì kết quả ra là không xác định > lớn hơn >= lớn hơn hoặc bằng < nhỏ hơn <= nhỏ hơn hoặc bằng == bằng logic != khác b. Các toán tử điều kiện: !   đảo logic &&  AND logic ||  OR logic c. Các toán tử set bit ~    đảo bit &    AND |    OR ^    XOR ~&   NAND ~| NOR d. Các toán tử khác {,}    ghép thanh ghi hoặc dây >    dịch phải thanh ghi ?:     điều kiện Ví dụ: Dùng điều lệnh assign để viết một module giải đa hợp từ 2 đường sang 4 đường (bạn có thể tự viết giải đa hợp từ 3 sang 8 hay 4 sang 16) module demux(data,in1,in0,out0,out1,out2,out3); input data; input  in0,in1; output  out0,out1,out2,out3; assign out0= data&(~in1)&(~in0); assign out1= data&(~in1)&(in0); assign out2= data&(in1)&(~in0); assign out3= data&(in1)&(in0); endmodule 1.1.3.4 Các cấu trúc điều khiển Verilog rất phong phú các câu lệnh điều khiển có thể sử dụng trong phần thủ tục. Hầu hết chúng rất quen thuộc với những người lập trình bằng ngôn ngữ C. Điểm khác biệt lớn nhất chính là thay dấu ngoặc {} trong ngôn ngữ C bằng từ khóa begin và end trong Verilog . Như đã nói ở trên, dấu ngoặc {,} dùng để nối chuỗi các bit. Có các loại cấu trúc sau : Cấu trúc if . . . else Cấu trúc case: không giống cấu trúc case trong C ở chỗ không cần lệnh break. Ví dụ: case (State)                       st0:          State          = st1;           st1:          State          = st2;           st2:          State          = st3;           st3:          State          = st0; endcase Ví dụ: Một module 3 trạng thái dùng always và cấu trúc if . . .else, nếu ngõ Con là 1 thì ngõ ra bằng ngõ vào, nếu Con là 0 thì ngõ ra sẽ ở trạng thái tổng trở cao. module tristate(In,Con,Out); input In,Con; output Out; reg Out; always    begin       if (Con==1'b1)       Out=In;       else       Out=1'bz;    end endmodule Tiếp theo chúng ta sẽ tìm hiểu về khối lệnh always điều khiển theo sự kiện (rất thông dụng trong việc viết các module có xung clock), sự kết hợp giữa nhiều module và một số ví dụ. 1.1.3.5 Điều khiển theo sự kiện Điều khiển theo sự kiện có hai loại : điều khiển theo tác động cạnh và điều khiển theo tác động mức. Điều khiển theo tác động cạnh hay mức có dạng như sau : @ sự kiện điều khiển câu lệnh Với điều khiển theo tác động cạnh ta có hai từ khóa posedge (cạnh lên) và negedge (cạnh xuống) Ví dụ: always @(posedge clock) // tác động ở cạnh lên của xung clock always @(negedge clock) // tác động ở cạnh xuống của xung clock always @(register1) // tác động với bất kỳ sự thay đổi nào trên thanh ghi register1 Ví dụ: Module đếm lên đơn giản với ngõ ra out 8 bit, chân xung clock clk, chân enable cho phép và chân reset để ngõ ra trở về 0. Khi có cạnh lên của clk, nếu reset là 0, enable là 1 thì ngõ ra out sẽ tăng lên. module counter    ( out        ,  // Output of the counter enable  ,  // enable for counter clk         ,  // clock input reset        // reset input ); output [7:0] out; input enable, clk, reset; reg [7:0] out; always @(posedge clk)      if (reset) begin // active high reset         out <= 8'b0 ;     end     else if (enable) begin          out <= out + 1;     end endmodule  1.1.3.6