Bộ phỏt tớn hiệu 13 2-

Một phần của tài liệu 221640 (Trang 133 - 135)

Từ một tớn hiệu clock, chỳng ta mong muốn thu được một tớn hiệu cú dang súng như trong hỡnh 9.20. Với bài toỏn loại này, chỳng ta cú thể sử dụng phương phỏp FSM hoặc phương phỏp truyền thống. Cả 2 phương phỏp đều được chỳng ta trỡnh bày dưới đõy:

Phương phỏp FSM:

Tớn hiệu của hỡnh 9.20 cú thể được mụ hỡnh như một FSM 8 trạng thỏi. Sử dụng bộ đếm từ 0 đến 7. Chỳng ta cú thể thiết lập một súng bằng „0‟ khi biến đếm = „0‟ (ở xung thứ nhất) và bằng 1 khi biến đếm = „1‟ (xung thứ hai),…vv…như trong hỡnh 9.20. Để thực thi được bộ tạo súng này thỡ yờu cầu 4 flip-flop: trong đú cú 3 cỏi để lưu trữ số đếm (3 bit), một cỏi để lưu trữ súng (1 bit ). Để thiết kế bộ tạo súng này, chỳng ta thiết kế theo kiểu 2, cụ thể sẽ như sau: --- LIBRARY ieee; USE ieee.std_logic_1164.all; --- ENTITY Bo_phat_tin_hieu IS PORT (clk: IN STD_LOGIC; wave: OUT STD_LOGIC); END Bo_phat_tin_hieu;

--- ARCHITECTURE arc OF Bo_phat_tin_hieu IS

TYPE states IS (zero, one, two, three, four, five, six, seven);

SIGNAL present_state, next_state: STATES; SIGNAL temp: STD_LOGIC;

BEGIN

--- Phan mach day: --- PROCESS (clk)

BEGIN

IF (clk'EVENT AND clk='1') THEN present_state <= next_state; wave <= temp;

END IF; END PROCESS;

--- Phan mach to hop: --- PROCESS (present_state) BEGIN

CASE present_state IS

WHEN zero => temp<='0'; next_state <= one; WHEN one => temp<='1'; next_state <= two; WHEN two => temp<='0'; next_state <= three; WHEN three => temp<='1'; next_state <= four; WHEN four => temp<='1'; next_state <= five; WHEN five => temp<='1'; next_state <= six; WHEN six => temp<='0'; next_state <= seven; WHEN seven => temp<='0'; next_state <= zero; END CASE; END PROCESS; END arc; --- Kết quả mụ phỏng: Hỡnh 9.2.1. Kết quả mụ phỏng tạo súng

Phương phỏp truyền thống:

Chỳng ta thiết kế bộ phỏt tớn hiệu theo phương phỏp truyền thống với cõu lệnh IF như sau:

--- LIBRARY ieee; USE ieee.std_logic_1164.all; --- ENTITY Bo_phat_tin_hieu2 IS PORT (clk: IN BIT; wave: OUT BIT); END Bo_phat_tin_hieu2;

--- ARCHITECTURE arc OF Bo_phat_tin_hieu2 IS BEGIN

PROCESS

VARIABLE count: INTEGER RANGE 0 TO 7; BEGIN

WAIT UNTIL (clk'EVENT AND clk='1'); CASE count IS WHEN 0 => wave <= '0'; WHEN 1 => wave <= '1'; WHEN 2 => wave <= '0'; WHEN 3 => wave <= '1'; WHEN 4 => wave <= '1'; WHEN 5 => wave <= '1'; WHEN 6 => wave <= '0'; WHEN 7 => wave <= '0'; END CASE; if count = 7 then count := 0; else count := count + 1; end if ; END PROCESS; END arc; --- Kết quả mụ phỏng:

Hỡnh 9.22. Kết quả mụ phỏng tạo súng theo phương phỏp truyền thống

Một phần của tài liệu 221640 (Trang 133 - 135)