Bộ đếm là một mạch dãy tuần hoàn có 1 đầu vào đếm và 1 đầu ra kết quả; số trạng thái trong của mạch bằng hệ số đếm (Kđ). Dưới tác động của tín hiệu vào, bộ đếm sẽ chuyển từ trạng thái này đến trạng thái khác theo một chu trình nhất định. Cứ sau Kđ tín hiệu vào đếm, mạch sẽ quay lại trạng thái ban đầu.
Trang 1Thiết kế và mô phỏng bộ ĐẾM THEO
PHƯƠNG PHÁP MÔ TẢ HÀNH VI
Trang 2Khái niệm bộ đếm
■ Bộ đếm là một mạch dãy tuần hoàn có 1 đầu vào đếm và 1 đầu ra kết quả; số trạng thái trong của mạch bằng hệ số đếm (Kđ) Dưới tác động của tín hiệu vào, bộ đếm sẽ chuyển từ trạng thái này đến trạng thái khác theo một chu trình nhất định Cứ sau Kđ tín hiệu vào đếm, mạch sẽ quay lại trạng thái ban đầu.
Trang 3Phân loại bộ đếm
■ Phân loại theo cách làm việc: Bộ đếm đồng bộ, bộ đếm dị bộ (không đồng bộ)
■Phân loại theo hướng đếm: bộ đếm tiến, bộ đếm lùi
Trang 4Đồ hình trạng thái của bộ đếm
Trang 5Mã của bộ đếm
■ Các trạng thái của bộ đếm được mã hóa bởi 1 mã cụ thể Cùng 1 bộ đếm có thể có nhiều cách mã hóa.
■ Một số mã thường dùng:
– Mã nhị phân
– Mã Gray
– Mã BCD
– Mã Johnson
– Mã vòng
Trang 6Các bước thiết kế
■ Bước 1: xác định yêu cầu: Kđ? Cách thức đếm (tiến hay lùi)? Mã đếm?
■ Bước 2: Lập mã VHDL: gồm 2 process
■ Process 1:
– thực hiện chức năng đếm dựa trên Kđ giới hạn của biến đếm.
– Cách thức đếm: xác định biểu thức đếm trong chương trình: đếm tiến trạng thái sau = trạng thái trước +1; đếm lùi trạng thái sau = trạng thái trước -1
■ Process 2: thực hiện chức năng mã hóa dựa trên yêu cầu của mã đếm
Trang 7Ví dụ thiết kế bộ đếm tiến, nhị phân Kđ =4
■ Phân tích yêu cầu:
■ Kđ = 4 ; Mã nhị phân có 4 trạng
thái có 2 bít đầu ra
■ Code entity:
■ Entity dem4 is
■ port ( ckl : in std_logic;
■ reset: in std_logic;
■ Qout: out std_logic_vector(1 downto 0)
■ );
Trang 8Ví dụ thiết kế bộ đếm tiến, nhị phân Kđ =4
■ Phân tích yêu cầu:
■ Kđ = 4 giá trị lớn nhất của biến đếm =
3
■ Đếm tiến trạng thái sau = trạng thái
trước +1;
■ Code process 1:
■ Signal d: integer range 0 to 3;
■ Dem: process( clk, reset)
■ variable d_tam : integer range 0 to 3;
■ begin
■ if reset = ‘1’ then d_tam := 0;
■ else
■ if clk’event and clk =‘1’ then
■ if d_tam = 3 then d_tam := 0;
■ else d_tam := d_tam +1;
■ end if;
■ end if;
■ end if;
■ d <= d_tam;
■ End process;
■
Trang 9Ví dụ thiết kế bộ đếm tiến, nhị phân Kđ =4
■ Phân tích yêu cầu:
■ Kđ = 4, mã nhị phân có 4 trạng thái là:
■ 00 01 10 11
■ Code process 2:
■ Mahoa: process( d)
■ begin
■ case d is
■ when 0=> Qout <= “00”;
■ when 1=> Qout <= “01”;
■ when 2=> Qout <= “10”;
■ when others => Qout <= 11”
■ end case;
■ End process;
■
Trang 10Phương pháp mô phỏng
■ Dựa vào Kđ = số chu kỳ tối thiểu cần mô phỏng (nên chọn = 2*Kđ)
■Đặt tín hiệu đầu vào cho mỗi biến là 1 xung vuông sao cho chu kỳ xung clk (đầu vào đếm) là 1s Đặt tín hiệu reset là xung vuông có chu kỳ = thời gian mô phỏng và thời gian reset = 0 chiếm khoảng 90% chu kỳ.
Trang 11Ví dụ bộ đếm tiến, nhị phân Kđ =4
■ Kđ = 4 thời gian mô phỏng tối thiểu = 8s
■ Biến clk là xung vuông có chu kỳ = 1s
■Biến reset là xung vuông có chu kỳ = 8s, duty = 90%
Trang 12Led 7