Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.22 MB, 36 trang )
2. Thiết kế khối logic cho bộ đếm mod 10 hiển thi 1 LED 7 thanh
a. Đồ hình trạng thái
Hình . Đồ hình trạng thái
b. Xác định số FF
- Vì số đếm hệ thập phân có Kđ = 10 nên ta phải sử dụng ít nhất 4FF vì
4FF mã hóa được 16 trạng thái.
- Sáu trạng thái thừa sẽ dùng cổng NAND để khóa và không đếm hết số
trạng thái.
- Chọn 4 JKFF
c. Lập bảng bảng mã hóa và bảng kích.
S D C B A D’ C’ B’ A’ JD KD JC KC JB KB JA KA
0 0 0 0 0 0
0
0
1
0 X 0 X 0 X 1 X
1 0 0 0 1 0
0
1
0
0 X 0 X 1 X X 1
2 0 0 1 0 0
0
1
1
0 X 0 X X 0 1 X
3 0 0 1 1 0
1
0
0
0 X 1 X X 1 X 1
4 0 1 0 0 0
1
0
1
0 X X 0 0 X 1 X
5 0 1 0 1 0
1
1
0
0 X X 0 1 X X 1
6 0 1 1 0 0
1
1
1
0 X X 0 X 0 1 X
7 0 1 1 1 1
0
0
0
1 X X 1 X 1 X 1
8 1 0 0 0 1
0
0
1
X 0
0 X 0 X 1 X
9 1 0 0 1 0
0
0
0
X 1
0 X 0 X X 1
Bảng
+ Tối thiểu các hàm kích - sử dụng bìa Cacno.
-Từ bảng kích nhận thấy:
JA = KA = 1(Vì tất cả các giá trị đều =1&X).
Trang | 20
Trang | 21
Ở bộ đếm không đồng bộ, sự thay đổi của FF này lại dẫn đến sự thay đổi
trạng thái của FF khác...,nên thường chỉ lấy xung đếm (Xđ) đưa vào Ck đầu tiên
FF-A còn các FF sau được điều khiển bởi các FF trước.
Từ các hàm J, K ở trên ta có phương trình Ck cho từng FF như sau:
CKA = Xđ
CKB = A
CKC = B
CKD = A
Trang | 22
d. Sơ đồ mạch thực hiện đếm và dạng sóng trên các đầu ra của FF.
- Sơ đồ nguyên lý bộ đếm 4bit:
Hình . Sơ đồ nguyên lý bộ ddeemss 4 bit
- Sơ đồ thực hiện đếm mod 10:
Hình . Sơ đồ thực hiện đếm mod 10
- Đồ hình dạng xung đếm :
Hình . Đồ hình dạng xung đếm
Trang | 23
III. CHƯƠNG TRÌNH LẬP TRÌNH VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
entity thanhchu is
port(
stp : in STD_LOGIC;
stt : in STD_LOGIC;
rst : in STD_LOGIC;
sel : in STD_LOGIC;
clk : in STD_LOGIC;
seg1 : out STD_LOGIC_VECTOR(7
downto 0);
seg2 : out STD_LOGIC_VECTOR(7
downto 0)
);
end thanhchu;
architecture thanhchu of thanhchu is
begin
process(rst,clk,sel,stt,stp)
variable temp1:integer range 0 to 10;
variable temp2:integer range 0 to 10;
begin
if (rst='1') then
temp1:=0;
temp2:=0;
elsif (rising_edge(clk)) then
if (stt='1') then
if (stp='0') then
if (sel='1') then
if (temp1=0) then temp1:= 1
else temp1:=temp1+2;
end if;
if (temp1=1) then
if (temp2=9) then temp2:=0;
else temp2:=temp2+1;
end if;
end if;
end if;
end if;
if (sel='0') then
if (temp1=10) then temp1:=0;
if (temp2=9) then temp2:=0;
else temp2:=temp2+1;
end if;
-- Khai báo thư viện—
--Khai báo thực thể---Khai báo chân đầu vào—
--Chân stop kiểu logic 0/1—
--Chân start kiểu logic 0/1—
--Chân reset kiểu logic 0/1—
--Chân selec kiểu logic 0/1—
--Chân clock kiểu logic 0/1—
--biến hàng đơn vị---biến hàng chục—
--khai báo kiến trúc thực thể thanhchu—
-- Bắt đầu chương trình—
--Thông báo quá trình chạy với các chân đã
khai báo—
--khai báo biến temp1 số nguyên từ 0-10---khai báo biến temp2 số nguyên từ 0-10---Nếu biến rst=1 thì—
--Còn không clk ở mức cao thì—
--Nếu stt=1 thì—
--Xét nếu stp=0 thì—
--Xét nếu sel=1 thì –
--Xét nếu temp1=0 thì gán temp1=1—
--Còn không thì tem1 tăng thêm 2 đơn vị--- Xét nếu temp1=1 thì—
--Xét nếu temp2=9 thì gán temp2=0 –
-- Còn không thì temp2 tăng lên 1 đơn vị--
-- Xét nếu sel=0 thì
--Xét nếu temp1=10 thì gán team1=0—
--Xét nếu temp2=9 thì gán temp2=0—
--Còn không thì temp2 tăng lên 1 đơn vị---Còn không thì temp1 tăng lên 2 đơn vị-Trang | 24
else temp1:=temp1+2;
end if;
end if;
else temp1:=temp1;
temp2:=temp2;
end if;
end if;
case temp1 is
when 0 => seg1<= x"C0";
when 1 => seg1<= x"F9";
when 2 => seg1<= x"A4";
when 3 => seg1<= x"B0";
when 4 => seg1<= x"99";
when 5 => seg1<= x"92";
when 6 => seg1<= x"82";
when 7 => seg1<= x"F8";
when 8 => seg1<= x"80";
when 9 => seg1<= x"90";
when others =>NULL;
end case;
case temp2 is
when 0 => seg2<= x"C0";
when 1 => seg2<= x"F9";
when 2 => seg2<= x"A4";
when 3 => seg2<= x"B0";
when 4 => seg2<= x"99";
when 5 => seg2<= x"92";
when 6 => seg2<= x"82";
when 7 => seg2<= x"F8";
when 8 => seg2<= x"80";
when 9 => seg2<= x"90";
when others =>NULL;
end case;
end process;
end thanhchu;
--Khi stp #0 thì gán temp1=temp1vaf
temp2=temp2—
--biến hàng đơn vị và hàng chục để hiện thị ra
LED---khai báo giá trị thập lục phân cho các trường
hợp xảy ra ở
--Nếu trường hợp khác thì không làm gì –
--Kết thúc các trường hợp xảy ra—
--Kết thúc quá trình thực hiện—
--Kết thúc thực thể thanhchu--
IV. THIẾT KẾ MẠCH.
1. Các file thiết kế.
Nhấn New, chọn tab Device Design Files, chọn Verilog HDL (hay
VHDL hay AHDL). Với cách này, mạch điện được mô tả bởi các đoạn mã thể
hiện các đầu vào đầu ra của các khối mạch cũng như cách xử sự của chúng.
Trong luận án này, lấy ví dụ về thiết kế mạch đếm 4 bit dùng Verilog HDL file.
Tạo file mới.
Từ giao diện của Altera Quartus chọn File/New Project Wizard. Hiện:
Trang | 25
Hình vẽ. Giao diện Dự án mới
Nhấn Next/Next để hiện ra bảng Thiết lập linh kiện (Family & Device
Settings), chọn linh kiện FPGA mà ta dùng, rồi nhấn Finish.
Lúc này, ta sẽ có được Project đầu tiên.
Thêm file Thiết kế vào Project
Nhấn File/New .
Trang | 26