Ashenden The VHDL – Cookbook, Peter J.Ashedo Thiết kế mạch bằng máy tính, Nguyễn Linh Giang Thiết kế mạch số với Verilog và VHDL, Tống Văn On …... Nội dung báo cáoGiới thiệu công n
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN TỬ-VIỄN THÔNG
• Giáo viên hướng dẫn : ThS NGUYỄN VĂN PHÒNG
• Lớp sinh hoạt : 11DTLT
**********
Mô phỏng chương trình
mã hóa & giải mã bằng ngôn ngữ VHDL
Trang 3Tài liệu tham khảo:
Circuit design with VHDL , Voilnei A.Pedroni
VHDL Tutorial, Peter J Ashenden
The VHDL – Cookbook, Peter J.Ashedo
Thiết kế mạch bằng máy tính, Nguyễn Linh Giang
Thiết kế mạch số với Verilog và VHDL, Tống Văn On
…
Trang 4Nội dung báo cáo
Giới thiệu công nghệ thiết kế vi mạch bằng VHDL
1
Mô phỏng chương trình mã hóa 8 sang 3
2
3 Mô phỏng chương trình giải mã BCD led 7 đoạn
Trang 5Giới thiệu công nghệ thiết kế
mạch
1 Ứng dụng của công nghệ thiết kế mạch bằng VHDL:
*/ Hai ứng dụng chính và trực tiếp của VHDL:
•Ứ/d trong các th/bị logic PLD-FPGA
•Ư/d trong ASICs
*/ Khi lập trình chỉ cần viết mã VHDL 1 lần & có thể áp dụng cho các thiết bị khác nhau (Ex: Altera, Xilinx, Atmel…) hoặc có thể chế tạo chip ASIC
*/ Hiện nay, nhiều sản phẩm thương mại phức tạp (Ex: VĐK) thiết kế dựa trên VHDL
Trang 6Giới thiệu công nghệ thiết kế
mạch
2 Quy trình thiết kế mạch bằng VHDL:
Việc chế tạo gồm 3 giai đoạn chính:
Giai đoạn 1: Viết mã VHDL
(lưu file *.vhd và có tên cùng
tên thực thể, được mô tả ở tầng
chuyển đổi thanh ghi
Giai đoạn 2: Gồm biên dịch, tối
ưu hóa về tốc độ và phạm vi,
kiểm lỗi
Giai đoạn 3: Ghép nối đóng gói
phần mềm, sắp xếp vật lý cho
chip PLD/FPGA hoặc tạo mặt
nạ cho ASIC.
Trang 7Giới thiệu công nghệ thiết kế
mạch
3 Cấu trúc mã cơ bản của ngôn ngữ VHDL:
Một đoạn Code chuẩn của VHDL gồm tối thiểu 3 mục:
Khai báo LIBRARY: chứa d/sách tất cả các thư viện
được dùng để thiết kế Ex: ieee, std, work
Khai báo ENTITY: mô tả các chân vào ra (I/O pins)
Khai báo ARCHITECTURE: chứa mã VHDL, mô tả
quá trình hoạt động của mạch
Trang 8Mô phỏng chương trình
Trang 9Mô phỏng chương trình
1/ Mô phỏng chương trình mã hóa 8 ngõ vào sang 3 ngõ ra:
Trang 10Mô phỏng chương trình
1/ Mô phỏng chương trình mã hóa 8 ngõ vào sang 3 ngõ ra:
Code chương trình:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
-ENTITY mahoa_8_3 IS
PORT (
x: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
y: OUT STD_LOGIC_VECTOR (2 DOWNTO 0)
);
END mahoa_8_3;
-
-ARCHITECTURE mahoa1 OF mahoa_8_3 IS BEGIN
y <= "000" WHEN x="00000001" ELSE
"001" WHEN x="00000010" ELSE
"010" WHEN x="00000100" ELSE
"011" WHEN x="00001000" ELSE
"100" WHEN x="00010000" ELSE
"101" WHEN x="00100000" ELSE
"110" WHEN x="01000000" ELSE
"111" WHEN x="10000000" ELSE
"ZZZ";
END mahoa1;
Trang 11Mô phỏng chương trình
1/ Mô phỏng chương trình mã hóa 8 ngõ vào sang 3 ngõ ra:
Kết quả mô phỏng:
VD: Con trỏ ở vị trí 100.0ns
Input (1,0,0,0,0,0,0,0)
Output (0,0,0)
Trang 12Mô phỏng chương trình
2/ Mô phỏng chương trình giải mã BCD led 7 đoạn:
Trang 13Mô phỏng chương trình
2/ Mô phỏng chương trình giải mã BCD led 7 đoạn:
Code 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 decode_BCD_7DOAN IS
PORT (i : IN std_logic_vector (3 DOWNTO 0);
d : OUT std_logic_vector (6 DOWNTO 0);
s : IN std_logic);
END decode_BCD_7DOAN;
-ARCHITECTURE Behavioral OF decode_BCD_7DOAN IS
BEGIN
PROCESS (i,s)
VARIABLE Q : std_logic_vector (7 DOWNTO 0);
BEGIN
IF s='0' THEN
WHEN "0110" => Q:= "00000010"; -so 6 WHEN "0111" => Q:= "01111000"; -so 7 WHEN "1000" => Q:= "00000000"; -so 8 WHEN "1001" => Q:= "00010000"; -so 9 WHEN OTHERS => NULL;
END CASE;
ELSE CASE i IS WHEN "0000" => Q:= "00111111"; -so 0 WHEN "0001" => Q:= "00000110"; -so 1 WHEN "0010" => Q:= "01011011"; -so 2 WHEN "0011" => Q:= "01001111"; -so 3 WHEN "0100" => Q:= "01100110"; -so 4 WHEN "0101" => Q:= "01101101"; -so 5 WHEN "0110" => Q:= "01111101"; -so 6 WHEN "0111" => Q:= "00000111"; -so 7 WHEN "1000" => Q:= "01111111"; -so 8
Trang 14Mô phỏng chương trình
2/ Mô phỏng chương trình giải mã BCD led 7 đoạn:
Kết quả mô phỏng:
Trường hợp Kathode chung
Chọn mức tích cực ở ngõ ra là mức logic 1
VD: Trường hợp con trỏ ở vị trí 107.9ns
Input (0,0,1,0) – Output (1,1,0,1,1,0,1) số 2