Bộ đếm nhị phân thuận nghịch 4 bit

Một phần của tài liệu Nghiên cứu ứng dụng CPLD9500 thiết kế modul điều khiển vị trí (Trang 92)

H: High level L: Low level X: Don't care

Bảng 4.2: Bảng trạng thái của bộ đếm nhị phân thuận nghịch 4 bit. Input Outp ut CLEAR LOAD CE UP CLK Q3,Q2,Q1,Q0 Operation H X X X X 0,0,0,0 Counter clear L H X X D3,D2,D1,D0 Counter preset L L L X Q = Q Count stop L L H H Q = Q+1 Count up L L H L Q = Q-1 Count down

- Ch−ơng trình điều khiển:

********************************************************************** library ieee; -- Library declaration

use ieeẹstd_logic_1164.all; use ieeẹstd_logic_unsigned.all; entity UD_COUNTER1 is

port ( CLK,CLEAR,LOAD,CE,UP : in std_logic; -- INPUT and OUTPUT declaration

Q : out std_logic_vector(3 downto 0));

attribute pin_assign : string; -- Pin assign attribute pin_assign of CLK : signal is "1";

attribute pin_assign of CLEAR : signal is "2"; attribute pin_assign of LOAD : signal is "3"; attribute pin_assign of CE : signal is "4"; attribute pin_assign of UP : signal is "8";

attribute pin_assign of DIN:signal is "38,37,36,35"; attribute pin_assign of Q : signal is "14,13,12,11"; end UD_COUNTER1;

architecture UD_COUNTER_ARCH of UD_COUNTER1 is -- Internal counter signal

signal Q_IN : std_logic_vector(3 downto 0) begin

Q <= Q_IN; -- Set output process( CLEAR, CLK, LOAD, CE, UP ) begin if CLEAR='1' then -- CLEAR = ON ?

Q_IN <= "0000"; -- Yes. Counter clear elsif CLK='1' and CLK'event then -- Clock in ? if LOAD='1' the -- Yes. LOAD = ON ? Q_IN <= DIN; -- Set Input to Output else -- LOAD = OFF

H : High level L : Low level X : Don't care

if UP='1' th -- Yes. Up count ?

Q_IN <= Q_IN + '1'; -- Yes. Count-up else -- Not count-up Q_IN <= Q_IN - '1'; -- Count-down end if;

end if; -- Not CE = 1 end if; end if; end process; end UD_COUNTER_ARCH; ************************************************************ 4.5.2. Bộ đếm nhị phân 5 bit.

Bảng 4.3: Bảng trạng thái bộ đếm nhị phân 5 bit.

Input Output CLEA R CE CLK Q2,Q1,Q0 Operation L X X 0,0,0 Counter clear H L Q = Q Count stop

H H

Q = Q+1

Count up

- Ch−ơng trình điều khiển:

********************************************************** library ieee; -- Defines std_logic types use ieeẹstd_logic_1164.all;

use ieeẹstd_logic_unsigned.all; entity Counter5 is

port ( CLK,CLEAR,CE : in std_logic; -- Defines ports

Q5 : out std_logic_vector(2 downto 0));

attribute pin_assign : string; -- Pin Assign attribute pin_assign of CE : signal is "1";

attribute pin_assign of Q5 : signal is "13,12,11"; attribute bufg: string;

attribute bufg of CLK : signal is "CLK"; attribute bufg of CLEAR : signal is "SR"; end Counter5;

architecture Counter5_ARCH of Counter5 is

signal Q5_IN : std_logic_vector(2 downto 0); - Defines internal signals

begin

Q5 <= Q5_IN; -- Set output process( CLEAR, CLK, CE ) begin

if CLEAR='0' then -- Clear counter ?

Q5_IN <= "000"; - Yes. Clear counter

elsif CLK='1' and CLK'event then

-- Clock rising edge ?

