Học thiết kế mạch bằng cả ngôn ngữ VHDL và Verilog thông qua ví dụ thiết kế một hệ thống an toàn số.
Chúng ta có thể thiết kế một hệ thống an toàn số đơn giản bằng cách sử dụng các mạch tổ hợp. Giả sử rằng hệ thống có mật khẩu được xác định trước gồm bốn bit. Chúng ta sẽ sử dụng bốn thiết bị chuyển mạch làm đầu vào cho hệ thống. Nếu đầu vào khớp với mật khẩu được đặt trước, thì đầu ra đầu tiên sẽ có mức logic 1. Nếu không, đầu ra thứ hai sẽ có mức logic 1.
Chúng ta có thể thực hiện mạch tổ hợp tương ứng bằng cách sử dụng cổng XOR và theo sau là cổng NOT cho mỗi bit được kiểm tra. Do đó, nếu bit đầu vào khớp với bit mật khẩu tương ứng, thì cổng XOR theo sau NOT sẽ cho mức logic 1. Các lối ra của cổng XOR theo sau NOT được đưa tới một bộ AND bốn lối vào để tạo ra đầu ra thứ nhất. Như vậy, nếu tất cả các bit đầu vào khớp với các bit mật khẩu được xác định trước theo cách này, đầu ra đầu tiên sẽ có mức logic 1 và đầu ra thứ hai sẽ có mức logic 0. Đầu ra thứ hai đơn giản sẽ là nghịch đảo của đầu ra thứ nhất.
Để thực hiện mạch tổ hợp cho thiết kế, chúng ta gán các biến nhị phân s0, s1, s2 và s3 làm đầu vào. Mật khẩu được xác định trước có thể được biểu diễn dưới dạng hằng số p [0],…, p [3]. Định nghĩa đầu ra thứ nhất và thứ hai là các biến nhị phân l0 và l1 tương ứng. Sơ đồ mạch tương ứng sẽ như trong Hình 5‑2.
Bảng 5‑3 và Bảng 5‑4 miêu tả cho cùng mạch trong Hình 5‑2 lần lượt bằng Verilog và VHDL.
Hình 5‑2. Sơ đồ mạch hệ thống an toàn số.
Bảng 5‑3. Miêu tả bằng Verilog cho mạch hệ thống an toàn số
1
2 3 4 5 6 7 |
module safe_System (l,s);
input [3:0] s; output [1:0] l; parameter p = 4’b0101; assign l[0] = ~(s[0]^p[0]) & ~(s[1]^p[1]) & ~(s[2]^p[2]) & ~(s[3]^p[3]); assign l[1] = ~l[0]; endmodule |
Bảng 5‑4. Miêu tả bằng VHDL cho mạch hệ thống an toàn số
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Library ieee;
Use ieee.std_logic_1164.all; Entity safe_System is Port (s: in std_logic_vector (3 downto 0); l: out std_logic_vector(1 downto 0) ); End safe_System; Architecture dataflow_model of safe_System is Constant p : std_logic_vector (0 to 3) := “0101”; Signal t: std_logic; Begin t <= not (s(0) xor p(0)) and not (s(1) xor p(1)) and not (s(2) xor p(2)) and not (s(3) xor p(3)); l(0) <= t; l(1) <= not t; End dataflow_model; |