GIÁO TRÌNH KỸ THUẬT PLD & ASIC - CHƯƠNG 4 CÁC FLIP FLOP, THANH GHI, BỘ ĐẾM TRONG VHDL
lượt xem 118
download
Trong phần này sẽ thiết kế các mạch flip flop, thanh ghi và mạch đếm dùng ngôn ngữ VHDL và sử dụng thiết bị lập trình. Các mạch flip flop bao gồm flip flop JK, flip flop T, flip flop D. Thanh ghi dịch bao gồm thanh ghi dịch nối tiếp sang nối tiếp, nối tiếp sang song song, mạch đếm vòng, mạch đếm JohnSon. Mạch đếm nhị phân, mạch đếm lên đếm xuống, mạch đếm BCD, mạch đếm đặt trước số đếm, mạch đếm có giải mã sang led 7 đoạn, mạch đếm giây, đếm phút giây,… ...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: GIÁO TRÌNH KỸ THUẬT PLD & ASIC - CHƯƠNG 4 CÁC FLIP FLOP, THANH GHI, BỘ ĐẾM TRONG VHDL
- Chöông 4 CAÙC FLIP FLOP, THANH GHI, BOÄ ÑEÁM TRONG VHDL GIÔÙI THIEÄU THIEÁT KEÁ CAÙC LOAÏI FLIP FLOP THIEÁT KEÁ FLIP FLOP JK THIEÁT KEÁ FLIP FLOP D COÙ ENABLE THIEÁT KEÁ THANH GHI DÒCH THIEÁT KEÁ THANH GHI DÒCH 4 BIT THIEÁT KEÁ THANH GHI DÒCH 8 BIT THIEÁT KEÁ MAÏCH ÑEÁM JOHNSON 8 BIT THIEÁT KEÁ MAÏCH ÑEÁM VOØNG 8 BIT THIEÁT KEÁ MAÏCH ÑIEÀU KHIEÅN 8 LED SAÙNG DAÀN – TAÉT DAÀN THIEÁT KEÁ MAÏCH ÑEÁM THIEÁT KEÁ MAÏCH ÑEÁM NHÒ PHAÂN 4 BIT – ÑEÁM LEÂN THIEÁT KEÁ MAÏCH BCD – ÑEÁM LEÂN THIEÁT KEÁ MAÏCH ÑEÁM BCD VAØ GIAÛI MAÕ HIEÅN THÒ LED 7 ÑOAÏN THIEÁT KEÁ MAÏCH ÑEÁM BCD TÖØ 00 ÑEÁN 59 – HIEÅN THÒ TREÂN 2 LED 7 ÑOAÏN THIEÁT KEÁ MAÏCH ÑEÁM BCD TÖØ 000 ÑEÁN 999 – HIEÅN THÒ TREÂN 3 LED 7 ÑOAÏN CAÂU HOÛI OÂN TAÄP VAØ BAØI TAÄP
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Hình 4-1. Sô ñoà khoái FLIP FLIP JK. Hình 4-2. Sô ñoà khoái FLIP FLIP D coù enable. Hình 4-3. Sô ñoà khoái thanh ghi 4 bit. Hình 4-4. Sô ñoà khoái thanh ghi 4 bit, naïp song song. Hình 4-5. Sô ñoà khoái thanh ghi 8 bit. Hình 4-6. Sô ñoà khoái maïch ñeám voøng Johnson 8 bit. Hình 4-7. Sô ñoà khoái maïch ñeám voøng 8 bit. Hình 4-8. Sô ñoà khoái maïch ñieàu khieån 8 led saùng taét daàn. Hình 4-9. Sô ñoà khoái maïch ñeám nhò phaân 4 bit. Hình 4-10. Sô ñoà khoái maïch ñeám BCD. Hình 4-11. Sô ñoà khoái maïch ñeám BCD coù giaûi maõ 7 ñoaïn anode chung. Hình 4-12. Sô ñoà khoái maïch ñeám töø 00 ñeán 59 coù hieån thò. Hình 4-13. Sô ñoà khoái maïch ñeám töø 000 ñeán 999. Baûng 4-1. BTT FLIP FLIP JK. Baûng 4-2. BTT FLIP FLIP D coù enable. Baûng 4-3. BTT maïch thanh ghi dòch 4 bit. Baûng 4-4. BTT maïch thanh ghi dòch 4 bit, naïp song song. Baûng 4-5. BTT thanh ghi dòch 8 bit. Baûng 4-6. BTT maïch ñeám JOHNSON 8 bit. Baûng 4-7. BTT maïch maïch ñeám voøng 8bit. Baûng 4-8. BTT maïch ñieàu khieån 8 led saùng taét daàn. Baûng 4-9. BTT maïch ñeám nhò phaân 4 bit. Baûng 4-10. BTT maïch ñeám BCD. Baûng 4-11. BTT maïch ñeám BCD coù giaûi maõ 7 ñoaïn. 142 Kyõ thuaät PLD vaø ASIC
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù I. GIÔÙI THIEÄU: Trong phaàn naøy seõ thieát keá caùc maïch flip flop, thanh ghi vaø maïch ñeám duøng ngoân ngöõ VHDL vaø söû duïng thieát bò laäp trình. Caùc maïch flip flop bao goàm flip flop JK, flip flop T, flip flop D. Thanh ghi dòch bao goàm thanh ghi dòch noái tieáp sang noái tieáp, noái tieáp sang song song, maïch ñeám voøng, maïch ñeám JohnSon. Maïch ñeám nhò phaân, maïch ñeám leân ñeám xuoáng, maïch ñeám BCD, maïch ñeám ñaët tröôùc soá ñeám, maïch ñeám coù giaûi maõ sang led 7 ñoaïn, maïch ñeám giaây, ñeám phuùt giaây,… Caùc thieát bò laäp trình coù theå duøng CPLD XC9572, XC 95144, Coolrunner XC2C256. II. THIEÁT KEÁ CAÙC LOAÏI FLIP FLOP 1. THIEÁT KEÁ FLIP FLOP JK: Baøi 4-1: Thieát keá flip flop JK goàm coù caùc ngoõ vaøo J, K, CLK, PRE, CLR vaø caùc ngoõ ra goàm Q vaø Q : Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-1. Sô ñoà khoái FF JK. Böôùc 2: Baûng traïng thaùi: NGOÕ VAØO NGOÕ RA Pre CLR CLK J K Q QD 0 0 X X X 1 1 0 1 X X X 1 0 1 0 X X X 0 1 1 1 0 X X Q0 QD 0 1 1 0 0 Q0 QD 0 ↓ 1 1 0 1 0 1 ↓ 1 1 1 0 1 0 ↓ 1 1 1 1 NOT Q0 NOT QD0 ↓ Baûng 4-1. BTT FF JK. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; 143 Kyõ thuaät PLD vaø ASIC
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ffjk is Port ( J : in STD_LOGIC; K : in STD_LOGIC; CLK : in STD_LOGIC; PRE : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC; QD : out STD_LOGIC); end ffjk; architecture Behav_ffjk of ffjk is SIGNAL QT,QDT: STD_LOGIC; SIGNAL JK : STD_LOGIC_VECTOR(1 DOWNTO 0); begin PROCESS(J,K,CLK,PRE,CLR) BEGIN IF (PRE='0') AND (CLR='0') THEN QT
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Baøi 4-2: Thieát keá flip flop D goàm coù caùc ngoõ vaøo D, CLK, Enable vaø ngoõ ra goàm Q vaø Q : Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-2. Sô ñoà khoái FF D coù enable. Böôùc 2: Baûng traïng thaùi: NGOÕ VAØO NGOÕ RA E clk D Q QD 0 x x Q0 QD0 1 0 0 Q0 QD0 1↓00 1 1↓ 1 1 0 Baûng 4-2. BTT FF D coù enable. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ff_de is Port ( D : in STD_LOGIC; E : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC; QD : out STD_LOGIC); end ff_de; architecture Behavioral of ff_de is SIGNAL QT: STD_LOGIC; begin PROCESS(D,E,CLK) BEGIN IF E='1' THEN IF CLK='0' AND CLK'EVENT THEN QT
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Q
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù begin if CLR ='0' then QT :="0000"; elsif CLK='1' and CLK'event then QT(3 downto 0) := QT(2 downto 0) & D; end if; Q
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù P : in STD_LOGIC_VECTOR (3 downto 0); Q : out STD_LOGIC_VECTOR (3 downto 0); PL : in STD_LOGIC); end tghi4b_ntss; architecture Behavioral of tghi4b_ntss is begin PROCESS(D,CLR,CLK,P,LOAD) VARIABLE QT: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR='0' THEN QT:= "0000"; ELSIF PL='0' THEN QT:= P; ELSIF CLK='1' AND CLK'EVENT THEN QT:= QT(2 DOWNTO 0) & D; END IF; Q
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity TGHI8BIT is Port ( CLK : in STD_LOGIC; CLR,D : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0)); end TGHI8BIT; architecture Behavioral of TGHI8BIT is SIGNAL QT: STD_LOGIC_VECTOR (7 downto 0); begin PROCESS (CLK,CLR) BEGIN IF CLR = '0' THEN QT
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù NGOÕ VAØO NGOÕ RA clr clk Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 0 X 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 ↑ 1 0 0 0 0 0 0 1 1 ↑ 1 0 0 0 0 0 1 1 1 ↑ 1 0 0 0 0 1 1 1 1 ↑ 1 0 0 0 1 1 1 1 1 ↑ 1 0 0 1 1 1 1 1 1 ↑ 1 0 1 1 1 1 1 1 1 ↑ 1 1 1 1 1 1 1 1 1 ↑ 1 1 1 1 1 1 1 1 0 ↑ 1 1 1 1 1 1 1 0 0 ↑ 1 1 1 1 1 1 0 0 0 ↑ 1 1 1 1 1 0 0 0 0 ↑ 1 1 1 1 0 0 0 0 0 ↑ 1 1 1 0 0 0 0 0 0 ↑ 1 1 0 0 0 0 0 0 0 ↑ 1 0 0 0 0 0 0 0 0 ↑ Baûng 4-6. BTT maïch ñeám JOHNSON 8 bit. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity johnson8bit is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0)); end johnson8bit; architecture Behavioral of johnson8bit is SIGNAL QT: STD_LOGIC_VECTOR (7 downto 0); SIGNAL D : STD_LOGIC; begin PROCESS (CLK,CLR) BEGIN IF CLR = '1' THEN QT
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù QT
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(7 downto 0)); end ringcounter8; architecture Behavioral of ringcounter8 is SIGNAL QT: STD_LOGIC_VECTOR(7 downto 0):=”00000001”; begin PROCESS (CLK,CLR) BEGIN IF CLR = '0' THEN QT
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù END PROCESS; end Behavioral; 5. THIEÁT KEÁ MAÏCH ÑIEÀU KHIEÅN 8 LED SAÙNG DAÀN – TAÉT DAÀN: Baøi 4-8: Thieát keá maïch ñieàu khieån 8 led saùng daàn, taét daàn töø traùi sang phaûi vaø töø phaûi sang traùi theo xung clock. Böôùc 1: Veõ sô ñoà khoái cuûa maïch: Hình 4-8. Sô ñoà khoái maïch ñieàu khieån 8 led saùng taét daàn. Böôùc 2: Laäp baûng traïng thaùi: NGOÕ VAØO NGOÕ RA clr clk Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 THAÄP PHAÂN 0 X 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 ↑ 1 0 0 0 0 0 0 1 1 2 ↑ 1 0 0 0 0 0 1 1 1 3 ↑ 1 0 0 0 0 1 1 1 1 4 ↑ 1 0 0 0 1 1 1 1 1 5 ↑ 1 0 0 1 1 1 1 1 1 6 ↑ 1 0 1 1 1 1 1 1 1 7 ↑ 1 1 1 1 1 1 1 1 1 8 ↑ 1 1 1 1 1 1 1 1 0 9 ↑ 1 1 1 1 1 1 1 0 0 10 ↑ 1 1 1 1 1 1 0 0 0 11 ↑ 1 1 1 1 1 0 0 0 0 12 ↑ 1 1 1 1 0 0 0 0 0 13 ↑ 1 1 1 0 0 0 0 0 0 14 ↑ 1 1 0 0 0 0 0 0 0 15 ↑ 1 0 0 0 0 0 0 0 0 16 ↑ 1 1 0 0 0 0 0 0 0 17 ↑ 1 1 1 0 0 0 0 0 0 18 ↑ 1 1 1 1 0 0 0 0 0 19 ↑ 1 1 1 1 1 0 0 0 0 20 ↑ 1 1 1 1 1 1 0 0 0 21 ↑ 1 1 1 1 1 1 1 0 0 22 ↑ 1 1 1 1 1 1 1 1 0 23 ↑ 1 1 1 1 1 1 1 1 1 24 ↑ 1 0 1 1 1 1 1 1 1 25 ↑ 1 0 0 1 1 1 1 1 1 26 ↑ 153 Kyõ thuaät PLD vaø ASIC
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 1 0 0 0 1 1 1 1 1 27 ↑ 1 0 0 0 0 1 1 1 1 28 ↑ 1 0 0 0 0 0 1 1 1 29 ↑ 1 0 0 0 0 0 0 1 1 30 ↑ 1 0 0 0 0 0 0 0 1 31 ↑ 1 0 0 0 0 0 0 0 0 32 ↑ Baûng 4-8. BTT maïch ñieàu khieån 8 led saùng taét daàn. Caùc traïng thaùi saùng daàn taét daàn töø phaûi sang traùi caàn 16 xung clock vaø traïng thaùi ngöôïc laïi cuõng caàn 16 xung clock. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity sangtatdan_tppt is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (7 downto 0)); end sangtatdan_tppt; architecture Behavioral of sangtatdan_tppt is SIGNAL QT: STD_LOGIC_VECTOR (7 downto 0); begin PROCESS(CLK,CLR) VARIABLE DEM: INTEGER RANGE 0 TO 32; BEGIN IF CLR ='1' THEN QT
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù Q
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù PROCESS(CLK,CLR) VARIABLE QT: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR ='0' THEN QT:= "0000"; ELSIF CLK='1' AND CLK'EVENT THEN QT:= QT +1; END IF; Q
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù use IEEE.STD_LOGIC_UNSIGNED.ALL; entity bcdcounter is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0)); end bcdcounter; architecture Behavioral of bcdcounter is begin PROCESS(CLK,CLR) VARIABLE QT: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR ='0' THEN QT:= "0000"; ELSIF CLK='1' AND CLK'EVENT THEN QT:= QT +1; IF QT = "1010" THEN QT := “0000” ; END IF; END IF; Q
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù 1 0 1 0 0 1 0 0 21 0 0 1 0 A4 ↑ 1 0 1 1 0 0 0 0 31 0 0 1 1 B0 ↑ 1 0 0 1 1 0 0 1 41 0 1 0 0 99 ↑ 1 0 0 1 0 0 1 0 51 0 1 0 1 92 ↑ 1 0 0 0 0 0 1 0 61 0 1 1 0 82 ↑ 1 1 1 1 1 0 0 0 71 0 1 1 1 F8 ↑ 1 0 0 0 0 0 0 0 81 1 0 0 0 80 ↑ 1 0 0 1 0 0 0 0 91 1 0 0 1 90 ↑ Baûng 4-11. BTT maïch ñeám BCD coù giaûi maõ 7 ñoaïn. Böôùc 3: Vieát chöông trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity count_bcd_gma is Port ( CLR : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0); L7D : out STD_LOGIC_VECTOR (6 downto 0)); end count_bcd_gma; architecture Behavioral of count_bcd_gma is begin PROCESS (CLR,CLK) VARIABLE QTAM: STD_LOGIC_VECTOR (3 downto 0); VARIABLE YTAM: STD_LOGIC_VECTOR (6 downto 0); BEGIN IF CLR='0' THEN QTAM :="0000"; ELSIF CLK='1' AND CLK'EVENT THEN QTAM:= QTAM +1; IF QTAM = "1010" THEN QTAM:="0000"; END IF; END IF; CASE QTAM IS when "0000" => YTAM := x"C0"; -- so 0 when "0001" => YTAM := x"F9"; -- so 1 when "0010" => YTAM := x"A4"; -- so 2 when "0011" => YTAM := x"B0"; -- so 3 when "0100" => YTAM := x"99"; -- so 4 158 Kyõ thuaät PLD vaø ASIC
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù when "0101" => YTAM := x"92"; -- so 5 when "0110" => YTAM := x"82"; -- so 6 when "0111" => YTAM := x"F8"; -- so 7 when "1000" => YTAM := x"80"; -- so 8 when "1001" => YTAM := x"90"; -- so 9 when others => YTAM := x"FF"; -- tat END CASE; Q
- Chöông 4. Flip flop, thanh ghi, boä ñeám trong VHDL SPKT – Nguyeãn Ñình Phuù QB : out std_logic_vector( 7 downto 0); ma7d : out std_logic_vector( 7 downto 0)); end DEM0099; architecture Behavioral of DEM0099 is signal F: std_logic_vector(18 downto 0); signal mabl: std_logic_vector(7 downto 0); signal mabh: std_logic_vector(7 downto 0); function giai_ma(x1: in std_logic_vector(3 downto 0)) return std_logic_vector is variable z1: std_logic_vector(7 downto 0); begin case x1 is when "0000" => z1 := "11000000"; -- so 0 when "0001" => z1 := "11111001"; -- so 1 when "0010" => z1 := "10100100"; -- so 2 when "0011" => z1 := "10110000"; -- so 3 when "0100" => z1 := "10011001"; -- so 4 when "0101" => z1 := "10010010"; -- so 5 when "0110" => z1 := "10000010"; -- so 6 when "0111" => z1 := "11111000"; -- so 7 when "1000" => z1 := "10000000"; -- so 8 when "1001" => z1 := "10010000"; -- so 9 when others =>z1 := "11111111"; -- so end case; return z1; end giai_ma; begin process (CLR,CLK,F,mabl,mabh) variable bcd1: std_logic_vector(3 downto 0); variable bcd2: std_logic_vector(3 downto 0); begin 160 Kyõ thuaät PLD vaø ASIC
CÓ THỂ BẠN MUỐN DOWNLOAD
-
GIÁO TRÌNH KỸ THUẬT PLD & ASIC - CHƯƠNG 3 THIẾT KẾ MẠCH LOGIC TỔ HỢP BẰNG VHDL
11 p | 770 | 106
-
GIÁO TRÌNH KỸ THUẬT PLD & ASIC - CHƯƠNG 2 NGÔN NGỮ LẬP TRÌNH VHDL
80 p | 285 | 99
-
GIÁO TRÌNH KỸ THUẬT PLD & ASIC - CHƯƠNG 1 GIỚI THIỆU CÁC CẤU TRÚC LẬP TRÌNH ĐƯỢC
56 p | 358 | 91
-
Bài Giảng về Kỹ Thuật Số
20 p | 206 | 53
-
Giáo trình kỹ thuật số - chương 7
20 p | 177 | 47
-
Digital Electronics
128 p | 137 | 27
-
Giáo trình kỹ thuật số ( Chủ biên Võ Thanh Ân ) - Chương 7
19 p | 112 | 16
-
Viễn thông kỹ thuật số: Phần 2
203 p | 33 | 6
-
Giáo trình Vi mạch số lập trình (Nghề: Công nghệ kỹ thuật điện-điện tử - Trung cấp) - Trường Trung cấp Công nghệ và Du lịch Hà Nội
116 p | 23 | 5
-
Giáo trình Vi mạch số lập trình - Trường CĐ nghề Số 20
124 p | 6 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn