Ngày nay khi khoa học, công nghệ luôn luôn biến chuyển không ngừng, làm cho trái đất đang đổi thay theo từng giây, từng phút. Chính bởi vậy, câu nói “ Thời gian là vàng, là bạc” càng trở nên đúng đắn hơn bao giờ hết, thời gian gần như là thước đo của sự thành công ở thời điểm hiện tại. Tuy vậy không ai có thế đong, đo được thời gian, mà nó chỉ có thể được đếm chính xác bằng những chiếc đồng hồ.Chính bởi sự cần thiết của chiếc đồng hồ trong đời sống mà nhóm chúng em đã chọn đề tài : “ Thiết kế đồng hồ báo giờ điện tử “ bằng ngôn ngữ mô tả phần cứng Verilog HDL, chạy trên KIT DE270 của hãng Altera, để mô tả chức năng chính của đồng hồ.Tuy đề tài đã hoàn thành, song việc gặp phải những sai sót là không thể tránh khỏi. Rất mong được sự nhận xét, đánh giá nhiệt tình của thầy. Chúng em xin chân thành cảm ơn
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
Bài Tập Lớn THIẾT KẾ, TỔNG HỢP IC SỐ VÀ HỆ THỐNG SỐ
Đề tài :
THIẾT KẾ ĐỒNG HỒ BÁO GIỜ ĐIỆN TỬ
SVTH : Phan Đình Điệp – 20111440
GVHD : TS Nguyễn Hoàng Dũng
Hà Nội, 11- 2014
Trang 2MỤC LỤC
DANH MỤC HÌNH VẼ 3
DANH MỤC BẢNG BIỂU 3
LỜI NÓI ĐẦU 4
PHẦN A MÔ TẢ CHI TIẾT THIẾT KẾ 5
I TỔNG QUAN 5
1 Yêu cầu chức năng 5
2 Yêu cầu phi chức năng 5
II SƠ ĐỒ KHỐI 5
1 Sơ đồ tổng quát 5
2 Sơ đồ chi tiết mạch 6
III THIẾT KẾ CHI TIẾT TỪNG KHỐI 7
1 Khối module chính 7
2 Khối chia tần số clk_div 9
3 Khối LCD 10
4 Khối thiết lập đồng hồ setclock 12
5 Khối chuyển đổi bit convert10 14
6 Khối giải mã decoder_bcd 15
PHẦN B MÔ PHỎNG VÀ THỰC TẾ 17
PHẦN C KẾT LUẬN 17
Trang 3DANH MỤC HÌNH VẼ
Figure 1 Sơ đồ tổng quát đồng hồ điện tử 5
Figure 2 Sơ đồ RTL viewer 6
Figure 3 Khối chia tần clk_div:DIV 9
Figure 4 Bảng mã kí tự hiển thị LCD 11
Figure 5 Sơ đồ khối LCD 12
Figure 6 Khối thiết lập đồng hồ setclock:SC 12
Figure 7 Khối chuyển đổi convert10 14
Figure 8 Sơ đồ khối khối giải mã decoder 15
DANH MỤC BẢNG BIỂU Table 1 Module chính của chương trình 7
Table 2 Module chia tần clk_div 9
Table 3 Bảng mã nhị phân 13
Table 4 Module thiết lập đồng hồ setclock 13
Table 5 Module convert10 14
Table 6 Bảng giải mã decoder sang LED 7 thanh 15
Table 7 Module giải mã BCD 15
Trang 4LỜI NÓI ĐẦU
Ngày nay khi khoa học, công nghệ luôn luôn biến chuyển không ngừng, làm
cho trái đất đang đổi thay theo từng giây, từng phút Chính bởi vậy, câu nói “ Thời gian là vàng, là bạc” càng trở nên đúng đắn hơn bao giờ hết, thời gian gần như là
thước đo của sự thành công ở thời điểm hiện tại Tuy vậy không ai có thế đong, đo được thời gian, mà nó chỉ có thể được đếm chính xác bằng những chiếc đồng hồ
Chính bởi sự cần thiết của chiếc đồng hồ trong đời sống mà nhóm chúng em
đã chọn đề tài : “ Thiết kế đồng hồ báo giờ điện tử “ bằng ngôn ngữ mô tả phần
cứng Verilog HDL, chạy trên KIT DE2-70 của hãng Altera, để mô tả chức năng chính của đồng hồ
Tuy đề tài đã hoàn thành, song việc gặp phải những sai sót là không thể tránh khỏi Rất mong được sự nhận xét, đánh giá nhiệt tình của thầy Chúng em xin chân thành cảm ơn !!!
Nhóm Sinh Viên
Phan Đình Điệp Nguyễn Văng Bằng Mai Văn Quân
Trang 5PHẦN A MÔ TẢ CHI TIẾT THIẾT KẾ
I TỔNG QUAN
1 Yêu cầu chức năng
o Thiết kế đồng hồ điện tử hiển thị 24h (từ 00:00:00 đến 23:59:59) chạy trên KIT DE2-70 của hãng Altera
o Cho phép điều chỉnh thời gian ( giờ và phút ) thông qua các switch ( từ
SW17-SW2 )
o Hiển thị kết quả ra 6 LED 7 thanh
o Mạch có chức năng báo giờ theo thời gian định trước, hiển thị trên LEDG
o Có nút reset ( phím KEY ) đưa về 00:00:00 và enable ( SW1) cho phép thiết lập thời gian
2 Yêu cầu phi chức năng
o Mô tả thiết kế sử dụng ngôn ngữ mô tả phần cứng Verilog HDL
o Thiết kế và mô phỏng hoặc chạy được trên KIT
o Hoàn thành đề tài trước ngày 17/11/2014
II SƠ ĐỒ KHỐI
1 Sơ đồ tổng quát
Figure 1 Sơ đồ tổng quát đồng hồ điện tử
o Phân tích chi tiết từng khối
+ Khối đầu vào : Bao gồm các đầu vào như tần số vào, reset, enable,… + Khối đồng hồ điện tử : Thiết lập cho đồng hồ chạy bình thường, báo giờ,… + Khối LCD : Hiển thị tên bài tập lớn (BTL), tên đề tài, tên thành viên nhóm
Trang 6+ Khối hiển thị LED : Hiện thị ra giờ, phút, giây, và những thông báo ra
LEDR, LEDG
2 Sơ đồ chi tiết mạch
Figure 2 Sơ đồ RTL viewer
Mô tả chức năng từng khối :
o Khối chia tần clk_div : Có nhiệm vụ chia tần số đầu vào từ 50MHz xuống
tần số 1Hz
o Khối LCD : Có nhiệm vụ hiển thị lên thông tin đã được thiết lập sẵn về BTL, tên đề tài, tên thành viên nhóm
o Khối setclock : Tiếp nhận các đầu vào, thiết lập bộ đếm và cho phép xuất ra led báo hiệu và đầu ra 6bit của giờ, phút giây
o Khối covert10 : Bao gồm 3 khối có nhiệm vụ chuyển đổi bit từ 2 bit sang 10 bit
o Khối decoder_bcd : giải mã ra mã hexa để hiển thị ra giờ, phút, giây trên
LED 7 thanh
Trang 7III THIẾT KẾ CHI TIẾT TỪNG KHỐI
1 Khối module chính
o Khai báo tên mô-đun, các đầu vào, đầu ra
o Đầu vào : 17 switch Trong đó iSW[17:2] điều chỉnh thời gian hiển thị giờ, phút, giây; sau khi điều chỉnh thời gian, ta gạt iSW[1], switch này cho phép
thiết lập được thực hiện
báo lỗi, và báo đến giờ hẹn trước ( 6h, 12h, 18h ) và 6 LED 7 thanh hiển thị
thời gian
o Các dây ( wire ) kết nối các module con
o Kết nối phân cấp theo 2 cách : Kết nối cổng có tên và kết nối cổng theo thứ
tự Bao gồm :
+ Khối clk_div + Khối setclock + 3 khối convert10 + 6 khối decoder_bcd + Khối lcd
Table 1 Module chính của chương trình
Trang 8/*
Thiet ke mot dong ho dien tu :
+ Do chuong (sang led) theo thoi gian dinh truoc :6h,12h,18h
+ Hien thi gio, phut, giay ra led 7 thanh : oHEX_D tu 7-2
+ Thiet lap duoc thoi gian thong qua cac iSW17-2
*/
// -Module chinh -//
module dongho_baogio
( iSW,iCLK_50,iKEY, oLEDR,oLEDG, oHEX7_D,oHEX6_D,oHEX5_D,
oHEX4_D,oHEX3_D,oHEX2_D,
LCD_D, oLCD_RW, oLCD_EN, oLCD_RS, oLCD_ON, oLCD_BLON);
input [17:1] iSW; // iSW[1]-cho phep dieu chinh thoi gian iSW[17:10]-dieu
chinh gio iSW[9:2]-dieu chinh phut
input iCLK_50,iKEY; // iCLK_50- tin hieu vao 50MHz // iKEY - reset
output [17:2] oLEDR; // LED do
output [1:0] oLEDG; // LED xanh- bao loi - bao den gio hen
output [0:6] oHEX7_D,oHEX6_D,oHEX5_D,
oHEX4_D,oHEX3_D,oHEX2_D; // LED 7 thanh
output [7:0] LCD_D;
output oLCD_RW,oLCD_EN,oLCD_RS, oLCD_ON,oLCD_BLON;
// hien thi LCD
assign oLEDR = iSW; // gan LED do = iSW
wire clk; // clk 1Hz
wire [5:0] gio, phut, giay ;
wire [3:0] phut_ch,
phut_dv,
gio_ch,
gio_dv, giay_dv,
giay_ch;
//Khoi chiatan
clk_div DIV ( clk_50m(iCLK_50),.reset(iKEY),.clk(clk) );
//Khoi tao dong ho
setclock SC ( set_hc(iSW[17:14]), set_hdv(iSW[13:10]),
.set_mc(iSW[9:6]),.set_mdv(iSW[5:2]),.clk(clk), reset(iKEY),
.enb(iSW[1]),.out_gio(gio),.out_phut(phut),.out_giay(giay),
.led_bao_loi(oLEDG[1]), led_hen_gio(oLEDG[0]));
//Khoi chuyen doi sang he 10
convert10 CONV0 ( gio, clk, gio_ch, gio_dv );
convert10 CONV1 ( phut, clk, phut_ch, phut_dv );
convert10 CONV2 ( giay, clk, giay_ch, giay_dv );
//Khoi giai ma
Trang 9decoder_bcd DE_B4 ( gio_dv, oHEX6_D );
decoder_bcd DE_B5 ( gio_ch, oHEX7_D );
//Khoi LCD
lcd LCD
(iCLK_50,iKEY,LCD_D,oLCD_RW,oLCD_EN,oLCD_RS,oLCD_ON,oLCD_BLON);
endmodule
// -Ketthuc module chinh -//
2 Khối chia tần số clk_div
o Tần số đầu vào là 50MHz
o Tần số đầu ra là 1Hz
Áp dụng công thức chia tần số theo bộ đếm
vào
f cnt
f
2 1
Từ đó suy ra, cnt = 24999999 Cần 32bit để thực hiện được bộ đếm này
Figure 3 Khối chia tần clk_div:DIV
o Khi có reset hoặc khi đếm hết 24999999 : biến đếm (cnt hay counter ) sẽ
bằng 0
o Trường hợp còn lại mỗi lần đếm tăng 1 thì clk lại đảo bit
Table 2 Module chia tần clk_div
Trang 10// - Module chia tan -
module clk_div (clk_50m,reset,clk);
input clk_50m, reset ; // Vao 50Mhz
output reg clk; // Ra 1Hz
reg [31:0] counter; // Can 32bit de dem den 25000000
always @( posedge clk_50m or negedge reset)
if ( reset == 0 )
begin
clk <= 1'b0 ; counter <= 8'h00000000;
end else if (counter == 24999999)
begin
clk = !clk;
counter <= 8'h00000000;
end else
counter = counter +1'b1;
endmodule
// - Ket thuc module chia tan
-3 Khối LCD
3.1 Lý thuyết về khối LCD
o Các tín hiệu quan trọng :
LCD_DATA : data 8 bit,
LCD_RW : read/wirte,
LCD_EN : tín hiệu enable,
LCD_ON : tín hiệu nguồn vào,
LCD_BLON : đèn màn hình,
LCD_RS : chọn đọc dữ liệu hay đọc Command ( Command dùng để chứa
1 số các thiết lập lcd cơ bản )
Các tín hiệu LCD_ON và LCD_BLON luôn là 1 Tín hiệu LCD_RW và LCD_RS nếu chỉ hiển thị lên LCD thì tín hiệu LCD_RW = 0, khi cài đặt
vị trí hiển thị kí tự thì ta reset LCD_RS xuống mức 0, ghi dữ liệu thì ta set lên 1
Trong phần hiển thị thì tín hiệu LCD_R/W luôn đặt là 0, còn LCD_RS
Trang 11Figure 4 Bảng mã kí tự hiển thị LCD
Bảng kí tự gồm chiều ngang là 4 bit cao chiều dọc là 4 bit thấp, bảng mã cung cấp các kí tự đơn giản đã được định nghĩa sẵn Ví dụ : Muốn hiển thị kí tự A thì dữ liệu vào sẽ là LHLL LLLH tức là 0100 0001
3.2 Thiết lập khối LCD
o Khối LCD được thiết lập để hiển thị phần giới thiệu về BTL
o Khối có đầu vào là xung clock 50MHz, bên trong có khối chia tần số xuống 1Hz, và phím reset
o Có khối điều khiển lcd_controller
Trang 12Figure 5 Sơ đồ khối LCD
4 Khối thiết lập đồng hồ setclock
o Khối setclock là module chính tạo ra bộ đếm cho phép đồng hộ được hoạt động, cho phép người dùng tự thiết lập thời gian thực và thời gian báo giờ
như mong muốn
Figure 6 Khối thiết lập đồng hồ setclock:SC
o Khối nhận đầu vào là xung clock 1Hz tương ứng với 1s
o Thiết lập thời gian với 16 switch ( iSW[17-2] ) trong đó 8 switch dùng để thiết lập giờ, 8 switch tiếp dùng để thiết lập phút, và thiết lập theo mã nhị
phân
+ Quy ước : iSW gạt lên lấy giá trị 1
Trang 13Table 3 Bảng mã nhị phân
o Các trường hợp không thỏa mãn (x) thì đèn LED xanh [1] sẽ báo lỗi
o Thời gian được đặt trước để báo giờ là 6h, 12h, 18h Khi đến giờ báo thì
LED xanh [0] sẽ sáng và nháy
Table 4 Module thiết lập đồng hồ setclock
// -Module thiet lap dong ho -//
enb, out_gio, out_phut, out_giay, led_hen_gio, led_bao_loi );
input [17:14] set_hc; // iSW[17:14] thiet lap gio_chuc
phut_chuc
phut_donvi
00-60 su dung 6bits
- su dung 17bits
reg [16:0] set_in; // 17 bit luu tru
thoi gian thiet lap
/* code khong duoc hien thi
…
…
*/
endmodule
// -Ket thuc module -//
Trang 145 Khối chuyển đổi bit convert10
o Chức năng của khối là chuyển đổi từ hệ nhị phân ( 6bits ) sang hệ thập phân (
từ 0 đến 9 )
o Thực hiện bằng cách chia lấy phần nguyên và lấy phần dư cho 10
+ Phần nguyên là chữ số đầu tiên của giờ, phút, giây ( gọi là phần chục )
+ Phần dư là chữ số thứ ha của giờ, phút, giây ( gọi là phần đơn vị )
o Đầu ra được đưa qua bộ giải mã để tạo mã hexa hiển thị lên LED 7 thanh
Figure 7 Khối chuyển đổi convert10
Table 5 Module convert10
// -Module chuyen doi bit -//
input clk;
begin
out_ch = out_gio_phut_giay / A; // chia het cho 10 lay phan nguyen
out_dv = out_gio_phut_giay % A; // chia lay du cho
10 lay phan du
end endmodule
Trang 156 Khối giải mã decoder_bcd
o Khối có chức năng giải mã từ BCD sang mã hex hiển thị lên LED 7 thanh
Figure 8 Sơ đồ khối khối giải mã decoder
o Đầu vào là mã bcd 4 bit, qua bộ giải mã decoder để hiển thị trên LED
Table 6 Bảng giải mã decoder sang LED 7 thanh
Table 7 Module giải mã BCD
// - Module giai ma BCD -
input [3:0] bcd;
Trang 16
case (bcd) 4'b0000 : HEX = 7'b0000001;
4'b0001 : HEX = 7'b1001111;
4'b0010 : HEX = 7'b0010010;
4'b0011 : HEX = 7'b0000110;
4'b0100 : HEX = 7'b1001100;
4'b0101 : HEX = 7'b0100100;
4'b0110 : HEX = 7'b1100000;
4'b0111 : HEX = 7'b0001111;
4'b1000 : HEX = 7'b0000000;
4'b1001 : HEX = 7'b0001100;
endcase endmodule
// - Ket thuc decoder_bcd
Trang 17-PHẦN B MÔ PHỎNG VÀ THỰC TẾ
Kết quả thu được khi chạy trên KIT DE2-35
Trang 18PHẦN C KẾT LUẬN
Trong thời gian thực hiện đề tài, chúng em đã được thầy tạo mọi điều kiện về tài liệu cũng như cơ sở vật chất để nhóm hoàn thành tốt đề tài trong thời gian sớm nhất
Do vẫn còn rất nhiều hạn chế về kiến thức nên đề tài chưa được phát triển một cách tối ưu nhất, nên trong thời gian tới nhóm chúng em rất mong nhận được
sự giúp đỡ nhiệt tình của thầy để chúng em có thể tiếp tục phát triển đề tài này và hoàn thành tốt những đề tài sau này
Cuối cùng chúng em xin gửi lời cảm ơn chân thành đến thầy, kính chúc thầy
và gia đình mạnh khỏe, chúc thầy ngày càng thành công trong công việc
Chúng em xin cảm ơn !!!