Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 263 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
263
Dung lượng
8,13 MB
Nội dung
UỶ BAN NHÂN DÂN TỈNH ĐỒNG THÁP TRƯỜNG CAO ĐẲNG NGHỀ ĐỒNG THÁP GIÁO TRÌNH MƠN HỌC/ MƠ ĐUN: VI MẠCH SỐ LẬP TRÌNH NGÀNH/ NGHỀ: ĐIỆN TỬ CƠNG NGHIỆP TRÌNH ĐỘ: CAO ĐẲNG, TRUNG CẤP (Ban hành kèm theo Quyết định Số: 257 /QĐ-TCĐNĐT ngày 13 tháng năm 2017 Hiệu trưởng Trường Cao đẳng nghề Đồng Tháp) Đồ áp, năm 2017 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại giáo trình nên nguồn thơng tin phép dùng ngun trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm LỜI GIỚI THIỆU Để thực biên soạn giáo trình đào tạo nghề Điện tử cơng nghiệp trình độ Cao Đẳng Nghề Trung Cấp Nghề, giáo trình Vi mạch số lập trình giáo trình mơ đun đào tạo chuyên ngành biên soạn theo nội dung chương trình khung Bộ Lao động Thương binh Xã hội Tổng cục Dạy Nghề phê duyệt Nội dung biên soạn ngắn gọn, dễ hiểu, tích hợp kiến thức kỹ chặt chẽ với nhau, logíc Trong năm gần đây, công nghệ FPGA ( Field Programmable Gate Array) phát triển mạnh mẽ lĩnh vực điện tử FPGA hiểu IC số lập trình được, ứng dụng việc xử lý tín hiệu số, xử lý số,…để thay IC số thông thường, cồng kềnh Bằng cách sử dụng FPGA người thiết kế tạo mạch điện chức thay sử dụng nhiều IC số Chính vậy, nhu cầu hiểu biết IC số lập trình nói chung FPGA nói riêng nhu cầu cần thiết cho cán kỹ thuật điện tử Nội dung giáo trình bố cục bao gồm với nội dung sau: Bài 1: Giới thiệu chung PLD, CPLD FPGA Bài 2: Họ CPLD Bài 3: Họ FPGA Bài 4: Qui trình thiết kế cho CPLD FPGA hãng Xilinx Bài 5: Phần mềm ISE modelsim Bài 6: Ngôn ngữ Verilog HDL Bài 7: Mốt số chương trình ứng dụng Tuy nhiên, tùy theo điều kiện sở vật chất trang thiết bị, trường có thề sử dụng cho phù hợp Mặc dù cố gắng tổ chức biên soạn để đáp ứng mục tiêu đào tạo không tránh khiếm khuyết Rất mong nhận đóng góp ý kiến thầy, giáo, bạn đọc để nhóm biên soạn hiệu chỉnh hồn thiện Các ý kiến đóng góp xin gửi Trường Cao đẳng nghề Đồng Tháp Đồng Thápi, ngày tháng năm 2017 Tham gia biên soạn MỤC LỤC TRANG LỜI GIỚI THIỆU MỤC LỤC BÀI 10 GIỚI THIỆU CHUNG VỀ PLD, CPLD VÀ FPGA 10 Lịch sử phát triển: 10 Sự cần thiết ý nghĩa thực tế việc sử dụng mảng logic lập trình được: 12 Cấu trúc PLD: 13 3.1 PAL: 13 3.2 PLA: 15 3.3 GAL 15 Cấu trúc CPLD: 16 Cấu trúc FPGA: 18 Sự khác biệt PLD, CPLD FPGA: 19 Phần mềm hỗ trợ: 20 BÀI 21 HỌ CPLD 21 Giới thiệu chung: 21 Vi mạch CPLD: 22 BÀI 28 HỌ FPGA 28 Giới thiệu chung: 28 Vi mạch FPGA: 29 2.1 Mô tả FPGA: 30 2.2 Thông số giới hạn: 48 2.3 Đặc tính lưu trữ liệu: 48 2.4 Đặc tính điện DC: 49 2.5 Công suất tiêu thụ: 54 2.6 Sơ đồ chân: 55 2.7 Ý nghĩa tên linh kiện: 70 Lựa chọn phương án cấu hình cho FPGA: 72 BÀI 74 QUY TRÌNH THIẾT KẾ CHO CPLD VÀ FPGA CỦA HÃNG XILINX 74 Phương án lựa chọn CPLD FPGA 74 Qui trình thiết kế cho CPLD hãng Xilinx: 75 Qui trình thiết kế cho FPGA hãng Xilinx: 79 BÀI 81 PHẦN MỀM ISE VÀ MODELSIM 81 Cài đặt khởi động ISE: 81 Tạo Project ISE: 89 Cài đặt khởi động Modelsim: 93 Mô dạng sóng ISE Modelsim: 100 4.1 Mô ISE: 100 4.2 Mô modelsim: 108 Gán chân thích ứng với thiết bị: 122 Biên dịch tổng hợp chương trình: 124 Đổ chương trình vào CPLD FPGA: 129 Tạo sử dụng core có sẵn từ ISE: 141 BÀI 147 NGÔN NGỮ VERILOG HDL 147 Giới thiệu ngôn ngữ Verilog HDL: 147 1.1 HDL gì? 147 1.2 Tầm quan trọng HDL: 148 1.3 Đặc điểm bật Verilog: 149 1.4 Xu hướng HDL: 149 Tổng quan ngôn ngữ Verilog: 150 2.1 Lịch sử ngôn ngữ Verilog 150 2.2 Phương pháp thiết kế hệ thống: 151 2.3 Các khái niệm Verilog: 152 2.4 Module port: 160 Verilog HDL mức thiết kế phổ biến: 163 3.1 Thiết kế mức cổng: 163 3.2 Các cổng định nghĩa sẵn: 163 3.3 Thiết kế mức Dataflow: 167 3.4 Thiết kế mức hành vi: 178 3.5 Tast Function: 192 Bài tập 6: 197 BÀI 199 MỘT SỐ CHƯƠNG TRÌNH ỨNG DỤNG 199 Điều khiển led đơn: 199 1.1 Chương trình chính: 199 1.2 Chương trình testbench: 201 1.3 kết mô phỏng: 202 Thanh ghi dịch: 202 2.1 Chương trình chính: 202 2.2 Chương trình testbench: 203 2.3 Kết mô phỏng: 205 Mạch đếm: 205 3.1 Chương trình chính: 205 3.2 Chương trình testbench: 206 3.3 Kết mô phỏng: 208 Mạch đếm vòng xoắn Johson: 208 4.1 Chương trình chính: 208 4.2 Chương trình testbench: 209 4.3 Kết mô phỏng: 210 Bộ Mạch mã hóa giải mã: 210 5.1 Bộ mã hóa encoder sang 3: 210 5.2 Bộ giải mã decoder sang 3: 213 Mux/Demux: 217 6.1 Bộ mux: 217 6.2 Bộ demux: 220 Bộ so sánh cộng liệu: 225 7.1 Bộ so sánh: 225 7.2 Bộ cộng liệu: 230 Giao tiếp với led ma trận: 238 Điều chế độ rộng xung chia tần: 241 9.1 Chia tần số: 241 9.2 Điều chế độ rộng xung: 244 10 Truyền liệu song song: 249 10.1 Chương trình chính: 249 10.2 Chương trình testbench: 250 10.3 Kết mô phỏng: 252 11 Giao tiếp ADC cảm biến nhiệt độ 252 11.1 Chương trình chính: 252 11.2 Chương trình testbench: 255 11.3 Kết mô phỏng: 257 12 Tạo đệm liệu: 258 13 Sử dụng core có sẵn ISE vào thiết kế: 260 14 Bài tập 7: 261 TÀI LIỆU THAM KHẢO 262 MÔN ĐUN: VI MẠCH SỐ LẬP TRÌNH Mã mơ đun: MĐ30 Vị trí, tính chất, ý nghĩa vai trị mơ đun: - Vị trí mơ đun: Mơ đun bố trí dạy sau học song mô đun vi xử lý, vi điều khiển - Tính chất mơ đun: Là mơ đun bắt buộc - Ý nghĩa vai trò mô đun: giúp sinh viên nắm bắt kiến thức kỹ lập trình FPGA ứng dụng vào lĩnh vực điện tử, mô đun thiếu sinh viên nghề điện tử công nghiệp Mục tiêu mơ đun: - Trình bày cấu tạo, đặc tính họ vi mạch số lập trình như: PLD, CPLD, FPGA theo nội dung học - Phân tích mạch ứng dụng vi mạch số lập trình CPLD, FPGA theo tiêu chuẩn nhà sản xuất - Thiết kế yêu cầu điều khiển dùng CPLD, FPGA theo yêu cầu kỹ thuật - Sửa chữa, thay linh kiện hư hỏng đạt yêu cầu kỹ thuật - Kiểm tra xác điều kiện hoạt động thiết bị Nội dung mô đun: Số TT Thời gian Tên mô đun Tổng số Lý Thực thuyết hành Kiểm tra Giới thiệu chung PLD, CPLD, FPGA, mảng logic lập trình 5.5 5.5 0 Họ CPLD 5.5 5.5 0 Họ FPGA 6 0 Qui trình thiết kế cho CPLD FPGA Xilinx 9 Phần mềm ISE modelsim 15 10 Ngôn ngữ Verilog HDL 34 18 15 Viết số chương trình ứng dụng 75 66 Tổng 150 52 91 7 248 #20000; duty = 5; // - nhap duty = 5% - end // -tao xung clock vao always #5 clk =!clk; endmodule 9.2.3 Kết mơ phỏng: Hình 7.17 – Kết mơ điều chế độ rộng xung PWM duty = 1% Nhìn vào kết mơ ta thấy, với duty = 1%, ngõ clk_out1 có thời gian mức logic “1” chu kỳ xung clk, thời gian mức logic “0” 99 chu kỳ xung clk (bằng 100 – chu kỳ xung mức 1), ngõ clk_out2 có thời gian mức logic “1” chu kỳ xung clk, thời gian mức logic “0” 396 chu kỳ xung clk (bằng 400 – xung mức 1) Như duty = 1/100 = 4/400 = 1% 249 Hình 7.17 – Kết mơ điều chế độ rộng xung PWM duty = 5% Nhìn vào kết mơ ta thấy, với duty = 5%, ngõ clk_out1 có thời gian mức logic “1” chu kỳ xung clk, thời gian mức logic “0” 95 chu kỳ xung clk (bằng 100 – chu kỳ xung mức 1), ngõ clk_out2 có thời gian mức logic “1” 20 chu kỳ xung clk, thời gian mức logic “0” 380 chu kỳ xung clk (bằng 400 – 20 xung mức 1) Như duty = 5/100 = 20/400 = 5% 10 Truyền liệu song song: 10.1 Chương trình chính: Viết chương trình thực truyền liệu song song có sơ đồ khối hình 7.18 clk res [7:0] data_out Transmitter EN [7:0] data_in Hình 7.18 – Sơ đồ khối truyền liệu song song Trong đó: clk: xung clock phát res: tín hiệu reset data_in: liệu vào có độ rộng bit EN: tín hiệu cho phép truyền, tích cực mức data_out: liệu truyền ngồi có độ rộng bit 250 Dữ liệu vào đưa vào chân data_in, liệu không truyền ngoài, liệu data_out giữ nguyên giá trị trước EN = Khi EN lên mức 1, liệu vào data_in truyền data_out để truyền Khi tín hiệu res = 0, ngõ phát treo lên trạng thái tổng trở cao Chương trình chính: module transmiter (res, clk, data_in, data_out, EN); // cac ngo vao -input res; input clk; // xung clock he thong - input [7:0] data_in; // du lieu vao input EN; // - tin hieu cho phep truyen // cac ngo output [7:0] data_out; // du lieu truyen di reg [7:0] data_out; // main program -always @ (posedge clk) begin if(!res) data_out = 'dz; else if (!EN) data_out = data_out; else data_out = data_in; end endmodule 10.2 Chương trình testbench: module test_transmiter; // - Inputs reg res; reg clk; reg [7:0] data_in; reg EN; // - Outputs -wire [7:0] data_out; // Instantiate the Unit Under Test (UUT) - 251 transmiter uut (.res(res), clk(clk), data_in(data_in), data_out(data_out), EN(EN) ); initial begin // Initialize Inputs -res = 0; clk = 0; data_in = 0; EN = 0; #100; res = 1; // cho reset len muc #100 data_in = 10; // - cho du lieu vao bang 10 - #100 EN = 1; // - cho phep truyen du lieu di #100 data_in = 20; #100 EN = 0; #100 data_in = 30; #100 EN =1; // - nhap du lieu thu -// - dung truyen // - nhap du lieu thu -// - cho phep truyen end // tao xung clock he thong -always #10 clk = !clk; endmodule 252 10.3 Kết mô phỏng: Hình 7.19 – Kết mơ truyền liệu song song Nhìn vào kết mơ truyền liệu ta thấy: Tại thời điểm res = ngõ trạng thái tổng trở cao Khi res = 1: Khi EN = 0: liệu data_in = 10 nhập vào trước khơng truyền ngồi, data_out giữ ngun giá trị trước data_out = z Khi EN = 1: liệu ngõ vào data_in truyền data_out giá trị 10 20 Dữ liệu data_in = 30 khơng truyền ngồi EN = data_out giữ nguyên giá trị trước data_out = 20, EN = giá trị data_in = 30 truyền data_out 11 Giao tiếp ADC cảm biến nhiệt độ 11.1 Chương trình chính: Viết chương trình giao tiếp ADC-8bit hiển thị led 7-đoạn phương pháp qt có sơ đồ khối hình 7.20 [2:0] Chon led Cảm biến nhiệt độ ADC bit bit led 7-đoạn FPGA [7:0] mã bảy đoạn Hình 7.20 – Sơ đồ khối khối giao tiếp ADC led đoạn 253 Cảm biến nhiệt độ xuất tín hiệu tương tự, tín hiệu tương tự đưa vào ADC-8bit, ADC-8bit có nhiệm vụ chuyển tín hiệu tương tự nhận từ cảm biến nhiệt độ thành tín hiệu số tương ứng dạng số hex FPGA có nhiệm vụ nhận liệu số hex từ ADC, sau giải mã cho hiển thị ba led-7 đoạn phương pháp qt Chương trình chính: module quet_3led (in, seven_doan, chonled, clk, res); // cac ngo vao input clk; // xung clock input [7:0] in; // du lieu bit tu ADC -input res; // tin hieu reset // cac ngo output [2:0] chonled; // chon led hien thi output [7:0] seven_doan; // doan + dau cham reg [2:0] chonled; reg [7:0] seven_doan; // bien trung gian reg [1:0] K; reg [3:0] M; reg [5:0] N; // -dinh nghia ma doan parameter [6:0] so0 = 7'h40; //c0 parameter [6:0] so1 = 7'h79; //f9 parameter [6:0] so2 = 7'h24; //a4 parameter [6:0] so3 = 7'h30; //b0 parameter [6:0] so4 = 7'h19; //99 parameter [6:0] so5 = 7'h12; //92 parameter [6:0] so6 = 7'h02; //82 parameter [6:0] so7 = 7'h78; //f8 parameter [6:0] so8 = 7'h00; //80 parameter [6:0] so9 = 7'h10; //90 // main program always @ (posedge clk) 254 begin if(!res) begin K=0; N=0; M = 0; end else begin case (K) // hien thi led doan thu nhat -(0): begin chonled=~1; if (N==63) begin // delay K=1; N=0; end else begin K=0; N=N+1; end M = (in%100)%10; end // hien thi led doan thu hai -1: begin chonled=~2; if (N==63) begin // delay K=2; N=0; end else begin K=1; N=N+1; end M = (in/10)%10; 255 end // hien thi led doan thu ba -2: begin chonled=~4; if (N==63) begin // delay -K=0; N=0; end else begin K=2; N=N+1; end M = in/100; end endcase case(M) 0: begin seven_doan = {1'b1,so0}; end 1: begin seven_doan = {1'b1,so1}; end 2: begin seven_doan = {1'b1,so2}; end 3: begin seven_doan = {1'b1,so3}; end 4: begin seven_doan = {1'b1,so4}; end 5: begin seven_doan = {1'b1,so5}; end 6: begin seven_doan = {1'b1,so6}; end 7: begin seven_doan = {1'b1,so7}; end 8: begin seven_doan = {1'b1,so8}; end 9: begin seven_doan = {1'b1,so9}; end endcase end end endmodule 11.2 Chương trình testbench: module test_quet_led; 256 // Inputs reg [7:0] in; reg clk; reg res; // - Outputs wire [7:0] seven_doan; wire [2:0] chonled; // - Instantiate the Unit Under Test (UUT) quet_3led uut (.in(in), seven_doan(seven_doan), chonled(chonled), clk(clk), res(res) ); initial begin // - Initialize Inputs in = 0; clk = 0; res = 0; #100; res =1; // - cho reset len - #100 in=201; // - nhap du lieu thu #6000 in = 123; // - nhap du lieu thu #6000 in = 255; // - nhap du lieu thu end // - tao xung clock he thong -always #10 clk = !clk; endmodule 257 11.3 Kết mơ phỏng: Hình 7.21 – Kết mô giao tiếp ADC led đoạn giả lập liệu từ ADC 201 Nhìn vào kết mô với liệu vào in = 201 ta thấy: Đầu tiên, tín hiệu chonled = 110, tức led đoạn thứ cho phép sáng, đồng thời mã đoạn số “f9” xuất led thứ để hiển thị Tiếp theo, tín hiệu chonled = 101, tức led đoạn thứ hai cho phép sáng, đồng thời mã đoạn số “c0” xuất led thứ hai để hiển thị Cuối cùng, tín hiệu chonled = 011, tức led đoạn thứ ba cho phép sáng, đồng thời mã đoạn số “a4” xuất led thứ ba để hiển thị Quá trình quét lặp lặp lại Tương tự vậy, hình 7.22 7.23 cho ta thấy kết mô trường hợp giả lập liệu từ ADC 123 255 258 Hình 7.22 – Kết mơ giao tiếp ADC led đoạn giả lập liệu từ ADC 123 Hình 7.23 – Kết mô giao tiếp ADC led đoạn giả lập liệu từ ADC 255 12 Tạo đệm liệu: Bộ đệm liệu thường gọi FIFO, có chức ghi đọc liệu có sơ đồ khối hình 7.24 259 DIN[15:0] DOUT[15:0] WR_EN FULL RD_EN FIFO EMPTY CLK RES Hình 7.24 – Sơ đồ khối khối FIFO Trong đó: DIN: liệu ghi vào FIFO, có độ rộng 16 bit DOUT: liệu đọc từ FIFO, có độ rộng 16 bit RD_EN: chân cho phép đọc liệu từ FIFO WR_EN: chân cho phép ghi liệu vào FIFO CLK: xung clock đọc ghi liệu EMPTY: chân báo liệu FIFO hết FULL: chân báo ô nhớ FIFO đầy RES: chân reset hệ thống Trong nội dung giáo trình giới thiệu FIFO có khả lưu trữ 16 ô nhớ, ô nhớ có chứa liệu 16 bit Khi liệu ghi vào ô nhớ FIFO đủ 16 mà chưa có liệu đọc FIFO báo đầy nhớ tín hiệu FULL không cho phép ghi liệu vào FIFO Ngược lại, liệu FIFO đọc hết ngồi FIFO báo hết liệu tín hiệu EMPTY khơng cho phép đọc liệu từ FIFO FIFO vừa đọc ghi liệu lúc FIFO ISE hỗ trợ sẵn IP core, ta tạo FIFO từ IP core Xilinx Để tạo FIFO, ta vào Memories & Storage Elements 260 Xilinx CORE Generator, chọn FIFOs Sau chọn thơng số cho FIFO sau: Write Width: chọn độ rộng liệu FIFO (độ rộng liệu DIN DOUT) Write Depth: số ô nhớ FIFO Hình 7.25 – Thiết lập thơng số FIFO cần tạo Sau thiết lập thông số FIFO cần tạo, ta tiến hành tạo FIFO theo bước tạo IP core phần 5.8 13 Sử dụng core có sẵn ISE vào thiết kế: Sau tạo IP core, ta add IP core tạo vào project sử dụng chương trình mà ta viết Ta xem xét IP core FIFO vừa tạo phần 7.12, ta thấy IP core tạo source verilog có khai báo vào giống chương trình mà ta viết Một đoạn source khai báo IP core FIFO vừa tạo sau: module fifo_generator_v6_1(clk, rst, din, wr_en, rd_en, dout, full, empty); input clk; input rst; 261 input [7 : 0] din; input wr_en; input rd_en; output [7 : 0] dout; output full; output empty; 14 Bài tập 7: Bài tập 1: viết chương trình thiết kế mạch đếm lên từ đến 99 Bài tập 2: viết chương trình thiết kế mạch đếm xuống từ 99 xuống Bài tập 3: viết chương trình thiết kế mạch đếm lên từ đến 99, sau đếm xuống từ 99 đến 0, sau lặp lại chu trình đếm Bài tập 4: viết chương trình thiết kế mạch truyền/nhận liệu theo chuẩn RS232 Bài tập 5: viết chương trình xuất dịng chữ “VMSLT” lên LCD 16x2 Bài tập 6: viết chương trình thiết kế đồng hồ số hiển thị led đoạn Bài tập 7: viết chương trình thiết kế đo tần số hiển thị led đoạn Bài tập 8: viết chương trình thiết kế điều chế độ rộng xung PWM YÊU CẦU VỀ ĐÁNH GIÁ KẾT QUẢ HỌC TẬP BÀI 7: Nội dung: - Về kiến thức: Trình bày kiến thức cụ thể hệ thống số - Về kỹ năng: Sử dụng phần mềm ISE modelsim để thiết kế, mô ứng dụng cụ thể Tạo IP core có sẵn từ ISE Kết nối phần cứng, đổ chương trình vào FPGA - Về thái độ: Đảm bảo an toàn điện vệ sinh công nghiệp Phương pháp: - Về kiến thức: Được đánh giá hình thức kiểm tra viết, vấn đáp - Về kỹ năng: Đánh giá kỹ sử dụng ngôn ngữ Verilog HDL để thiết kế ứng dụng cụ thể Kỹ kết nối phần cứng theo yêu cầu, đổ chương trình thiết kế vào FPGA - Về thái độ:Tỉ mỉ, cẩn thận, xác, an tồn điện ngăn nắp công việc 262 TÀI LIỆU THAM KHẢO 10 11 12 13 Computer Architecture Handbook on Verilog HDL, Dr.Daniel - C.Hude, Computer Science Department Bucknell University Lewisburg, 1997 Verilog Hardware Description Laguage Reference Manual, Open Verilog International, 1992 The Complete Verilog Book, Vivek Sagdeo – Sun Micro Systems, 1998 Design Through Verilog HDL, IEEE Press, 2004 The Verilog Hardware Description Language – Fifth Edition, Donald E.Thomas – ECE Department Carnegie Mellon University Pittsburgh, Pholip R.Moorby – Co-design Automation, 2002 A Guide to Digital Design and Synthesis - Second Editon, Samir lapnitkar, 2003 Spartan – 3E FPGA Family Data Sheet, Xilinx, 2009 ModelSim User’s Manual A verilog HDL, second edition Verilog coding for logic synthesis - A JOHN WILEY & SONS, INC., PUBLICATION A Guide to Digital Design and Synthesis, Second Edition - Prentice Hall PTR – 2003 Introduction to Verilog - Peter M Nyasulu – 2001 www.google.com ... soạn giáo trình đào tạo nghề Điện tử cơng nghiệp trình độ Cao Đẳng Nghề Trung Cấp Nghề, giáo trình Vi mạch số lập trình giáo trình mơ đun đào tạo chun ngành biên soạn theo nội dung chương trình. .. sinh vi? ?n nắm bắt kiến thức kỹ lập trình FPGA ứng dụng vào lĩnh vực điện tử, mô đun thiếu sinh vi? ?n nghề điện tử công nghiệp Mục tiêu mô đun: - Trình bày cấu tạo, đặc tính họ vi mạch số lập trình. .. mẽ lĩnh vực điện tử FPGA hiểu IC số lập trình được, ứng dụng vi? ??c xử lý tín hiệu số, xử lý số, …để thay IC số thông thường, cồng kềnh Bằng cách sử dụng FPGA người thiết kế tạo mạch điện chức thay