PVP_bk3i1_k50 MỤC LỤC : Ngày nay công nghệ vi ñiện tử ñã tr ở thành m ột lĩnh v ực phát tri ển và ñ ược r ất nhi ều c nó lại ñược chú trọng ñến vậy,xét về phạm vi ứng dụng ta thấy hệ Nhúng có liên quan,ảnh hưởng của con người,nó làm cho cuộc sống c ủa con người ngày càng ti ện nghi,thoải mái.sự xuất hiệ cầu ñời sống của con người không chỉ tăng về số lượng mà còn tăng về tính năng,chất l ượng và ,nó làm tăng năng suất lao ñộng,gi ảm sức lao ñ ộng c ủa con ng ười,thay con người hoạt ñộng quan ñến các ứng dụng công nghệ cao như vũ trụ… Với tầm quan trọng của công nghệ vi ñiện tử.N ong sự phát triển của các nước trên thế giới.Nước ta cũng không ngo ại l ệ,vi ệc xác ñịnh ñượ ,nghiên cứu.Nhiều cơ sở và trung tâm nghiên cứu ñã và ñang hoạt ñộng ,phát triển. Với sinh vi Nhiều cuộc thi, nhi ều công trình nghiên cứu khoa học phục vụ cho việc học và nghiên c ứu ñã hỏi,sự sáng tạo,tư duy,gắn liền với thực tiễn. Theo yêu cầu của mô học cũng như ñể sử dụng th hiết kế bộ xử lý hình ảnh quảng cáo trên nền LED matrix sử dụng FPGA”. Nội dung ñè tài : Tì Tìm hiểu phần mềm hỗ trợ thiết kế xilinx ISE Thiết kế hệ thống Vì ñây là trong khuôn khổ thí nghiệm, sử dụng ngôn ngữ VHDL ñể mô hình hóa hệ thống phần c ứng . Em xin chân thành cám GA và ph ương pháp thi ết kế mô hình hóa phần cứng. Hà Nội, ngày 30-10-2009 Sinh viên thực hi LỜI MỞ ĐẦU
PVP_bk3i1_k50 CHƯƠNG I ĐẶT VẤN ĐỀ VÀ NHIỆM VỤ CỦA ĐỒ ÁN CHƯƠNG 1 : I – Đặt vấn ñề Trong thời ñại ngày nay, khoa học công nghệ ngày càng phát tri ển và ñ ược ứng h vực như gi ả trí, dịch v ụ qu ảng cáo khuếch trương sản phầm ñể thu hút sự chú ý của các do triển mạnh mẽ. Để làm cho sản phầm hoặc hình ảnh công ty thu hút sự chú ý, quan tâm của khách choáng ngợp, bắt mắt… Để giải quyết vấn ñề này thì có rất nhiều phương án, nhưng hi ện nay p là dùng b ảng led matrix. Với những xử lý hình ảnh sống ñộng, màu sắc ấn tượng ñã là sự lựa c hiết kế hệ thống bảng ñi ện tử ñ ể ph ục v ụ nhu c ầu qu ảng cáo, khuếch trương hình ảnh cửa iết. II – Nhiệm vụ của ñồ án Với sự lựa chọn ñể tài này, trước tiên em cần phải tìm hiểu chi ED, hiển thị xử lý hình ảnh…Sau ñó tìm hi ểu các phương pháp ứng dụng FPGA ñể giải quyết bài g và hiểu cách thức hoạt ñộng, phương pháp lập trình sử dụng FPGA cùng với thời gian thực hiệ dạng mô hình, hi vọng khi có thời gian và ñiều kiện thì em có thể triển khai ứng dụng thực tế CHƯƠNG II CƠ SỞ LÝ THUYẾT CHƯƠNG 2 : I - LED Matrix Dựa trên nguyên tắc như quét màn hình,ta có thể thực hiện việc hi ển th ị ma t hang và quét theo cột.Mỗi Led trên ma tr ận Led có th ể coi nh ư m ột ñiểm ảnh.Địa chỉ của mỗ mã hang và giải mã cột,ñiểm ảnh này sẽ ñược xác ñịnh nhờ dữ liệu ñưa ra từ bộ ñi ñi ều khiển. khi xác ñịnh ñịa chỉ và trạng thái của ñiểm ảnh tiếp theo thì các ñiểm ảnh còn l ại s ẽ chuy u ốn thì ta ph ải quét ma trận nhiều lần với tốc ñộ quét rất lớn,lớn hơn nhiều lần thời gian hình/s do ñó nếu tốc ñộ quét lớn m ắt người sẽ không nhận biết ñược sự gián ñoạn hay là nhấp ở ñây là ñiều chỉnh ñộ sang của Led,thong thường Led sáng bình thường ở ñiện áp 2-3V,dòng ñi mạch thiết kế phải ñáp ứng ñủ 2 ñiều kiện trên. Sơ ñồ khối :
PVP_bk3i1_k50 Để thực hiện ñược quét hang và quét cột thì ma trận Led ñược thiết kết như sau: Trạng thái của một Led sẽ ñược quyết ñịnh bởi tín hi ệu ñi ện áp ñi vào ñ ồng th ời c ả 2 châ d(chân Anot),còn chân catot thì nối ñất.Đèn tắt khi ta không cấp nguồn cho Led hoặc ñể 2 ñầu a có sơ ñồ mạch nguyên lý của Led 8x8: CHƯƠNG 3 : II – FPGA Field-programmable gate array (FPGA) là vi mach dùng cấu trúc mảng phần tử logic mà có thể lập trình ñược. (Chữ field ở ñây muốn chỉ ñến khả năng tái lập trình “bên ngoài” c ủa nhà máy bán dẫn). Vi mạch FPGA ñược cấu thành từ các bộ phận: • Các khối logic cơ bản lập tr lập trình ñược • Khối vào/ra (IO Pads) • Phần tử thiết kế sẵn khác như DSP slice, RAM, ROM, em như một loại vi mạch bán dẫn chuyên dụng ASIC, nhưng nếu so sánh FPGA với những ASIC ñặc c hiết kế trên thư viện logic thì FPGA không ñạt ñựợc mức ñộ tối ưu như những loại này, và hạn , tuy vậy FPGA ưu việt h ơn ở ch ỗ có th ể tái cấu trúc lại khi ñang sử dụng, công ñoạn thiết ngắn thời gian ñưa sản phẩm vào sử dụng. Còn nếu so sánh với các dạng vi mạch bán dẫn lập trì A, PAL, CPLD thì FPGA ưu việt hơn các ñiểm: tác vụ tái lập trình c ủa FPGA thực hiện ñơn giản và khác biệt quan
PVP_bk3i1_k50 trọng nhất là kiến trúc của FPGA cho phép nó có khả năng ch ứa kh ối l ượng l ớn cổng logic ( i mạch bán dẫn lập trình ñược có trước nó. Thiết kế hay lập trình cho FPGA ñược thực hiện chủ DL, Verilog, AHDL, các hãng sản xuất FPGA lớn như Xilinx, Altera thường cung cấp các gói phần trợ cho quá trình thi ết k ế, cũng có một số các hãng thứ ba cung cấp các gói ph ần m ềm ki ể fy... Các gói phần mềm này có khả năng thực hiện tất cả các bước của toàn bộ quy trình thiết còn gọi là mã RTL). 1) Kiến trúc FPGA Cấu trúc tổng thể của một FPGA ñược minh họa ở hình sau Khối logic FPGA Phần tử chính của FPGA là các khối logic ( logic block). Khối logic ñược cấu thành từ LUT và op, LUT (Look up table) là khối logic có thể thực hiện bất kì hàm logic nào từ 4 ñầu vào, kêt mà gửi ra ngoài khối logic trực tiếp hay thông qua phần tử nhớ flip-flop. Trong tài liệu hướ A của Xilinx còn s ử d ụng khái ni ệm SLICE, 1 Slice tạo thành từ gồm 4 khối logic, số lượng vài nghìn ñến vài chục nghìn tùy theo loại FPGA. Nếu nhìn cấu trúc tổng thể của mảng LUT thì vào bổ xung từ các khối logic phân bố trước và sau nó nâng t ổng s ố ñầu vào c ủa LUT lên 6 c logic. thumb|200px|Khối chuyển mạch của FPGA Mạng liên kết trong FPGA ñược cấu thành từ các ñ ngang và ñứng, tùy theo từng lo ại FPGA mà các ñường kết nối ñược chia thành các nhóm khác nh nx có 3 loại kết nối: ngắn, dài và rất dài. Các ñường kết nối ñược n ối v ới nhau thông qua c switch), trong một khối chuyển mạch chứa một số lượng nút chuyển lập trình ñược ñảm bảo cho . Ngoài các khối logic tùy theo các loại FPGA khác nhau mà có các phần tử tích h ợp thêm khác dụng SoC, trong dòng Virtex 4,5 c ủa Xilinx có chứa nhân xử lý PowerPC, hay trong Atmel FPSLI h hợp nhân ARV…, hay cho những ứng dụng xử lý tín hiệu số DSP trong FPGA ñược tích hợp các DS
PVP_bk3i1_k50 cộng tốc ñộ cao, thực hiện hàm A*B+C, ví dụ dòng Virtex c ủa Xilinx ch ứa t ừ vài ch ục ñến h B, C 18-bit. 2) ngôn ngữ VHDL Thiết kế hay lập trình cho FPGA ñược thực hiện chủ yếu bằng các L như VHDL, Verilog, AHDL.. .Em quyết ñịnh chọn ngôn ngữ VHDL ñể lập trình cho FPGA. VHDL (VH are Description Laguage) l µ mét ng«n ng÷ ®−îc dïng ®Ó m« t¶ c¸c hÖ thèng phần cứng ®iÖn t sè
cao VHSIC (Very High Speed Integrated Circuits) do chÝnh phñ Mü khëi x−íng vµo ®Çu nh÷ng n C¸c c«ng ty tham gia ch−¬ng tr×nh VHSIC nhËn thÊy r»ng hä cÇn ph¶i cã mét c«ng cô nµo ®ã ®Ó t cì lín, vµ hä ® ®Ò xuÊt viÖc lËp ra mét ng«n ng÷ m« t¶ phÇn cøng dïng ®Ó m« t¶ cÊu tróc vµ c ircuits). KÓ tõ ®ã, VHDL ra ®êi vµ ®−îc ph¸t triÓn, råi sau ®ã ®−îc HiÖp héi c¸c kü s− §iÖn v Electronic Engineers) chÊp nhËn coi nh− lµ tiªu chuÈn t¹i Mü. Phiªn b¶n ®Çu tiªn lµ Tiªu chu cßn ®−îc gäi lµ VHDL 87). Phiªn b¶n nµy ®−îc bæ sung söa ®æi n¨m 1993 thµnh IEEE 1076 1993 (c hÖ thèng ®iÖn tö sè cã thÓ ®−îc m« t¶ thµnh c¸c khèi cßn gäi lµ module víi c¸c ®Çu vµo vµ . H×nh 2.16a biÓu diÔn mét vÝ dô nh− vËy. Khèi F cã hai ®Çu vµo A vµ B, vµ cã mét ®Çu ra Y. S gäi khèi F lµ mét thùc thÓ (entity) thiÕt kÕ, vµ c¸c ®Çu vµo vµ ®Çu ra lµ c¸c cæng (port). Cã m« t¶ c¸c khèi con (sub module) thµnh phÇn cña nã. Mçi mét khèi con ®−îc gäi lµ mét tËp hîp cæng cña c¸c tËp hîp ®ã ®−îc nèi l¹i b»ng c¸c ®−êng tÝn hiÖu (signal). H×nh dưới m« t¶ khèi F cÊu tróc (structural). C¸c thùc thÓ G, H vµ I còng ®−îc m« t¶ theo cÊu tróc t−¬ng tù nh− vËy. (a) Khèi F cã hai ®Çu vµo vµ mét ®Çu ra; (b) Khèi F gåm cã 3 thùc thÓ G, H, I * M« t¶ ho¹t ®é
PVP_bk3i1_k50 Trong nhiÒu tr−êng hîp, viÖc m« t¶ cÊu tróc kh«ng t−¬ng øng víi viÖc m« t¶ ho¹t ®éng. Ng−êi t vµo m« t¶ cÊu tróc. VÝ dô, khi chóng ta thiÕt kÕ hÖ thèng ®iÖn tö th× kh«ng cÇn ph¶I m« t¶ cô cÇn m« t¶ theo chøc n¨ng cña c¸c khèi cña hÖ thèng mµ th«i. Tr−êng hîp nµy ®−îc gäi lµ m« t¶ ural). §Ó minh ho¹ cho ®iÒu nµy, chóng ta gi¶ sö r»ng chøc n¨ng cña thùc thÓ F trong H×nh 2.1 ho¹t ®éng cña F ta cã thÓ biÕn®æi theo ®¹i sè Boolean nh− sau: Y = A.+ .B §èi víi c¸c m¹ch cã thÓ biÓn diÔn theo c¸c chøc n¨ng ®Çu vµo ®−îc. Trong c¸c hÖ thèng cã ph¶n håi ng−îc, ®Çu ra t g÷ VHDL cho phÐp gi¶i quyÕt vÊn ®Ò nµy b»ng c¸ch m« t¶ ho¹t ®éng theo khu«n d¹ng ch−¬ng tr×nh gian Khi chøc n¨ng ho¹t ®éng vµ cÊu tróc cña khèi ® ®−îc chØ ®Þnh râ, th× ng−êi ta cã thÓ m nµy cã thÓ thùc hiÖn ®−îc b»ng c¸ch m« pháng qu¸ tr×nh ho¹t ®éng ® ®−îc rêi r¹c thµnh c¸c b− b»ng c¸ch thay ®æi gi¸ trÞ trªn cæng ®Çu vµo. Khèi nµy ph¶n øng l¹i b»ng c¸ch thùc hiÖn m lÖ tÝn hiÖu ®Ó göi tíi c¸c cæng ®Çu ra cña nã t¹i c¸c thêi ®iÓm m« pháng tiÕp theo sau. ViÖc nµy ansaction) trªn tÝn hiÖu ®ã. NÕu gi¸ trÞ míi kh¸c gi¸ trÞ tr−íc ®ã ® cã trªn ®−êng tÝn hiÖu, ®Çu vµo ® ®−îc kÕt nèi víi ®−êng tÝn hiÖu ®ã cã thÓ sÏ ®−îc kÝch ho¹t. Qu¸ tr×nh m« pháng b ®ã c¸c qu¸ tr×nh ®−îc thùc hiÖn lÆp l¹i hai giai ®o¹n trong mét chu kú m« pháng (simulation tÊt c¶ c¸c tÝn hiÖu ®−îc cung cÊp s½n c¸c gi¸ trÞ khëi ®éng, thêi gian m« pháng ®−îc ®−a vÒ 0 giai ®o¹n ®Çu tiªn cña chu kú m« pháng, thêi gian m« pháng ®−îc n©ng Qu¸ tr×nh m« pháng b¾t ® oin phase), vµ sau ®ã c¸c qu¸ tr×nh ®−îc thùc hiÖn lÆp l¹i hai giai ®o¹n trong mét chu kú m« Trong pha khëi ®éng, tÊt c¶ c¸c tÝn hiÖu ®−îc cung cÊp s½n c¸c gi¸ trÞ khëi ®éng, thêi gian khèi ®−îc kÝch ho¹t. Trong giai ®o¹n ®Çu tiªn cña chu kú m« pháng, thêi gian m« pháng ®−îc n iao t¸c ® ®−îc thùc hiÖn. TÊt c¶ c¸c giao t¸c ®−îc ®−a vµo t¹i thêi ®iÓm nµy ®Òu ®−îc kÝch h hu kú m« pháng, tÊt c¶ c¸c khèi ph¶n øng l¹i ®èi víi c¸c sù kiÖn võa x¶y ra trong giai ®o¹n m ch−¬ng tr×nh ®ã th−êng lµ kÕ ho¹ch giao t¸c trªn c¸c tÝn hiÖu ®Çu ra cña chóng. Khi tÊt c¶ c l¹i. NÕu kh«ng cã thªm giao t¸c nµo th× qu¸ tr×nh m« pháng ® hoµn thµnh.
PVP_bk3i1_k50 Môc ®Ých cña viÖc m« pháng lµ ®Ó biÕt thªm th«ng tin vÒ sù thay ®æi trong hÖ thèng t¹i tõng t h gi¸m s¸t m« pháng (simulation monitor). Ch−¬ng tr×nh nµy nh»m môc ®Ých ghi l¹i qu¸ tr×nh ho ®iÓm ®Ó dïng vµo viÖc ph©n tÝch vÒ sau. * Có ph¸p vµ ng÷ nghÜa: Ho¹t ®éng cña mét module cã môc nµy sÏ giíi thiÖu vÒ có ph¸p vµ ng÷ nghÜa cña c¸c kh¸i b¸o trong ng«n ng÷ VHDL. + C¸c biÓ HDL hoµn toµn t−¬ng tù nh− c¸c biÓu thøc trong c¸c ng«n ng÷ lËp tr×nh kh¸c. Mét biÓu thøc lµ tö. C¸c ®a thøc bao gåm tªn c¸c ®èi sè, ký hiÖu b»ng ch÷, c¸c hµm gäi vµ c¸c dÊu ngoÆc cña bi tù −u tiªn. Ưu tiên cao nhất **; abs; not; Ưu tiên giảm dần *; /; mod; rem; Ưu tiên giảm dần
n) Ưu tiên giảm dần +; -; &; Ưu tiên giảm dần =; /=; <; <=; >; >=; Ưu tiên thấp nhất And; or; xor; C¸c to¸n t logic and, or, nand, nor, xor v µ not ho¹t ®éng trªn c¸c gi¸ trÞ kiÓu bit ho
vµ trªn c¸c m¶ng 1 chiÒu cña c¸c kiÓu ®ã. §èi víi c¸c to¸n h¹ng m¶ng (array), sù ho¹t ®éng tu cña m¶ng cã cïng ®é lín víi kÕt qu¶. §èi víi c¸c to¸n h¹ng bit vµ boolean, c¸c to¸n tö and, o ort circuit), do chóng chØ −u tiªn h¬n so víi to¸n h¹ng bªn ph¶i cña chóng nÕu to¸n h¹ng bªn d vµ nand chØ −u tiªn h¬n so víi to¸n h¹ng bªn ph¶i nÕu to¸n h¹ng bªn tr¸i lµ “true” hoÆc “1” h¶i nÕu to¸n h¹ng bªn tr¸i lµ “false” hoÆc “0”. C¸c to¸n tö quan hÖ =, /=, <, <=, > vµ >= ph¶ th−êng cho c¸c kÕt qu¶ theo kiÓu boolean. C¸c to¸n tö b»ng (= vµ /=) cã thÓ cã c¸c to¸n h¹ng tö so s¸nh, hai gi¸ trÞ b»ng nhau nÕu tÊt c¶ c¸c phÇn tö t−¬ng øng cña chóng b»ng nhau. C¸c t +) vµ trõ ( ) cã c¸ch sö dông cña chóng trªn c¸c to¸n h¹ng d¹ng sè. To¸n tö kÕt nèi (&) lµm v m¶ng míi víi néi dung cña to¸n h¹ng bªn ph¶i kÕ tiÕp to¸n h¹ng tr¸i. Nã cã thÓ mãc nèi mét ph m¶ng míi. C¸c to¸n tö nh©n (*) vµ chia (/) lµm viÖc víi c¸c sè nguyªn, sè dÊu phÈy ®éng vµ c¸ guyªn (mod modulus) vµ chia lÊy phÇn d− (rem remainder) chØ lµm viÖc víi kiÓu sè nguyªn. T (abs) chØ lµm viÖc víi bÊt kú kiÓu sè nµo. Cuèi cïng to¸n tö mò (**) cã thÓ lµm viÖc víi kiÓu ®éng, nh−ng ph¶i cã mét sè nguyªn ë to¸n h¹ng ph¶i, cßn to¸n h¹ng ph¶i mµ cã gi¸ trÞ ©m chØ khai b¸o tuÇn tù VHDL cung cÊp mét c«ng cô hiÖu qu¶ cho viÖc kiÓm tra tr¹ng th¸i cña c¸c ®èi m« h×nh – ®ã lµ c¸c phÐp g¸n.
PVP_bk3i1_k50 PhÐp g¸n biÕn Nh− c¸c ng«n ng÷ lËp tr×nh kh¸c, mét biÕn ®−îc g¸n mét gi¸ trÞ míi b»ng c¸ch sö process cã ph¹m vi chØ trong process ®ã. BiÕn cã thÓ khai b¸o trong ch−¬ng tr×nh con. Khai b¸ ocess hoÆc ch−¬ng tr×nh con th× gäi lµ shared variable. C¸c biÕn nµy cã thÓ cËp nhËt vµ ®äc n g ®−îc khai b¸o trong process. C¸c ph¸t biÓu g¸n tÝn hiÖu xuÊt hiÖn trong process ®−îc gäi lµ ph¸t biÓu g¸n biÕn, thùc hiÖn tuÇn tù ®éc lËp víi viÖc xuÊt hiÖn c¸c sù kiÖn trªn mçi tÝn hiÖ thi cña c¸c ph¸t biÓu g¸n tÝn hiÖu ®ång thêi trong phÇn tr−íc. Khai b¸o biÕn (b¾t ®Çu b»ng tõ hiÖu lµ nã lu«n ®−îc g¸n gi¸ trÞ ngay tøc kh¾c vµ phÐp g¸n tÝn hiÖu lµ := tæ hîp ký hiÖu, nã g hoÆc mÆc nhiªn lµ kho¶ng delta) vµ phÐp g¸n ®iÒu khiÓn viÖc g¸n gi¸ trÞ cho biÕn <= tæ hîp biÕn : ®Ých := biÓu thøc; Trong tr−êng hîp ®¬n gi¶n nhÊt, ®Ých cña phÐp g¸n lµ mét tªn ®èi t− rÞ ph¶i cã cïng mét kiÓu. Khai b¸o If (nÕu) Khai b¸o If cho phÐp lùa chän c¸c khai b¸o ®Ó kÝc iÒu ®iÒu kiÖn. Có ph¸p nh− sau: khai b¸o if : if ®iÒu kiÖn then chuçi c¸c khai b¸o { elsif ®i ai b¸o [ else chuçi c¸c khai b¸o } end if; C¸c ®iÒu kiÖn lµ c¸c biÓu thøc tr¶ vÒ gi¸ trÞ bool cã mét gi¸ trÞ ®−îc tr¶ vÒ “true”. Ng−îc l¹i th× mÖnh ®Ò else ®−îc thùc hiÖn, vµ khai b¸o cña ase expression is when choices=> sequential statement –branch 1# when choices=> s equential statement –branch 2# cã thÓ cã nhiÒu nh¸nh {when others=> sequential statement}— ast branch end case; Ph¸t biÓu case lùa chän mét trong nh÷ng nh¸nh cho viÖc thùc thi dùa trªn thøc. Gi¸ trÞ biÓu thøc ph¶i thuéc kiÓu trõu t−îng hoÆc kiÓu m¶ng mét chiÒu. Sù chän lùa cã g dÊu | hoÆc
PVP_bk3i1_k50 sö dông mÖnh ®Ò kh¸c. TÊt c¶ c¸c gi¸ trÞ cã thÓ cã cña biÓu thøc ph¶i ®−îc thÓ hiÖn trong ph¸ tÊt c¶ c¸c gi¸ trÞ, vµ nÕu cã, ph¶i lµ nh¸nh cuèi cïng trong ph¸t biÓu case. C¸c khai b¸o vßn b¸o vßng lÆp c¬ b¶n cã thÓ sö dông c¸c vßng lÆp while vµ for gièng nh− trong c¸c ng«n ng÷ lË mét lo¹t c¸c c©u lÖnh tuÇn tù. Có ph¸p cña ph¸t biÓu lÆp lµ: [loop label:] iteration scheme statements end loop [loop lebel]; Cã 3 kiÓu s¬ ®å lÆp. §Çu tiªn lµ s¬ ®å lÆp cã d¹ng: for id thÝ dô cho s¬ ®å lÆp nµy lµ: FACTORAL:=1; for NUMBER in 2 to N loop FACTORAL :=FACTORAL*NUMB end loop; Khai b¸o Null (rçng) Khai b¸o null kh«ng cã hiÖu qu¶. Nã cã thÓ ®−îc sö dông ®Ó bi hµnh ®éng nµo ®−îc yªu cÇu trong tr−êng hîp ®ã. Ng−êi ta th−êng sö dông nã trong c¸c khai b¸o chän ph¶i ®−îc liÖt kª ®Ó chän, nh−ng ®èi víi mét vµi lùa chän th× kh«ng yªu cÇu hµnh ®éng n when forward => engage_motor_forward; when reverse => engage_motor_reverse; whe n idle => null; end case; *Ch−¬ng tr×nh con Gièng nh− c¸c ng«n ng÷ lËp tr×nh kh¸c, VHDL cung hiÖn ch−¬ng tr×nh con linh ho¹t d−íi d¹ng c¸c thñ tôc vµ c¸c hµm. VHDL còng cung cÊp mét kiÓu ®¬n vÞ d¹ng module. C¸c ®ãng gãi còng cung cÊp mét tiªu chuÈn vÒ tÝnh trõu t−îng d÷ liÖu vµ CHƯƠNG III THIẾT KẾ HỆ THỐNG S Ử DỤNG PHẦN MỀM XILINX ISE
CHƯƠNG 4 : I-Tổng quan phần mền Xilinx ISE Xilinx ISE (Integrated Software Environment) là một bộ phần m thi ết kế của Xilinx , cho phép ta thực hiện các hệ thống nhúng c ủa Xilinx t ừ khâu thi ết k VHDL, Verilog HDL, ABEL hoặc là vẽ Schematic) cho ñ ến khâu cu ối cùng là nạp thiết kế của mì hiết kế, ta phải tạo m ột project m ới trong ISE thông qua công cụ quản lý ISE Project Naviga SE Project Navigator sẽ quản lý tất cả các quá trình thiết kế trong trong project ñó.
PVP_bk3i1_k50 Quy trình thiết kết trong ISE bao gồm các quá trình sau : Design Entry -> Synthesis -> Implem ntation -> Verification -> Device Configuration. * Design Entry : Đây là bước ñầu tiên trong rình thiết kế của ISE. Trong suốt quá trình design entry, ta sẽ thiết kế những file nguồn (So theo nh ững yêu c ầu ban ñầu (những mô tả chức năng của hệ thống mà ta cần phải thi ết k ế). tả phần cứng như : VHDL, Verilog HDL, Abel ho ặc d ạng Schematic ñể thiết kế . Chúng ta có th gữ khác nhau trong cùng m ột thiết kế. Ví dụ như : thiết kế các module chức năng bằng Verilog hematic (sơ ñồ khối) ñể thiết kế hệ thống chính. * Synthesis : Sau khi thiết kế hệ thống và t a chức năng logic của hệ thống, chúng ta phải chạy synthesis ñ ể chuyển ñ ổi nh ững file nguồ og HDL, … thành file netlist. Nh ững file netlist này cần thiết ñể ñưa vào quá trình Implemen lementation : Quá trình này sẽ chuyển ñổi thiết kế ở mức logic thành các file ñịnh dạng vật l Sau khi chạy Synthesis, chúng ta sẽ có những file netlist, quá trình Implementation sẽ chuyển file netlist ñó thành những file cấu hình vật lý cụ thể dựa vào linh kiện FPGA cụ thể mà ta chúng ta phải chỉ rõ linh kiện FPGA nào ñang ñược sử dụng. * Verification: Sau khi chạy bước chúng ta sẽ có thể mô phỏng thi ết kế của mình một cách chính xác hơn. Vì quá trình mô ph ỏng chức năng của mạch chứ nó chưa thể mô ph ỏng th ời gian (timing), timing tùy thuộc vào linh k ice Configuration: Đây là bước cuối cùng trong suốt quá trình thi ết kế . Ở b ước này các fil file bitstream ñ ể n ạp xuống chip FPGA .
PVP_bk3i1_k50 CHƯƠNG 5 : 1. II -Thiết kế chương trình ñiều khiển LED matrix Sơ ñồ khối 1.1 Bộ giải mã: Bộ giải mã còn ñược gọi là bộ phân kênh, nó có n ngõ ra, số ngõ ra này phụ th ữa n và m là . Trong b ộ gi ải mã có thêm m ột ñường Enable ñể cho phép bộ giải mã hoạt ñộng các ngõ ra ñều mang giá trị 0. Khi E=1 thì bộ gi ải mã s ẽ ho ạt ñ ộng, nó s ẽ l ựa ch ọn ngõ ch ọn m. Ví d ụ m ột b ộ giải mã 3 sang 8. Nếu ngõ vào ñịa chỉ là 101 thì thì ngõ ra ñược lự khi ñó tất cả các ngõ ra còn l ại ñ ều không ñ ược l ựa ch ọn (tích cực mức thấp). Một bộ gi tại m ỗi th ời ñi ểm chỉ có một thành phần ñược cho phép hoạt ñộng mà thôi. Ví dụ trong m ột tại mỗi thời ñiểm chỉ có m ột con chip nh ớ ñ ược tích cực cho phép hoạt ñộng mà thôi. Một ng trong mỗi con chip. Một ñịa chỉ ñược tạo ra t ừ b ộ gi ải mã s ẽ làm tích c ực một con chip logic của bộ gi ải mã 3 sang 8 ñược biểu diễn trong hình dưới. Một bộ giải mã kích cỡ lớn có rong hình dưới sử dụng 7 bộ giải mã 1 sang 2 ñể xây dựng bộ giải mã 3 sang 8.
PVP_bk3i1_k50 Một bộ giải mã 3 sang 8 (a) Bảng chân trị; (b) sơ ñồ mạch; (c) ký hiệu logic. Hình 2. bộ giải ( E: IN DOWNTO A)
: Một bộ giải mã 3 sang 8 ñược xây dựng từ 7 bộ giải mã 1 sang 2. Đoạn mã VHDL ñược v mã 3 sang 8. Library IEEE; Use IEEE.STD_LOGIC_1164.ALL; ENTITY Decoder IS PORT std_logic; A: IN std_logic_vector(2 DOWNTO 0); Y: OUT std_logic_vector(7 0); END Decoder; ARCHITECTURE Behavioral OF Decoder IS BEGIN PROCESS (E,
PVP_bk3i1_k50 BEGIN IF (E='0') THEN -- khong hoat dong Y<= (OTHERS => '0') ; ELSE -- decoder h oat dong CASE A IS -- lua chon ngo ra WHEN "000" => Y <= "00000001"; -- ngo ra l a Y0 WHEN "001" => Y <= "00000010"; -- ngo ra la Y1 WHEN "010" => Y <= "00000100 "; -- ngo ra la Y2 WHEN "011" => Y <= "00001000"; -- ngo ra la Y3 WHEN "100" => Y <= "00010000"; -- ngo ra la Y4 WHEN "101" => Y <= "00100000"; -- ngo ra la Y5 WHEN "110" => Y <= "01000000"; -- ngo ra la Y6 WHEN "111" => Y <= "10000000"; -ngo ra la Y7 WHEN OTHERS => NULL; END CASE; END IF; END PROCESS; END Behavioral ; dạng xung mô phỏng bằng xilinx ISE: 1.2 Bộ ñệm Bộ ñệm ba trạng thái là bộ có ba trạng thái: 0, 1 và trạng thái th ứ ba ñ ược bi ể rạng thái trở kháng cao. B ộ ñ ệm ba tr ạng thái ñ ược dùng ñể kết nối một vài dịch vụ trên c truyền tín hiệu. Nếu hai hay nhiều dịch vụ ñược kết nối một cách trực tiếp ñến một bus mà khô này s ẽ b ị sai l ạc trong bus ñó. Trong bộ ñệm ba trạng thái có sử dụng chân E (enable) ñể bộ ñệm ba trạng thái không ñược tích cực và ngõ ra y ở trạng thái trở kháng
PVP_bk3i1_k50 cao. Khi E=1, bộ ñệm ñược cho phép hoạt ñộng và ngõ vào d sẽ ñưa ñ ược d ữ li ệu c ủa nó ñến ra trạng thái tr ở kháng cao ñ ược. Do ñó ñể cung cấp trạng thái trở kháng cao, mạch ñệm ba stor CMOS ñặc biệt kết nối với các cổng logic như trong hình d ưới. Việc có thêm hai con tran húng ta cần phải có một mạch ñ ể ñi ều khi ển chúng hoạt ñộng liên kết với nhau ñể tạo thành khiển ñược cho trong hình (c). Khi E=0, cả hai con transistor CMOS ñều tắt, y ở trạng thái tr hi E=1 và d=0, nếu chúng ta muốn y=0 thì nMOS dẫn và pMOS tắt, lúc này ngõ ra y sẽ b ị kéo xu muốn y=1 thì nMOS tắt và pMOS dẫn, lúc này ngõ ra y s ẽ b ị ñẩy lên mức cao do y ñược nối lên b ảng chân tr ị sẽ có 4 cặp giá trị là 00, 01, 10, 11. Dựa vào các giá tr ị này c ộng thêm cá n transistor CMOS ta có thể hoàn thành bảng chân tr ị nh ư hình 2.26(c). Bộ ñệm ba trạng thái (a) bảng chân trị; (b) ký hiệu logic; (c) bảng chân trị cho việc phân ch trạng thái; (d) sơ ñồ mạch. Đoạn mã VHDL viết theo cấu trúc Behavioral cho bộ ñệm ba trạng t E IEEE.std_logic_1164.ALL; ENTITY dem_3_trang_thai IS PORT ( E: IN std_logic; d: IN std_logic_vector(7 DOWNTO 0); Y: OUT std_logic_vector(7 DOWNTO 0)); END dem_ 3_trang_thai; ARCHITECTURE Behavioral OF dem_3_trang_thai IS BEGIN PROGRESS (E, d) BEGIN IF (E = '1') THEN Y <= d;
PVP_bk3i1_k50 ELSE Y<= (OTHERS => 'Z'); END IF; END PROGRESS; END Behavioral; dạng ñồ thị mô phỏng bằng xil nx ISE : CHƯƠNG 6 : 2. CODE VHDL ñiều khiển LED matrix : LIBRARY ieee; LIBRARY std_developerskit; USE ieee.std_logic_1164.all; USE std.te xtio.all; USE IEEE.std_logic_arith.all; USE std_developerskit.std_iopak.all; ent ity tb is end tb; ARCHITECTURE a OF tb IS CONSTANT DATA_WIDTH : INTEGER :=8; CON STANT IMAGE_WIDTH : INTEGER := 198; CONSTANT ROW_NUMBER : INTEGER := 135; CONSTA NT CLOCK_PERIOD : TIME := 50 ns; CONSTANT F_FACTORS_PART : INTEGER := 15; -- flo at part width, 10-E4 accuracy CONSTANT INT_FACTORS_PART: INTEGER := 3; -- intege r part with, from -5 to +4 range (-4.999999 to 3.999999) CONSTANT FACTORS_WIDTH : integer := (f_factors_part + int_factors_part); -- full factor width
PVP_bk3i1_k50 constant crgb2ycbcr601_a11 : SIGNED(FACTORS_WIDTH-1 DOWNTO 0) := b"0000100000110 11111"; -- 0.256789 constant crgb2ycbcr601_a12 : SIGNED(FACTORS_WIDTH-1 DOWNTO 0 ) := b"000100000010000110"; -- 0.504129 constant crgb2ycbcr601_a13 : SIGNED(FACT ORS_WIDTH-1 DOWNTO 0) := b"000000110010001000"; -- 0.0979 constant crgb2ycbcr601 _a21 : SIGNED(FACTORS_WIDTH-1 DOWNTO 0) := b"111110110100000111"; -- -0.148223 c onstant crgb2ycbcr601_a22 : SIGNED(FACTORS_WIDTH-1 DOWNTO 0) := b"11110110101100 0001"; -- -0.290992 constant crgb2ycbcr601_a23 : SIGNED(FACTORS_WIDTH-1 DOWNTO 0 ) := b"000011100000111000"; -- 0.439215 constant crgb2ycbcr601_a31 : SIGNED(FACT ORS_WIDTH-1 DOWNTO 0) := b"000011100000111000"; -- 0.439215 constant crgb2ycbcr6 01_a32 : SIGNED(FACTORS_WIDTH-1 DOWNTO 0) := b"111101000011101100"; -- -0.367789 constant crgb2ycbcr601_a33 : SIGNED(FACTORS_WIDTH-1 DOWNTO 0) := b"111111011011 011100"; -- -0.071426 constant crgb2ycbcr601_b1x : SIGNED(FACTORS_WIDTH-1 DOWNTO 0) := b"000000000000000000"; -- 0 constant crgb2ycbcr601_b2x : SIGNED(FACTORS_W IDTH-1 DOWNTO 0) := b"000000000000000000"; -- 0 constant crgb2ycbcr601_b3x : SIG NED(FACTORS_WIDTH-1 DOWNTO 0) := b"000000000000000000"; -- 0 constant crgb2ycbcr 601_b1y : SIGNED(FACTORS_WIDTH-1 DOWNTO 0) := b"000010000000000000"; -- 16 const ant crgb2ycbcr601_b2y : SIGNED(FACTORS_WIDTH-1 DOWNTO 0) := b"010000000000000000 "; -- 128 constant crgb2ycbcr601_b3y : SIGNED(FACTORS_WIDTH-1 DOWNTO 0) := b"010 000000000000000"; -- 128 SIGNAL clk : STD_LOGIC; SIGNAL rstn : STD_LOGIC; SIGNAL x1,x2,x3 : UNSIGNED(DATA_WIDTH-1 DOWNTO 0); SIGNAL x1bv,x2bv,x3bv : BIT_VECTOR( DATA_WIDTH-1 DOWNTO 0); SIGNAL y1,y2,y3 : UNSIGNED(DATA_WIDTH-1 DOWNTO 0); SIGNA L y1c,y2c,y3c : SIGNED(INT_FACTORS_PART-1 DOWNTO 0); SIGNAL y1bv,y2bv,y3bv : BIT _VECTOR(DATA_WIDTH-1 DOWNTO 0); SIGNAL DATA_ENA : STD_LOGIC; SIGNAL DOUT_RDY : S TD_LOGIC; BEGIN READ_DATA: PROCESS(CLK, RSTN) FILE file_in : ASCII_TEXT IS "X.tx t"; VARIABLE digits_str1 : string(1 to 3); VARIABLE digits_str2 : string(1 to 3) ; VARIABLE digits_str3 : string(1 to 3); BEGIN if RSTN = '0' THEN
PVP_bk3i1_k50 DATA_ENA <= '0'; elsif rising_edge(clk) then if NOT endfile(file_in) THEN fscan (file_in, "%x %x %x", digits_str1, digits_str2, digits_str3); if digits_str1(1) /= NUL then x1bv <= From_HexString (digits_str1); x2bv <= From_HexString (digits _str2); x3bv <= From_HexString (digits_str3); end if; DATA_ENA <= '1'; ELSE DATA _ENA <= '0'; END IF; END IF; END PROCESS READ_DATA; WRITE_RESULT: PROCESS(CLK, R STN) FILE file_out : ASCII_TEXT IS OUT "Y.txt"; VARIABLE digit_out1 : string(1 t o 2):=(others=>'0'); VARIABLE digit_out2 : string(1 to 2):=(others=>'0'); VARIAB LE digit_out3 : string(1 to 2):=(others=>'0'); VARIABLE i,k : INTEGER; BEGIN if RSTN = '0' THEN i := 0;k:=1; elsif rising_edge(clk) then if DOUT_RDY = '1' then if k<=ROW_NUMBER then i:=i+1; digit_out1 :=To_string(y1bv,"%2x"); digit_out2 :=T o_string(y2bv,"%2x"); digit_out3 :=To_string(y3bv,"%2x"); fprint(file_out,"%s %s %s ", digit_out1, digit_out2, digit_out3); end if; if i = IMAGE_WIDTH then i := 0; k:=k+1; fprint(file_out,"\n"); end if; end if; end if; END PROCESS WRITE_RES ULT; x1 <= UNSIGNED(TO_STDLOGICVECTOR(x1bv)); x2 <= UNSIGNED(TO_STDLOGICVECTOR(x 2bv)); x3 <= UNSIGNED(TO_STDLOGICVECTOR(x3bv)); y1bv<=To_Bitvector(STD_LOGIC_VEC TOR(y1)); y2bv<=To_Bitvector(STD_LOGIC_VECTOR(y2)); y3bv<=To_Bitvector(STD_LOGIC _VECTOR(y3)); mult : entity work.multiplier3x3(a)
PVP_bk3i1_k50 GENERIC MAP( DATA_WIDTH, F_FACTORS_PART, INT_FACTORS_PART ) PORT MAP( clk => clk , rstn => rstn, data_ena => DATA_ENA, dout_rdy => DOUT_RDY, x1 => x1, x2 => x2, x3 => x3, a11 => crgb2ycbcr601_a11, a12 => crgb2ycbcr601_a12, a13 => crgb2ycbcr6 01_a13, a21 => crgb2ycbcr601_a21, a22 => crgb2ycbcr601_a22, a23 => crgb2ycbcr601 _a23, a31 => crgb2ycbcr601_a31, a32 => crgb2ycbcr601_a32, a33 => crgb2ycbcr601_a 33, b1x => crgb2ycbcr601_b1x, b2x => crgb2ycbcr601_b2x, b3x => crgb2ycbcr601_b3x , b1y => crgb2ycbcr601_b1y, b2y => crgb2ycbcr601_b2y, b3y => crgb2ycbcr601_b3y, y1c => y1c, y2c => y2c, y3c => y3c, y1 => y1, y2 => y2, y3 => y3 ); CLOCK : PROC ESS BEGIN clk <= '1' ; wait for CLOCK_PERIOD/2; clk <= '0' ; wait for CLOCK_PERI OD/2 ; END PROCESS CLOCK; RESET : PROCESS BEGIN rstn<='0'; wait for 10*CLOCK_PER IOD; rstn<='1';
PVP_bk3i1_k50 wait ; END PROCESS RESET; END a; CHƯƠNG 7 : III - Kết luận Qua quá trình thực hiện ñề tài : “Thiết kế bộ xử lý hình ảnh quảng cáo trên nề iên cứu hệ thống LED matrix, cấu tạo kết nối các phần tử ñến cấu trúc cách thiết kế lập trình Xilinx ISE ñã giúp em cũng cố kiến th ức và rút ra ñ ược nhi ều bài h ọc quý về FPGA. Do việc tập lớn nên em ch ỉ thi ết kế mô phỏng dưới dạng mô hình nhỏ, nên không thể hiện hết ñược ý này có cơ hội phát tri ển em sẽ cố gắng làm ñ ược nhiều hơn nữa, ñặc biệt phải có sản phầm t g bị kiến thức cơ bản ñể em có thể hoàn thành bài tập này.