5 2.1.2 Các ki u dể ữ liệu trong Verilog Có 2 ki u dể ữ liệu: - Kiểu dữ liệu net - Kiểu dữ liệu thanh ghi Nếu các đối tượng dữ liệu net wire, wand, wor, tri, supply0, supply1 hoặc regite
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM K Ỹ THUẬT TP H CHÍ MINH Ồ
KHOA ĐÀO ĐẠO CHẤT LƯỢNG CAO
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM K Ỹ THUẬT TP H CHÍ MINH Ồ
KHOA ĐÀO ĐẠO CHẤT LƯỢNG CAO
Trang 4BẢNG PHÂN CÔNG
VÀ ĐÁNH GIÁ CÁC CÔNG VIỆC TỪNG THÀNH VIÊN
STT Họ và tên MSSV Nhiệm v ụ Đánh giá
1 Diệp B o Ti n ả ế 18119123 - m code mô ph ng Tì ỏ
3 Nguyễn Hoàng Quân 20119272 - Tìm hi u vể ề cơ sở lý thuy t ế
- Tìm tài li u tham kh o ệ ả Hoàn thành t t ố 4 Ngô Qu c Thái ố 20119280 - Tìm hi u vể ề chương 1 và
chương 5 Hoàn thành t t ố
Trang 52.1.6 Mô hình structural và procedual 12
2.1.7 Mô hình m t s thành phộ ố ần logic cơ bả 12 n 2.1.8 Tối ưu hóa mô hình 12
2.2 Quy trình thi t k hế ế ệ thống 14
2.2.1 Quy trình thi t k m t ASIC ế ế ộ 14
2.2.1.1 D i c ng ả ổ 14
2.2.1.2 Cell chu n ẩ 15
Trang 62.2.2 Quy trình thi t k d a trên FPGA ế ế ự 16
3.2.1 Module chia xung 19
3.2.2 Module Mux 2 sang 1 20
3.2.3 Module chuy n t sể ừ ố nhị phân sang s ố BCD 21
Trang 71
CHƯƠNG 1: TỔNG QUAN
1.1 Đặ ấn đềt v
Ngày nay cùng v i s phát tri n c a khoa h c kớ ự ể ủ ọ ỹ thuật, xã hội ngày càng văn minh và hiện đại, s phát tri n ự ể ở đô thị ngày một đi lên Nhu cầu v giao thông ngày ề càng tr nên c p thi t, nh t là trong các khu v c thành th ở ấ ế ấ ự ị
Với cu c s ng hiộ ố ện đại và s phát tri n nhanh chóng c a n n kinh tự ể ủ ề ế và lượng dân cư đông đúc Ùn tắc giao thông gây thiệt hại không nhỏ cho sự phát triển kinh tế quốc gia, gi m hi u suả ệ ất lao động và tăng các chi phí không cần thiết trong quá trình sản xuất Trong b i c nh kinh tố ả ế lạm phát và khó khăn như hiện nay, lãng phí trong giao thông lại đặt thêm m t gánh nộ ặng đố ới đờ ối v i s ng kinh t cế ủa người dân Nguyên nhân của vấn đề này một phần là do cơ sở hạ tầng chưa đáp ứng được nhu cầu lưu thông hiện nay, m t ph n là do vi c phân chộ ầ ệ ia, định th i gian c a hờ ủ ệ thống đèn giao thông hiệ ại n t ở các giao l ộ chưa hợp lý khiến cho s ố lượng phương tiện giao thông b ùn t c theo thị ắ ời gian r i dồ ẫn đế ắn t c ngh n giao thông Qua th c trẽ ự ạng đó, nhóm muốn xây d ng mự ột hệ thống điều thiết giao thông tự động, phân luồng trực tiếp và hiệu quả hơn phần nào đó giảm b t tình tr ng ùn tớ ạ ắc giao thông Đồng th i tiêu ti p c n, b sung các ki n thờ ế ậ ổ ế ức mới cũng như củng cố lại những kỹ năng kiến thức trong suốt quá trình học tập
Tại Việt Nam s ố lượng xe máy trong những năm qua tăng một cách đột bi n, mế ật độ xe lưu thông trên đường ngày một nhiều, trong khi đó hệ thống đường xá Vi Nam ở ệt còn quá nhi u h n ch ề ạ ế nên thường gây ra các hiện tượng như kẹt xe, ách t c giao thông, ắ đặc biệt là tai n n giao thông ngày càng phô bi n tr thanh m i hi m h a cho nhi u ạ ế ở ố ể ọ ề người
Vì lý do đó các luật giao thông lần lượt ra đời và được đưa vào sử d ng mụ ột cách lặng l r i d n tr nên ph biẽ ồ ầ ở ố ến như hiện nay Trong đó hệ thống đèn giao thông là công cụ điều khi n giao thông công c ng th c t và hi u qu có vai trò r t l n trong viế ộ ự ế ệ ả ấ ớ ệc đảm bảo an toàn và gi m thi u tai n n giao thông ả ế ạ
1.2 Mục tiêu đề tài
Trước tình hình phương tiện tham gia giao thông ngày càng gia tăng không ngừng và h ệ thống giao thông nước ngày càng ph c t p D n n ta ứ ạ ầ đế tình trạng ùn t c n n ắ và tai ạ giao thông ngày càng gia tăng Xuất phát t nhu c u th c từ ầ ự ế đó, chúng ta thiết nghĩ cần các giải pháp để giải quy t m t phế ộ ần nào đó về các nhu c u th c tầ ự ế trên
Trang 8" Hệ thống đèn giao thông thông minh" là hết sức cần thiết, nó có thể có những tính năng được cài đặ ẵn đểt s giải quyết những sự cố kịp thời, tránh thời giờ lãng phí trong khi giao thông b ùn t t tị ắ ại các ngã tư.
Và để đảm b o giao ả thông được an toan và thông suốt thì việc s d ng ử ụ các ệ h thống hi u tín ệ đế điều khi n và phân ế luồng t i ạ các nút giao thông là ấ r t c n ầ thiết ớ V i tầm quan trọng như v y hậ ệ thống điều khi n tín hi u giao thông c n m b o yêu c u: ế ệ ầ đả ả ầ
- Đảm b o ho t ả ạ động m t ộ cách chính xác, liên ụ trong thờ t c i gian dài - Độ tin c y ậ cao
- Đảm b o làm ả việc n nh, ố đị lâu dài - Dễ quan sát cho ngườ đi đười ng - Chi phí nh , ỏ tiết kiệm năng lượng
1.3 N i dung nghiên c u ộ ứ
Tìm hi u và nguyên c u các ki n thể ứ ế ức đã học ở môn h c thi t k vi mọ ế ế ạch và tích hợp để xây dựng module điều khiển đèn giao thông dựa trên ngôn ngữ verilog
Công cụ thực hi n là ph n m m ISE Xệ ầ ề ilinx Design Suite
1.4 B cố ục
Chương 1: Giới thiệu
Trình bày vấn đề ẫ d n nh p lý do chậ ọn đề tài, m c tiêu, n i dung nghiên c u, các ụ ộ ứ giới h n thông s và các nạ ố ội dung cơ bản có liên quan
Chương 2: Cơ sở lý thuyết
Tìm hi u ể và đưa ra những cơ sở lý thuyết có liên quan đến đề tài để dẫn ch ng cho ứ việc thi t k hế ế ệ thống module điều khiển đàn giao thông
Chương 3: Thiết k hế ệ thống
Thiết kế và tính toán hân tích, xây dựng sơ đồ khối, sơ đồ phần cứng, thiết kế ,p chương trình , giao diện mô phỏng quá trình thực hiện
Xây dựng chương trình hoàn chỉnh cho toàn hệ thống, các hàm, các lưu đồ, các chương trình được sử dụng Lắp ráp và chạy chương trình
Viết tài liệu hướng dẫn sử dụng, quy trình thao tác.
Trang 93 Chương 4: Kết quả và đánh giá
Nêu các kết quả đạt được khi th c hiự ện chương trình, phân tích, nhận xét, đánh giá kết quả thực thi được
Chương 5: Kết luận và hướng phát triển Kết luận và hướng phát tri n ể
Tóm t t nh ng k t quắ ữ ế ả đạt được, nh ng h n chữ ạ ế và nêu lên các hướng phát tri n ể trong tương lai
1.5 Gi i h n ớ ạ
Trong quá trình th c hiự ện đề tài có th ể không tránh được các thiếu sót và mức độ hoàn thành đề tài, mong thầy xem xét và có th ể đưa ra nhận xét để chúng em có th ể khắc phục được những thiếu sót đó và có thể hoàn thiện cũng như mở ộng đề r tài sau này
Vì một số điều khi n không cho phép nên chúng em ch ệ ỉ thực hi n mô ph ng trên ệ ỏ phần m m ISim và không có kit FPGA Xilinx Spartan-ề 3E để ạ n p code Nên chúng em xin thay th t n s 1Hz bế ầ ố ằng 1KHz để ễ d dàng cho vi c mô phệ ỏng hơn.
Trang 10CHƯƠNG 2 CƠ SỞ: LÝ THUYẾT
2.1 Ngôn ng l p trình Verilog ữ ậ
2.1.1 Gi i thi u v Verilog ớ ệ ề
2.1.1.1 Khái quát
Verilog là m t trong hai ngôn ng mô t ph n c ng chính (g m VHDL và Verilog ộ ữ ả ầ ứ ồ HDL) đượ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 ứ ử ụ ề
Verilog HDL có thể đượ ử ụng để thiế ế ệ thốc s d t k h ng số ở nhi u m c khác nhau, ề ứ ví dụ ở ức cao như các mô hình đặc trưng đế m 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)
2.1.1.2 Mục đích sử ụ d ng Verilog HDL
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ế
Cách s dử ụng cơ bản c a Verilog HDL 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 M c tiêu c a Verilog ể ả ấ ụ ủ không ph i t o ra nh ng chip VLSI mà s dả ạ ữ ử ụng Verilog để 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 đế ốc độ ực đạn t 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 ờ ế ế
Trang 115
2.1.2 Các ki u dể ữ liệu trong Verilog
Có 2 ki u dể ữ liệu: - Kiểu dữ liệu net - Kiểu dữ liệu thanh ghi
Nếu các đối tượng dữ liệu net (wire, wand, wor, tri, supply0, supply1) hoặc regiter (reg) được khai báo mà không có tầm, theo mặc định các đối tượng này rộng 1-bit và được tham chiếu ở dạng vô hướng Nếu một tầm được khai báo, đối tượng có nhiều bit và được gọi là vector Một vector có thể được tham chiếu trong trạng thái toàn bộ, một phần hoặc từng bit riêng rẽ khi cần
2.1.2.1 Ki u dể ữ liệu Net
Các đối tượng dữ liệu net là khả năng tổng hợp, sẽ biểu diễn và mô hình sự kết nối vật lý các tín hiệu Một phép gán trong verilog là cơ chế cơ bản để gán giá trị đến các kiểu dữ liệu của net và register Cụ thể là, phát biểu gán tiếp tục sẽ gán giá trị đến bất kỳ kiểu nào trong các kiểu dữ liệu của net và do vậy kết nối đến một đường dây thực tế trong mạch điện suy ra được
Wire: Một tín hiệu kiểu wire biểu diễn cho một dây nối trong mạch thiết kế và được
dùng để kết nối các cổng logic, các module Các tín hiệu kiểu wire chỉ được đọc, không được gán trong các hàm hoặc các block Tín hiệu kiểu wire không lưu trử giá trị của nó và nó phải được gán giá trị bằng các lệnh gán đồng thời hoặc được kết nối vào các output của các cổng logic, các module
Kiểu dữ liệu register lưu giữ giá trị từ một phát biểu gán thủ tục đến phát biểu gán thủ tục kế tiếp và có ý nghĩa là đối tượng này lưu giữ giá trị trên các chu kỳ delta mô phỏng Phép gán thủ tục là một phép gán cho một kiểu dữ liệu của register và không
Trang 12hàm ý rảng một thanh ghi vật lý sẽ được tổng hợp, mặc dù phép gán được sử dụng cho mục đích này
Phép gán được sử dụng để gán giá trị dưới những điều kiện kích khởi, chẳng hạn như các phát biểu if và case Phép gán thủ tục lưu giữ giá trị trong một kiểu dữ liệu của register và được duy trì cho đến phép gán thủ tục kế tiếp cho kiểu dữ liệu của register
2.1.2.3 Thông s ố
Một kiểu dữ liệu thông số sẽ định nghĩa một hằng Chỉ có các hằng thông số nguyên (không thực ) được sử dụng với phần mềm tổng hợp Giống như mọi kiểu dữ liệu khác, vị trí của chúng sẽ được xác định chúng là toàn cục đối với một module hay là cục bộ đối với một phát biểu always riêng biệt
Ví dụ:
Parameter A = 4’b 1011, B = 4’b 1000 ;
Parameter Stop = 0, Slow = 1, Medium = 2, Fast = 3;
2.1.2.4 S nguyên ố
Các kiểu dữ liệu nguyên được dùng để khai báo các biến có công dụng tổng quát để sử dụng trong các vòng lặp, chúng không có ý định phần cứng trực tiếp và lưu giữ giá trị số Không có tầm nào được chỉ rõ khi một đối tượng nguyên được khai báo Đây là các số nguyên có dấu và tạo ra các kết quả dạng bù 2
Ví dụ: integer N;
2.1.2.5 T p giá tr ậ ị
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
Trang 137 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
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
2.1.3 Mô t module ả
Định nghĩa module luôn luôn bắt đầu bằng từ khóa module Tên module, danh sách port, khai báo port, thông số (parameter) phải hiện diện trước tiên trong định nghĩa module Danh sách port và khai báo port chỉ hiện diện khi module có port tương tác với môi trường bên ngoài
Năm thành phần trong module là: - Các khai báo biến
- Các phát biểu luồng dữ liệu - Thể hiện của các module thấp hơn - Các khối hành vi
- Task hoặc function
Các thành phần này có thể ở bất kỳ nơi nào trong module và không cần thứ tự Phát biểu endmodule là phát biểu sau cùng trong định nghĩa module
Mọi thành phần (ngoại trừ module, tên module và endmodule) là tùy chọn, có thể trộn lẫn và tương thích theo yêu cầu thiết kế Verilog cho phép nhiều module được định nghĩa trong một tập tin duy nhất và không cần thứ tự
2.1.4 Toán t và các phát biử ểu điều khi n ể
2.1.4.1 Toán t ử
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
Trang 14Nếu bất kì bit nào không xác định thì kết quả ra là không xác định
{,} : ghép thanh ghi hoặc dây << : dịch trái thanh ghi >> : 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);
Trang 159 assign out2= data&(in1)&(~in0); assign out3= data&(in1)&(in0); endmodule
2.1.4.2 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 HDL 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:
Ngoài ra còn có các vòng lặp for, while và repeat Tuy nhiên chúng rất hiếm khi sử dụng trong việc mô tả các module nên bài viết này sẽ không đề cập đến
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;
Trang 16output A_GT_B, A_EQ_B, A_LT_B; reg A_GT_B, A_EQ_B, A_LT_B;
Toán tử gán dùng để gán kết quả trả về của 1 biểu thức(hàm logic)
Phép gán đồng thời: phép gán này chỉ dùng để gán giá trị ở bên ngoài các block Syntax:
assign signal1 = signal2; ví dụ:
assign a = b & c;
Phép gán tuần tự chỉ dùng để gán giá trị bên trong các block Có 2 loại phép gán non-blocking assignment " <= " và blocking assignment "="
Trang 1711
Blocking được xem xét giống như phép gán trong ngôn ngữ C Tín hiệu sẽ được gán giá trị ngay lập tức và giá trị mới này sẽ được sử dụng làm giá trị cho tín hiệu đó cho lệnh tiếp theo phía dưới
Non-Blocking được xem xét giống như phép gán đồng thời các lệnh gán non-blocking trong 1 block sẽ được gán đồng thời sau khoản thời gian t sau khi các lệnh trong block đươc thực hiện Tín hiệu sẽ được gán giá trị sau khoản thời gian t Giá trị mới này sẽ không sử dụng làm giá trị cho tín hiệu đó, tín hiệu vẫn lấy giá trị cũ sử dụng cho lệnh tiếp theo phía dưới Giá trị mới sẽ được sữ dụng cho lần thực hiện block
Đề nghị sử dụng nonblocking assignment trong always block dùng để mô tả hệ tuần tự và sử dụng blocking assignment trong always block dùng để mô tả hệ tổ hợp.
Always block là cấu trúc cơ sở trong mô hình mức RTL Các always block được xem như là các module thực thi đồng thời
Always block có thể được sử dụng để tổng hợp ra các bộ chốt (latch), các flip-flop hoặc hệ tổ hợp
Khối always được gọi thực thi các lệnh bên trong block bởi các sự kiện cảm nhận về mức logic, cạnh lên(posedge), cạnh xuống(negedge) của 1 hoặc nhiều tín hiệu ( các tín hiệu cách nhau bằng từ khóa or )
Trang 18always @( tất cả các tín hiệu input của hệ tổ hợp ở trong list sự kiện mức logic) begin
… end
Đề nghị sử dụng always block để mô tả thiết kế hệ tuần tự như sau: always @(posedge clk or negedge rst_)
2.1.6 Mô hình structural và procedual
Các phát biểu thủ tục trong Verilog được sử dụng để mô tả thiết kế ở mức trừu tượng cao (algorithmic level, RTL level)
Các phát biểu này cung cấp các cách thức cho việc thực thi các thiết kế phức tạp Tuy nhiên với sự thay đổi nhỏ trong cách lập trình mô tả sẽ gây ra sự thay đổi lớn về mạch phần cứng được sinh ra Các phát biểu thủ tục chỉ được sử dụng bên trong các thủ tục (always, function …)
2.1.7 Mô hình m t s thành phộ ố ần logic cơ bản
Các giá trị ngõ ra chỉ phụ thuộc vào giá trị hiện thời của ngõ vào nên khi ngỏ vào thay đổi ngỏ ra sẽ thay đổi theo
Để mô tả sự phụ thuộc vào giá trị ngõ vào của ngõ ra Trong verilog sữ dụng lệnh gán đồng thời
Input Hệ t h p ổ ợ Output