if CE='1' then -- Yes. Count Enable ? if Q5_IN=4 then -- Yes. Count = 4 ? Q5_IN <= "000"; -- Yes. Clear counter else -- No

Q5_IN <= Q5_IN + '1'; -- Count-up end if;

end if; b -- Count Disable(Stop) end if; end process; end Counter5_ARCH; ********************************************************************* 4.5.3. Bộ giải mã 4-16. Bảng 4.3: Bảng trạng thái bộ giải mN 4-16. Input Output D C B A Q15 - Q0

0 0 0 0 0000000000000001 0 0 0 1 0000000000000010 0 0 1 0 0000000000000100 0 0 1 1 0000000000001000 0 1 0 0 0000000000010000 0 1 0 1 0000000000100000 0 1 1 0 0000000001000000 0 1 1 1 0000000010000000 1 0 0 0 0000000100000000 1 0 0 1 0000001000000000 1 0 1 0 0000010000000000 1 0 1 1 0000100000000000 1 1 0 0 0001000000000000 1 1 0 1 0010000000000000 1 1 1 0 0100000000000000 1 1 1 1 1000000000000000

- Ch−ơng trình điều khiển:

*********************************************************************

library ieee; -- Defines std_logic types use ieeẹstd_logic_1164.all;

entity Decoder2 is

ort ( A, B, C, D : in std_logic; -- Defines ports Q : out std_logic_vector(15 downto 0));

end Decoder2;

architecture Decoder2_arch of Decoder2 is

Signal IN_DATA : std_logic_vector(3 downto 0); -- Defines internal signals

begin

IN_DATA <= D & C & B & A; -- Binding vector

process( IN_DATA ) begin

case IN_DATA is -- Decode with input data when "0000" => Q <= "0000000000000001"; when "0001" => Q <= "0000000000000010"; when "0010" => Q <= "0000000000000100"; when "0011" => Q <= "0000000000001000"; when "0100" => Q <= "0000000000010000"; when "0101" => Q <= "0000000000100000"; when "0110" => Q <= "0000000001000000"; when "0111" => Q <= "0000000010000000"; when "1000" => Q <= "0000000100000000"; when "1001" => Q <= "0000001000000000"; when "1010" => Q <= "0000010000000000"; when "1011" => Q <= "0000100000000000"; when "1100" => Q <= "0001000000000000"; when "1101" => Q <= "0010000000000000"; when "1110" => Q <= "0100000000000000";

when "1111" => Q <= "1000000000000000"; when others => Q <= "XXXXXXXXXXXXXXXX"; -- Illegal condition end case; end process; end Decoder2_arch; ********************************************************** 4.5.4. Bộ chốt 8 bit.

Bảng 4.4: Bảng trạng thái của bộ chốt 8 bit.

Input Output

CLK Q7 - Q0

Q = DIN

- Ch−ơng trình điều khiển:

library ieee; -- Defines std_logic types use ieeẹstd_logic_1164.all;

entity Latch1 is

port ( DIN : in std_logic_vector(7 downto 0); -- Defines ports

Q : out std_logic_vector(7 downto 0)); end Latch1;

architecture Latch1_arch of Latch1 is begin

process( CLK ) begin

if CLK='1' and CLK'event then -- Clock rising edge ? Q <= DIN; -- Latch data

end if;

end process; end Latch1_arch;

**********************************************************

4.5.5. Mạch ngoại vi cho đồng hồ hiển thị số.

Sau đây là mạch ngoại vi sử dụng cho đồng hồ hiện số với độ chính xác cao SR flip-flop

3-8 decoder

Bảng 4.5 Bảng trạng thái của decoder

Input Output

0 0 0 11111110 0 0 1 11111101 0 1 0 11111011 0 1 1 11110111 1 0 0 11101111 1 0 1 11011111 1 1 0 10111111 1 1 1 01111111 Bộ chia tần 1/200000

Ch−ơng trình điều khiển:

*********************************************************************

