Hiện nay, Hệ thống số đang là trung tâm của các hệ thống điện tử. Mọi phát triển hiện
nay đều dựa vào công nghệ số. Trang bị kiến thức và kỹ năng thiết kế hệ thống số là rất quan
trọng đối với kỹ sƣ điện tử. Các phƣơng thức nền tảng cho phát triển hệ thống số nhƣ sau:
+ Phát triển hệ thống số trên cở sở dùng rút gọn hàm logic, bảng trạng thái, máy trạng
thái dùng các cấu kiện logic chuẩn chức năng cố định nhƣ: Các cổng logic đơn giản, các mô-
đun mạch tổ hợp và tuần tự cơ bản.
+ Phát triển hệ thống số trên cơ sở dùng các hệ vi xử lý, vi điều khiển, bộ xử lý tín hiệu
số, và thực hiện ghép nối máy tính: Chức năng hệ thống chủ yếu đƣợc phát triển nhờ lập trình
phần mềm.
+ Phát triển hệ thống số trên cơ sở thiết kế logic số: Sử dụng ngôn ngữ mô tả phần cứng
HDL mô tả đƣợc hệ thống số cần thiết kế, thực hiện tổng hợp và thực hiện chúng trên các cấu
kiện logic khả trình PLD hay chuyển sang các mức thiết kế vật lý, layout và thực hiện trên các
vi mạch số VLSI. Đây là những tiền đề tốt cho thiết kế IC số và thiết kế hệ thống VLSI.
Cả ba hƣớng trên đều có thể đƣợc sử dụng để phát triển các hệ thống số nhƣng mức độ
đơn giản hay phức tạp là khác nhau và đều đƣợc đào tạo cho sinh viên ngành Điện – Điện tử
và Kỹ thuật Máy tính ở các môn học với các mức độ khác nhau. Trong môn học Thiết kế
logic số chủ yếu tập trung vào hƣớng thứ 3. Hƣớng phát triển này vừa phù hợp với môi trƣờng
giáo dục đại học và yêu cầu phát triển khả thi đƣợc các ứng dụng đa dạng trong thực tế với
mức độ phức tạp cao. Trong đó phƣơng pháp thiết kế trọng tâm mà sinh viên sử dụng để phát
triển các hệ thống số là Thiết kế logic dùng HDL, đây cũng là phƣơng pháp thiết kế đòi hỏi
sinh viên phải có kiến thức nền tảng tổng hợp tốt của cả hai hƣớng phát triển trên. Sử dụng
thiết kế logic cũng đòi hỏi sinh viên phải có hiểu biết sâu sắc về hoạt động của đối tƣợng
mình định thiết kế, và đặc biệt là phát huy đƣợc tính sáng tạo của sinh viên. Hơn thế nữa thiết
kế logic số dùng HDL hiện vẫn đang đƣợc giảng dạy phổ biến trong các Trƣờng đại học tiên
tiến trên thế giới và vẫn là phƣơng pháp thiết kế phổ biến của các phần mềm Thiết kế điện tử
hiện đại đang đƣợc sử dụng phổ biến cho các nhà Thiết kế của nhiều doanh nghiệp điện tử
trên thế giới.
343 trang |
Chia sẻ: tieuaka001 | Lượt xem: 726 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Thiết kế Logic số, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ên thực tế LED
ma trận thƣờng đƣợc sử dụng làm LED quang báo, tuy nhiên trong tƣơng lai màn hình LED
với độ phân giải cao sẽ là một xu hƣớng. Do ƣu điểm chính là tiết kiệm năng lƣợng. Sau đây
là hình ảnh ma trận LED (8x8) hay sử dụng để ghép lại thành các ma trân lớn hơn.
Hình 5.6 - Hình ảnh LED ma trân 8x8
Các tín hiệu điều khiển hàng đƣợc nối với Anode của tất cả các led trên cùng một hàng.
Các tín hiệu điểu khiển cột cũng đƣợc nối với Cathode của tất cả các led trên cùng một cột.
Khi có một tín hiệu điều khiển ở cột và hàng, các chân Anode của các led trên hàng tƣơng
ứng đƣợc cấp điện áp cao, đồng thời các chân Cathode của các led trên cột tƣơng ứng đƣợc
đƣợc cấp điện áp thấp .Tuy nhiên lúc đó chỉ có một số led trên 1 hàng hoặc 1 cột sáng, vì nó
có đồng thời điện thế cao trên Anode và điện thế thấp trên Cathode.
Nguyên lý quét: (Ví dụ hiển thị chữ K)
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
228
+ Đầu tiên ta sẽ cho tất cả các vị trí cột 1 sáng bằng cách nối đất cột 1 và nối nguồn vào
tất cả các hàng.
+ Sau đó ta cho các vị trí hàng thứ 4 ở cột 2 sáng
+ Tiếp đó ta cho vị trí hàng thứ 3,5 của cột thứ 3 sáng:
+ Sau đó ta sẽ cho vị trí hàng thứ 2,6 của cột thứ 4 sáng:
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
229
+ Tƣơng tự ta cho vị trí hàng thứ 1,7 của cột thứ 5 sáng:
+ Và ta cho vị trí hàng thứ 8 của cột thứ 6 sáng:
+Tƣơng tự ở các cột thứ 7,8 ta không cho sáng ở tất cả các vị trí.
+ Sau đó ta quay lại cho hiển thị ở cột 1,2,3,4,5.. cứ nhƣ vậy quá trình quẻt đƣợc quét
liên tục các cột. Do hiện tƣợng lƣu ảnh trên võng mạc nên khi đó ta có cảm giác là liên tục.
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
230
b, Xây dựng sơ đồ triển khai ứng dụng mạch điều khiển hiển thị ma trận LED
Hình 5.7 Mạch điều khiển hiển thị ma trận LED
Phân tích chức năng của các khối:
+ Bộ chia tần: Có tác dụng tạo ra 1 Clock có tần số f=1/T, với T là thời gian hiển thị 1
hiệu ứng. Đầu vào điều khiển là xung chuẩn của kit và đầu ra của bộ chia tần là 1 Clock và
đƣợc đƣa vào để điều khiển .
+ Mode 8 : Đây là bộ đếm đến mode 8, hay chính là bộ đếm để điều khiển quét
theo cột.
+ Khối nhớ 1 : Đây là ROM lƣu các giá trị để điều khiển cột. Đầu vào là các bit
đầu ra của bộ đếm 8. Và các già trị của các bit này sẽ tƣơng ƣng với địa chỉ của giá trị
xuất ra điều khiển cột.
+ Khối nhớ 2: Đây là nơi lƣu các gia tri để điều khiển hàng.
Bộ
chia
tần
Mode 8
Khối nhớ
2
Khối nhớ
1
Bộ đệm âm
Bộ đệm
dƣơng
MA TRẬN LED
Bộ chọn
kênh
CPLD/FPGA
Clk
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
231
c, Thực hiện thiết kế:
Từ sơ đồ triển khai ở phần trên sử dụng phần mềm ISE để nhập thiết kế, thực hiện tổng
hợp và nạp cấu hình cho CPLD trên KIT. Dùng ngôn ngữ mô tả phần cứng VDHL để nhập
thiết kế. Bộ điều khiển Ma trận LED đƣợc môt tả trong thực tế có mô hình sau:
d, Mô tả bằng VHDL
--------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity matranled_2d is
Port ( CLK : in STD_LOGIC;
COLUM : out STD_LOGIC_VECTOR (7 downto 0);
ROW : out STD_LOGIC_VECTOR (7 downto 0));
end matranled_2d;
architecture Behavioral of matranled_2d is
signal dem: integer range 0 to 125000:=0;
signal count_mode8: std_logic_vector (2 downto 0):="000";
signal clk2khz: std_logic :='0';
signal temp : std_logic_vector(63 downto 0);
constant a:std_logic_vector(63 downto 0):=X"FF0000E7E70000FF";
-- khoi nho 2 chinh la luu cac gia tri cua hang so
begin
------chia tan--------------
-- xung chuan cua kit la 50Mhz
-- ta dung bo dem de tao cac xung co tan so la 2khz
process(clk) --xung 2Kz
begin
if clk='1' and clk'event then
if dem = 12500 then
dem <= 0;
CLK
COLUM
ROW
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
232
clk2khz <= not clk2khz;
else
dem <= dem +1;
end if;
end if;
end process;
-- bo dem mode 8
process(clk2khz)
begin
if clk2khz='1' and clk2khz'event then
count_mode8 <= count_mode8 + 1;
end if;
end process;
-- khoi nho 1
process(count_mode8)
begin
case count_mode8 is
when "000" => colum<= "10000000";
when "001" => colum<= "01000000";
when "010" => colum<= "00100000";
when "011" => colum<= "00010000";
when "100" => colum<= "00001000";
when "101" => colum<= "00000100";
when "110" => colum<= "00000010";
when others => colum<= "00000001";
end case;
end process;
-- bo chon kenh
row <= a(63 downto 56) when count_mode8 =x"0" else
a(55 downto 48) when count_mode8 =x"1" else
a(47 downto 40) when count_mode8 =x"2" else
a(39 downto 32) when count_mode8 =x"3" else
a(31 downto 24) when count_mode8 =x"4" else
a(23 downto 16) when count_mode8 =x"5" else
a(15 downto 8) when count_mode8 =x"6" else
a(7downto 0);
end Behavioral;
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
233
5.1.3. Thiết kế ứng dụng điều hiển thị 8 led đơn sáng theo quy luật
a/ Phân tích ứng dụng thiết kế
Xuất phát bài toán điều khiển đèn trang trí ví dụ nhƣ điều khiển bộ đèn nháy, có thể thử
nghiệm bài toàn này trên KIT phát triển CPLD nhƣ sau: Thiết kế cấu hình cho CPLD thành
bộ điều khiển dãy 8 đèn led đơn sáng theo quy luật nào đó. Sơ đồ khối của ứng dụng nhƣ sau:
Hình 5.8 - Sơ đồ khối ứng dụng 2
Trong sơ đồ trên: Chuyển mạch DIP-SW cho phép lựa chọn các chế độ làm việc khác
nhau cho Bộ điều khiển. Bộ điều khiển sẽ tạo ra các tín hiệu điều khiển cơ cấu 8 LED sáng
lần lƣợt tuần tự từ LED1 đên LED8, tạo ra chế độ sáng tuần tự. Chu kỳ sáng sẽ đƣợc lựa chọn
bởi chuyển mạch DIP-SW, theo bảng sau:
Chế độ S Chu kỳ sáng - T
1 0000 10 ms
2 0001 50 ms
3 0011 100 ms
4 0111 200 ms
5 1111 500 ms
b/ Xây dựng sơ đồ triển khai ứng dụng
Từ sơ đồ ứng dụng xây dựng sơ đồ triển khai thiết kế cho bộ điều khiển nhƣ hình
4.13.Theo sơ đồ từ tín hiệu CLK 10MHz đƣợc đƣa ra các bộ chia tần để tạo ra các tín hiệu
xung chuẩn T1, T2, T3, T4, T5 có chu kỳ tƣơng ứng là: 10ms, 50ms, 100ms, 200ms, 500ms.
Các xung này đƣợc đƣa qua bộ chọn kênh đƣợc điều khiển bởi đầu vào S, xung đƣợc chọn sẽ
điều khiển bộ dịch vòng 8 bit để tạo tín hiệu K(8 1) dùng để điều khiển cho các LED đơn.
c/ Thực hiện thiết kế
Từ sơ đồ triển khai ở phần trên sử dụng phần mềm ISE để nhập thiết kế, thực hiện tổng
hợp và nạp cấu hình cho CPLD trên KIT. Dùng ngôn ngữ mô tả phần cứng VDHL để nhập
thiết kế. Bộ điều khiển có sơ đồ nguyên lý ở trên sẽ đƣợc mô tả trong thực thể "Controller"
có mô hình nhƣ sau:
0 1
Chuyển mạch DIP-SW
CPLD
S(3 0)
Bộ điều khiển
LED8 ..... LED1
K(8 1) - điều khiển hiển thị
cho từng LED tƣơng ứng CLK
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
234
Hình 5.9 - Sơ đồ triển khai ứng dụng
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
use IEEE.numeric_std.all;
-- Uncomment the following lines to use the declarations that are
-- provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;
entity Controller is
Port ( S : in std_logic_vector(3 downto 0);
CLK : in std_logic;
K : out std_logic_vector(7 downto 0));
end Controller;
architecture Behavioral of Controller is
Controller
S
CLK
K
4
8
Chia tần
1
CLK
10MHz
Chia tần
2
T1 Chia tần
3
T2 Chia tần
4
T3 Chia tần
5
Chọn kênh
S
T4 T5
Bộ dịch vòng 8 bit
K(8 1)
CPLD
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
235
constant hs1: std_logic_vector(16 downto 0):="11000011010011111"; --
Chia 100000 tao ra 10 ms
constant hs2: std_logic_vector(2 downto 0):="100"; -- Chia 5 de tao
ra 50 ms
constant hs3: std_logic:='1'; -- Chia 2 de tao ra 100 ms
constant hs4: std_logic:='1'; -- Chia 2 de tao ra 200 ms
constant hs5: std_logic_vector(2 downto 0):="100"; -- Chia 5 de tao
ra 500 ms
signal chiatan1: std_logic_vector(16 downto 0):=(others=>'0');
signal chiatan2: std_logic_vector(2 downto 0):=(others=>'0');
signal chiatan3: std_logic:='1';
signal chiatan4: std_logic:='1';
signal chiatan5: std_logic_vector(2 downto 0):=(others=>'0');
signal T1,T2,T3,T4,T5,T : std_logic; -- Dau ra cac bo chia tan
signal Q: std_logic_vector(2 downto 0):="000";
begin
-- Chia tan 1
process (CLK)
begin
if CLK'event and CLK='1' then
if chiatan1=hs1 then
chiatan1'0');
T1<='1';
else
chiatan1 <= chiatan1 +1;
T1<='0';
end if;
end if;
end process;
-- Chia tan 2
process (T1)
begin
if T1'event and T1='1' then
if chiatan2=hs2 then
chiatan2'0');
T2<='1';
else
chiatan2 <= chiatan2 +1;
T2<='0';
end if;
end if;
end process;
-- Chia tan 3
process (T2)
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
236
begin
if T2'event and T2='1' then
if chiatan3=hs3 then
chiatan3<='0';
T3<='1';
else
chiatan3 <= '1';
T3<='0';
end if;
end if;
end process;
-- Chia tan 4
process (T3)
begin
if T3'event and T3='1' then
if chiatan4=hs4 then
chiatan4<='0';
T4<='1';
else
chiatan4 <= '1';
T4<='0';
end if;
end if;
end process;
-- Chia tan 5
process (T3)
begin
if T3'event and T3='1' then
if chiatan5=hs5 then
chiatan5'0');
T5<='1';
else
chiatan5 <= chiatan5 +1;
T5<='0';
end if;
end if;
end process;
-- Thuc hien bo chon kenh
with S select
--abcdefgh
T<=T1 when "0000",
T2 when "0001",
T3 when "0011",
T4 when "0111",
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
237
T5 when others;
-- Dich vong 8 bit
process(T)
begin
if T'event and T='1' then
Q<=Q+1;
end if;
end process;
with Q select
K<= "11111110" when O"0",
"11111101" when O"1",
"11111011" when O"2",
"11110111" when O"3",
"11101111" when O"4",
"11011111" when O"5",
"10111111" when O"6",
"01111111" when others;
end Behavioral;
5.2 THIẾT KẾ BỘ ĐẾM THUẬT NGHỊCH THEO ĐIỀU KHIỂN
a/ Phân tích ứng dụng thiết kế
Xuất phát từ bài toán đếm số lƣợng khách hàng trong cửa hàng, thiết bị sẽ đƣợc đặt tại
cửa ra vào, khi đó dùng 2 sensor: một sensor phát hiện có ngƣời đi vào, và một sensor phát
hiện ngƣời đi ra, 2 sensor gửi tín hiệu điều khiển vào bộ đếm thuận nghịch, chỉ thị bộ đếm sẽ
xác định số ngƣời trong cửa hàng. Để thực hiện ví dụ này trên bo mạch phát triển, 2 sensor sẽ
đƣợc minh hoạ bằng 2 nút bấm UP và DOWN, chúng gửi tín hiệu điều khiển bộ đếm thuận
nghịch, đƣợc thiết kế trong CPLD. Khi UP đƣợc bấm bộ đếm tăng lên 1 đơn vị, khi DOWN
đƣợc bấm bộ đếm giảm đi một đơn vị. Sơ đồ khối của ứng dụng nhƣ hình vẽ 4.10.
Hình 5.10 - Sơ đồ khối ứng dụng 1
b/ Xây dựng sơ đồ triển khai ứng dụng
Vcc
DOWN
UP
B1
B2
Tạo CLK
10MHz Bộ đếm thuận nghịch
thập phân 2 digit
CLK
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
238
Hình 5.11 - Sơ đồ triển khai ứng dụng 1
Từ sơ đồ khối của ứng dụng xây dựng đƣợc sơ đồ triển khai của ứng dụng nhƣ hình vẽ
4.11. Phƣơng pháp thiết kế đƣợc sử dụng phƣơng pháp thiết kế mạch số đồng bộ.
Trong đó khối "Bắt phím" xác định khi nào phím đƣợc bấm, mỗi lần bấm phím đầu ra
Down hoặc Up sẽ cho ra môt xung dƣơng có độ rộng Tclk (Chu kỳ xung CLK), khối này
cũng nhận xung CLK và xung T tấn số 10Hz vào để thƣc hiện các bƣớc định thời và chống
nẩy nẩy phím. Khối này sẽ có sơ đồ nguyên lý nhƣ sau (chỉ minh họa quá trình bắt phím
DOWN):
Bộ đếm thập phân đồng bộ 2 digit, có kết quả đƣa ra là giá trị hàng chục "chuc" - 4 bit
và giá trị hàng đơn vị "donvi" - 4 bit, chúng đƣợc đƣa qua khối "điều khiển cơ cấu chỉ thị số"
để giải mã và điều khiển hiện thị kết quả bằng màn hình chỉ thị số dùng 2 LED 7 đoạn theo
chế độ quét động.
c/ Thực hiện thiết kế
Từ sơ đồ triển khai ở phần trên sử dụng phần mềm ISE để nhập thiết kế, thực hiện tổng
hợp và nạp cấu hình cho CPLD trên KIT. Dùng ngôn ngữ mô tả phần cứng VDHL để nhập
thiết kế. Bộ đếm thuận nghịch có sơ đồ nguyên lý ở trên sẽ đƣợc mô tả trong thực thể
"UpdownCounter" có mô hình nhƣ sau:
use IEEE.STD_LOGIC_1164.ALL;
D Q
D Q
D Q
B1
T
K1 K2
K3
DOWN
CLK
B1
B2
Bắt phím
Bộ đếm
thập phân
UP
Điều
khiển cơ
cấu chỉ
thị số
Chia tần
CPLD
abcdefgh
AN1
AN2
chuc
donvi
CLK
CLK
T (10Hz)
Down
Up
DOWN
UpdownCounter
B1
B2
CLK
Seg (abcdefgh)
AN(0)
AN(1)
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
239
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--- Khai bao thưc the
entity UpDownCounter is
Port ( B1: in std_logic;
B2: in std_logic;
CLK: in std_logic;
Seg: out std_logic_vector(7 downto 0);
AN: out std_logic_vector(1 downto 0));
end UpDownCounter;
--- Mo ta hoat dong Cho thuc the
architecture Behavioral of UpDownCounter is
signal UP,DOWN,Mode,T: std_logic;
signal K1,K2,K3: std_logic_vector(1 downto 0);
signal donvi,chuc, Temp: std_logic_vector(3 downto 0);
signal chiatan: std_logic_vector(14 downto 0);
begin
---- Mo ta khoi Chia tan
process (CLK)
begin
if CLK'event and CLK='1' then
chiatan <= chiatan +1;
end if;
end process;
T<=chiatan(14);
---- Mo ta khoi Bat phim
process(T)
begin
if T'event and T='1' then
K1<=(B2,B1);
end if;
end process;
process(CLK)
begin
if CLK'event and CLK='1' then
K2<=K1; K3<=K2;
end if;
end process;
(UP,DOWN)<=not K2 and K3;
---- Mo ta Bo dem thap phan dong bo
process (CLK)
begin
if CLK'event and CLK= '1' then
if UP='1' then
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
240
if donvi = X"9" then
donvi<=X"0";
if chuc = X"9" then chuc<=X"0";
else chuc<=chuc+1;
end if;
else donvi<=donvi+1;
end if;
elsif DOWN='1' then
if donvi = X"0" then donvi<=X"9";
if chuc = X"0" then chuc<=X"9";
else chuc<=chuc-1;
end if;
else donvi<=donvi-1;
end if;
end if;
end if;
end process;
---- Mo ta khoi Dieu khien hien co cau chi thi so
with temp select
--abcdefgh
Seg<="00000011" when X"0",
"10011111" when X"1",
"00100101" when X"2",
"00001101" when X"3",
"10011001" when X"4",
"01001001" when X"5",
"01000001" when X"6",
"00011111" when X"7",
"00000001" when X"8",
"00001001" when X"9",
"11111101" when others;
with T select
temp<=donvi when '1',
chuc when others;
with T select
AN<="01" when '1',
"10" when others;
end Behavioral;
5.3. THIẾT KẾ BỘ ĐẾM TẦN TỰ ĐỘNG THAY ĐỔI THANG ĐO
a/ Phân tích ứng dụng thiết kế
Trong thực tế phép đo tần số là một trong những phép đo lƣờng điện tử thông dụng.
Trong đó phƣơng pháp đo dùng máy đếm tần đƣợc sử dụng chủ yếu. Phƣơng pháp đó này
hoàn toàn có thể đƣợc thử nghiệm trên KIT phát triển CPLD. Với những mạch ứng dụng sẵn
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
241
có trên KIT phát triển ta có thể thiết kế một bộ đếm tần số tự động thay đổi thang đo có sơ đồ
tổng quát nhƣ sau:
Hình 5.12 - Sơ đồ triển khai ứng dụng 3
Mạch vào sẽ có nhiệm vụ biến đổi tín hiệu vào thành dạng xung có mức logic CMOS và
có cùng chu kỳ với tín hiệu vào. Dạng xung này đƣợc đƣa vào bộ đếm tấn để thực hiện đo tần
số, kết quả sẽ đƣợc chỉ thị trên cơ cấu chỉ thị số LED 7 đoạn trên KIT phát triển. Kết quả sẽ
đƣợc hiển thị dấu phảy động, ngoài ra còn có 3 đèn led để chỉ thị đơn vị đo tƣơng ứng. Do là
thử nghiệm nên chúng tôi không thiết kế phần mạch vào và tạo dạo xung mà dùng ngay tín
hiệu vào fx có dạng xung vuông, nên đƣợc đƣa thẳng vào Bộ đếm tần số.
Tham số của bộ đếm tần phụ thuộc rất nhiều vào lƣợng tài nguyên của CPLD, sẽ đƣợc
xác định sau khi thử nghiệm thiết kế, vì thiết kế sẽ đƣợc thực hiện với sử tối đa tài nguyên của
CPLD. Dùng CPLD tần số lớn nhất có thể đƣợc không quá tần số làm việc của CPLD -
khoảng hơn 100MHz, giới hạn tần số nhỏ nhất có thể đo đƣợc, với độ chính xác cao phụ
thuộc vào lƣợng tài nguyên có trong CPLD. Phƣơng pháp đo này nói chung sai số lƣợng tử là
không lớn, sai số lớn nhất chính là do hạn chế của cơ cấu chỉ thị số, chỉ hiển thị đƣợc 4 số.
b/ Xây dựng sơ đồ triển khai ứng dụng
Từ sơ đồ khối tổng quan trên, Bộ đếm tần có thể đƣợc thực hiện theo sơ đồ triển khai
nhƣ hình 4.15. Trong sơ đồ trên tần số cần đo fx đƣợc đƣa vào bộ "Chuẩn hoá xung vào" tạo
ra xung fx0 có cùng chu kỳ nhƣng có độ rộng xung bằng chu kỳ Tclk của xung CLK. Xung
CLK vào có tần số 10MHz đƣợc đƣa qua "bộ chia tần số nhiều đầu ra", tạo ra các xung định
thời T1, T2, T3, T4 có chu kỳ 1s; 100 ms, 10ms, 1ms. Các xung này đƣợc đƣa vào bộ chọn
kênh để chọn xung định thời phù hợp với giải tần số tín hiệu đo vào. Xung định thời đƣợc lựa
chọn Tch sẽ đƣa vào đề điều khiển "bộ đếm". Kết quả của của "bộ đếm" tỷ lệ với tần số cần
đo. Kết quả này đƣợc đƣa qua "bộ điều khiển chỉ thị số" để giải mã và tạo ra xung điều khiển
cơ cấu chỉ thị số, cho phép hiển thị kết quả là tần số xung cần đo. Giải đồ thời gian minh hoạ
mối quan hệ của các tín hiệu vào bộ đếm nhƣ trong hình vẽ 4.16.
Mạch vào
và tạo dạng
xung
fx
Bộ đếm tần số
CPLD
CLK
Hz
kHz
MHz
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
242
Hình 5.13 - Sơ đồ triển khai ứng dụng 3
Hình 5.14 - Giản đồ thời gian minh hoạ mối quan hệ xung chuẩn Tch và xung vào chuẩn.
Quá trình đo hoàn toàn tự động chọn thang đo, chọn đơn vị chỉ thị phù hợp, máy đếm
tần cũng có hiển thị thông báo nếu tần số vào quá nhỏ hoặc quá dải tần đo đƣợc. Quá trình
điều khiển tự động trong bộ đếm tần đƣợc mô tả nhƣ trong lƣu đồ thuật toán ở hình 4.17.
Chuẩn hoá
xung vào
fx Bộ đếm fx0
Bộ điều
khiển chỉ thị
số
8
4
3
Seg
AN
Unit
Điều khiển chọn
thang đo
Chia tần nhiều
đầu ra
CLK
CLK
EN1
Chọn
kênh
T1
T2
T3
T4
Tch
CPLD
Tx
T
ch
t
t
Tch
f
x0
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
243
Hình 4.17 - Lƣu đồ thuật toán điều khiển trong bộ đếm tần
c/ Thực hiện thiết kế
Từ sơ đồ triển khai ở phần trên sử dụng phần mềm ISE để nhập thiết kế, thực hiện tổng
hợp và nạp cấu hình cho CPLD trên KIT. Dùng ngôn ngữ mô tả phần cứng VDHL để nhập
thiết kế. Bộ điều khiển có sơ đồ nguyên lý ở trên sẽ đƣợc mô tả trong thực thể
"FreqCounter" có mô hình nhƣ sau:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following lines to use the declarations that are
-- provided for instantiating Xilinx primitive components.
BEGIN
Chọn thang mặc
định
Đếm tần
Qúa thang
Giảm thang đo
Nghìn = 0
Hiển thị
Kết thúc?
END
Đúng
sai
sai
Đúng
sai
Tăng thang đo
Đúng
FreqCounter
Fx
CLK
8
Seg
AN
Unit
4
3
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
244
--library UNISIM;
--use UNISIM.VComponents.all;
entity auto_freq_counter is
port( fx : in std_logic;
clk: in std_logic;
Seg : out std_logic_vector(6 downto 0);
dot: out std_logic;
AN : out std_logic_vector(2 downto 0);
Unit : out std_logic_vector(2 downto 0));
end auto_freq_counter;
architecture Behavioral of auto_freq_counter is
signal donvi0: std_logic_vector(3 downto 0):="0000";
signal chuc0: std_logic_vector(3 downto 0):="0000";
signal tram0: std_logic_vector(3 downto 0):="0000";
signal donvi: std_logic_vector(3 downto 0):="0000";
signal chuc: std_logic_vector(3 downto 0):="0000";
signal tram: std_logic_vector(3 downto 0):="0000";
signal temp: std_logic_vector(3 downto 0):="0000";
signal scale: std_logic_vector(1 downto 0):="00";
signal over, over1: std_logic:='0';
signal chiatan: std_logic_vector(19 downto 0):=x"00000";
signal Tch :std_logic:='1';
signal fx1,fx2, fx3: std_logic;
begin
-- Chia tan tao xung mo cong - tu dong chon thang do
process (clk)
begin
if clk='1' and clk'event then
if(over1='0') then
case scale is
when "00" =>
if chiatan=x"F423F" then --clk=10MHz, T=0,1s.
chiatan<=x"00000";
Tch<='1';
else
chiatan<=chiatan+1;
Tch<='0';
end if;
when "01" =>
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
245
if chiatan=x"1869F" then --T=0,1ms;
chiatan<=x"00000";
Tch<='1';
else
chiatan<=chiatan+1;
Tch<='0';
end if;
when "10" =>
if chiatan=x"0270F" then --1us
chiatan<=x"00000";
Tch<='1';
else
chiatan<=chiatan+1;
Tch<='0';
end if;
when others =>
if chiatan=x"F423F" then
chiatan<=x"00000";
Tch<='1';
else
chiatan<=chiatan+1;
Tch<='0';
end if;
end case;
else
chiatan<=x"00000";
Tch<='1';
end if;
end if;
end process;
-- Tao xung vao
process(clk)
begin
if clk='1' and clk'event then
fx1<=fx;
fx2<=fx1;
end if;
end process;
fx3<= fx1 and (not fx2); -- dong bo xung dem fx va clk
-- counting
process(clk)
begin
if clk='1' and clk'event then
if over1='1' then over1<='0';
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
246
end if;
if (Tch='1') then
donvi<=x"0";
chuc<=x"0";
tram<=x"0";
if over='0' then
donvi0<=donvi;
chuc0<=chuc;
tram0<=tram;
--Decrease Scale;
if tram=x"0" then
if scale/="00" then
scale<=scale-1;
end if;
end if;
else
donvi0<=x"A";
chuc0<=x"A";
tram0<=x"A";
over<='0';
end if;
else
if fx3='1' and over='0' then
if donvi=x"9" then
donvi<=x"0";
if chuc=x"9" then
chuc<=x"0";
if tram=x"9" then -- over range
if scale/="10" then
scale<=scale+1;
end if;
over<='1';
over1<='1';
else tram<=tram+1;
end if;
else chuc<=chuc+1;
end if;
else donvi<=donvi+1;
end if;
end if;
end if;
end if;
end process;
---------------
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
247
-- Display Frequency
process (chiatan(12 downto 11))
begin
case chiatan(12 downto 11) is
when "00" =>
AN<="001";
temp<=donvi0;
if (scale="10") and (temp/=x"A") then
dot<='0';
else dot<='1';
end if;
when "01" =>
AN<="010";
temp<=chuc0;
if scale="01" then
dot<='0';
else dot<='1';
end if;
when "10" =>
AN<="100";
temp<=tram0;
if scale="00" then
dot<='0';
else dot<='1';
end if;
when others =>
dot<='1';
AN<="000";
end case;
end process;
------------------------------- 11110100001000111111111
with temp Select
-- abcdefgh
Seg<="0000001" when x"0",
"1001111" when X"1",
"0010010" when x"2",
"0000110" when X"3",
"1001100" when X"4",
"0100100" when X"5",
"0100000" when X"6",
"0001111" when X"7",
"0000000" when X"8",
"0000100" when X"9",
"1111110" when X"A",
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
248
"1111111" when others;
end Behavioral;
5.4. THIẾT KẾ MẠCH GIAO TIẾP ĐIỀU KHIỂN VGA
a. Giới thiệu chuẩn VGA
VGA ( Video Graphíc array) là 1 chuẩn hiẻn thị ra đời từ những năm 1980 ở các thế hệ
máy tính IBM PC. Ở thiết kế này chúng ta sẽ tạo ra khối giao tiếp VGA chuẩn 8 màu , độ
phân giải 640x480 . Thiết kế tƣơng thích màn hình CRT hoặc LCD hỗ trợ chuẩn VGA.
Các ký hoạ phác thảo một màn hình CRT đơn sắc đựoc thể hiện trên Hình 5.15
Hình 5.15 – Sơ đồ khối màn hình CRT
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
249
Kết quả kết hợp mầu từ 3 mầu cơ bản nhƣ bảng sau:
Các súng điện tử (cathode) tạo ra các tia điện tử tập trung, đi qua ống chân không và
cuối cùng đập vào màn hình có phosphorescent tạo nên các điểm sáng trên màn hình. Cƣờng
độ tia điện tử và độ sáng của điểm ảnh đƣợc xác định bằng mức điện áp của tín hiệu video
mono. Mức điện áp của tín hiệu mono nằm trong khoảng từ 0 - 0.7v.
Có 2 cuộn dây thẳng đứng và nằm ngang cuốn tạo ra từ trƣờng lái tia điện tử đến vị trí
điểm sáng. Thông thƣờng các tia điện tử quét khắp màn hình từ trái sang phải và từ trên
xuống dƣới. Bộ tạo dao động và bộ khuếch đại bên trong màn hình tạo ra dạng sóng răng cƣa
để điều khiển 2 cuộn dây. Ví dụ khi tia điện tử quét từ cạnh bên trái màn hình sang cạnh bên
phải màn hình là điện áp trên cuộn dây ngang tăng dần. Sau khi đến cạnh bên phải , tia điện
tử nhanh chóng trở về cạnh bên trái khi điện áp trở về 0. Mối quan hệ giửa điện áp răng cƣa
và vị trí quét đƣợc thể hiện trong hình dƣới.
Chương 5 – Thiết kế các hệ thống số ứng dụng dùng VHDL
250
HÌnh 5.2.2- Đồ thị thời gian xung quét mành
Hình 5.16 – Đ
Các file đính kèm theo tài liệu này:
- thiet_ke_logic_so_ptit_2986.pdf