library IEEE; -- Library declaration use IEEẸSTD_LOGIC_1164.ALL;

use IEEẸSTD_LOGIC_ARITH.ALL; use IEEẸSTD_LOGIC_UNSIGNED.ALL; entity clock2 is

Port ( S,R : in std_logic_vector(1 downto 0); -- SR-FF INPUT

Q : out std_logic_vector(1 downto 0);-- SR-FF OUTPUT CLK_10M : in std_logic; -- 1/200000 counter INPUT CLK_50:out std_logic;

-- 1/200000 counter OUTPUT A,B,C:in std_logic; -- 3-8 Decoder INPUT DEC : out std_logic_vector(7 downto 0)); -- 3-8 Decoder OUTPUT

attribute pin_assign : string; -- Pin assign

attribute pin_assign of S : signal is "6,2"; attribute pin_assign of R : signal is "4,44"; attribute pin_assign of Q : signal is "42,40"; attribute pin_assign of CLK_10M : signal is "7"; attribute pin_assign of CLK_50 : signal is "39"; attribute pin_assign of A : signal is "37";

attribute pin_assign of B : signal is "35"; attribute pin_assign of C : signal is "33";

attribute pin_assign of DEC : signal is

"27,25,28,26,22,20,18,24"; end clock2;

architecture clock2_arch of clock2 is

signal SI,RI,QI,QRI : std_logic_vector(1 downto 0); -- SR-FF signals

signal Q100K : std_logic_vector(16 downto 0); -- 1/100000 counter

signal QCLK : std_logic_vector(0 downto 0); -- 1/2 counter

signal IN_DATA : std_logic_vector(2 downto 0); -- 3-8 Decoder signals

begin

-- ** SR-FF **

Q <= QI; -- Set OUTPUT QI <= S nand SI; -- Make NAND QRI <= R nand RI; -- Make NAND

SI <= QRI; -- Connect QRI and SI RI <= QI; -- Connect QI and RI -- ** 1/200000 counter **

CLK_50 <= QCLK(0); -- Set OUTPUT process( CLK_10M ) begin

if CLK_10M='1' and CLK_10M'event then -- Clock rising edge ?

if Q100K=99999 then -- Count = 100000 ?

Q100K <= "00000000000000000";-- YES. Clear counter QCLK <= QCLK + '1'; -- Set 1/200000 counter else -- Nọ Q100K <= Q100K + '1'; -- Count-up end if; end if; end process; -- ** 3-8 Decoder **

IN_DATA <= C & B & A; -- Binding vector process( IN_DATA ) begin

case IN_DATA is -- Decode with input data when "000" => DEC <= "11111110"; when "001" => DEC <= "11111101"; when "010" => DEC <= "11111011"; when "011" => DEC <= "11110111"; when "100" => DEC <= "11101111"; when "101" => DEC <= "11011111"; when "110" => DEC <= "10111111"; when "111" => DEC <= "01111111";

when others => DEC <= "XXXXXXXX";

-- Illegal condition

end case; end process; end clock2_arch;

Kết luận

Sau thời gian nghiên cứu và tìm hiểu về các thiết bị logic lập trình đ−ợc, cụ thể là thiết bị CPLD của hNng Xilinx, tôi đN đạt đ−ợc một số kết quả sau:

- Nắm đ−ợc ph−ơng pháp thiết kế mới cho các mạch logic lập trình đ−ợc. - Có kỹ năng sử dụng ngôn ngữ mô tả phần cứng HDL, cụ thể là ngôn ngữ VHDL

- Tìm hiểu đ−ợc cấu trúc, nguyên lý hoạt động của các thiết bị CPLD, sử họ CPLD XC9500 làm đối t−ợng nghiên cứu cụ thể.

- Thiết kế thành công modul điều khỉên vị trí phục vụ công tác giảng dạy tại Tr−ờng Cao đẳng Công nghiệp Hà nộị

Với những kết quả đN đạt đ−ợc trong thời gian nghiên cứu vừa qua, tôi nhận thấy mình hoàn toàn có khả năng làm chủ các thiết bị CPLD của Xilinx cũng nh− các thiết bị logic lập trình đ−ợc của các hNng khác.

Tôi xin chân thành cảm ơn:

TS .Đặng Văn Chuyết đN trực tiếp h−ớng dẫn và giúp đỡ tôi trong thời gian làm luận văn.

Trung Tâm Đào Tạo và Bồi D−ỡng Sau Đại Học - Tr−ờng Đại học Bách Khoa Hà Nộị Các thầy cô giáo trong Khoa Điện tử - Tự động hoá - Tr−ờng Cao đẳng Công Nghiệp Hà nội, đặc biệt là Thầy giáo tr−ởng khoa

ThS Phạm Xuân Khánh đN giúp đỡ tôi về mặt thời gian và thiết bị trong thời gian thực hiện đề tàị

Tài liệu tham khảo Tiếng Việt

1. Đặng Văn Chuyết (1992), Kỹ thuật điện tử số, NXB Khoa học kỹ thuật, Hà Nộị

2. Nguyễn Linh Giang (2004), Thiết kế mạch bằng máy tính, NXB thống kê, Hà Nộị

3. Tống Văn On (2004), Nguyên ký mạch tích hợp, NXB Khoa học kỹ thuật, Hà Nộị

Tiếng Anh

4. Charles H.Roth (1999), Digital Systems Design Using VHDL, Jr- The University of Texas at Austin, PWS Publising Companỵ

3. Xilinx Corp (2006), Xilinx ISE 8.1 I,

5. Douglas L.Prerry (2002), VHDL Programming by Example, McGraw Hill.

Phụ lục

Sơ đồ chân và chức năng các chân của CPLD XC 95108.

CPLD XC 95108 và CPLD XC 9572 có 84 chân tín hiệụ Bao gồm các chân I/0, GND, VCC, TDI, TDO, TMS,TCK, GCK, GSR ,..

D−ới đây là sơ đồ chân và bảng chức năng các chân của CPLD XC 95108

Bảng5.1: ý nghĩa các chân của CPLD XC95108 15PC84C

Pin number FB Macrocell Pin

number FB Macrocell 1 1 2 43 5 15 2 1 3 44 5 17 3 1 5 45 6 2 4 1 6 46 6 3 5 1 8 47 6 5 6 1 9 48 6 6 7 1 11 49 GND 8 GND 50 6 8 1 12 9 GCK1 51 6 9 1 14 10 GCK2 52 6 11 11 1 15 53 6 12 1 16 12 GCK3 54 6 14 13 1 17 55 6 15

14 3 2 56 6 17 15 3 3 57 4 2 16 GND 58 4 3 17 3 5 59 TDO 18 3 6 60 GND 19 3 8 61 4 5 20 3 9 62 4 6 21 3 11 63 4 8 22 VccIO 3.3V/5V 64 VccIO 3.3V/5V 23 3 12 65 4 9 24 3 14 66 4 11 25 3 15 67 4 12 26 3 16 68 4 14 27 GND 69 4 15 28 TDI 70 4 17 29 TMS 71 2 2 30 TCK 72 2 3 31 3 17 73 VccINT 5V

2 5 32 5 2 74 GSR 33 5 3 75 2 6 2 8 34 5 5 76 GTS1 2 9 35 5 6 77 GTS2 36 5 8 78 VccINT 5V 37 5 9 79 2 11 38 VccINT 5V 80 2 12 39 5 11 81 2 14 40 5 12 82 2 15 41 5 14 83 2 16 42 GND 84 2 17

Một phần của tài liệu Nghiên cứu ứng dụng CPLD9500 thiết kế modul điều khiển vị trí (Trang 92)

Tải bản đầy đủ (PDF)

(112 trang)