Bugünkü blog yazımızda, VHDL (Very High-Speed Integrated Circuit Hardware Description Language) ile modül tasarımının temellerine değineceğiz. VHDL, FPGA ve ASIC tasarımlarında yaygın olarak kullanılan güçlü bir donanım tanımlama dilidir. Bu yazımızda, VHDL’de modül tasarımı için üç ana modelleme yöntemini inceleyeceğiz: Yapısal Modelleme, Davranışsal Modelleme ve Veri Akış Modelleme. Her bir modelleme yöntemini açıklayarak, örneklerle destekleyeceğiz.
Yapısal Modelleme
Yapısal modelleme, bir tasarımın alt modüllerinin birbirleriyle nasıl bağlandığını tanımlar. Bu modelleme türü, daha büyük bir sistemin bileşenlerini ve bu bileşenlerin birbirleriyle olan bağlantılarını belirlemek için kullanılır. Bu yaklaşım, tasarımın hiyerarşik bir şekilde yapılandırılmasını sağlar.
Yapısal Modelleme Örneği
Bir 4-bit tam toplayıcı tasarımını ele alalım. Bu tasarım, dört adet 1-bit tam toplayıcı modülünden oluşur. Her bir 1-bit tam toplayıcı, iki giriş ve bir çıkış ile birbirine bağlanır. Aşağıda bu yapısal modellemenin VHDL kodu verilmiştir:
library ieee;
use ieee.std_logic_1164.all;
entity fulladder_4bit is
port (
a : in std_logic_vector(3 downto 0);
b : in std_logic_vector(3 downto 0);
cin : in std_logic;
sum : out std_logic_vector(3 downto 0);
cout: out std_logic
);
end entity fulladder_4bit;
architecture structural of fulladder_4bit is
component fulladder_1bit
port (
a : in std_logic;
b : in std_logic;
cin : in std_logic;
sum : out std_logic;
cout : out std_logic
);
end component;
signal c : std_logic_vector(3 downto 0);
begin
fa0: fulladder_1bit port map (a(0), b(0), cin, sum(0), c(0));
fa1: fulladder_1bit port map (a(1), b(1), c(0), sum(1), c(1));
fa2: fulladder_1bit port map (a(2), b(2), c(1), sum(2), c(2));
fa3: fulladder_1bit port map (a(3), b(3), c(2), sum(3), cout);
end architecture structural;
Yazılı olmayan kural: entity ve architecture isimleri küçük harflerle yazılmalıdır. Sinyal ve variable isimleri de küçük harflerle yazılmalıdır. Constant ve jenerik sabitler büyük harflerle yazılmalıdır.
Davranışsal Modelleme
Davranışsal modelleme, bir sistemin içsel davranışını ve nasıl çalıştığını tanımlar. Bu modelleme türü, girişlerin nasıl işlendiğini ve çıkışların nasıl üretildiğini belirtir. Davranışsal modelleme, algoritmik seviyede tasarım yapmak için kullanılır.
Davranışsal Modelleme Örneği
Bir 4-bit sayaç tasarımını ele alalım. Bu sayaç, her saat darbesinde bir artar ve çıkışında güncel sayacı gösterir. Aşağıda bu davranışsal modellemenin VHDL kodu verilmiştir:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter_4bit is
port (
clk : in std_logic;
rst : in std_logic;
q : out std_logic_vector(3 downto 0)
);
end entity counter_4bit;
architecture behavioral of counter_4bit is
signal count : std_logic_vector(3 downto 0) := "0000";
begin
process(clk, rst)
begin
if rst = '1' then
count <= "0000";
elsif rising_edge(clk) then
count <= count + 1;
end if;
end process;
q <= count;
end architecture behavioral;
Yazılı olmayan kural: Reset sinyali “rst” veya “rstn” olarak belirtilmelidir. Clock sinyali “clk” olarak belirtilmelidir. Kodun düzenli gözükmesi için hizalamalara dikkat edilmelidir. Kodda “numeric” veya “arith” kütüphanelerinden sadece biri kullanılmalıdır.
Davranışsal Modelleme
Davranışsal modelleme, bir sistemin içsel davranışını ve nasıl çalıştığını tanımlar. Bu modelleme türü, girişlerin nasıl işlendiğini ve çıkışların nasıl üretildiğini belirtir. Davranışsal modelleme, algoritmik seviyede tasarım yapmak için kullanılır.
Davranışsal Modelleme Örneği
Bir 4-bit sayaç tasarımını ele alalım. Bu sayaç, her saat darbesinde bir artar ve çıkışında güncel sayacı gösterir. Aşağıda bu davranışsal modellemenin VHDL kodu verilmiştir:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter_4bit is
port (
clk : in std_logic;
rst : in std_logic;
q : out std_logic_vector(3 downto 0)
);
end entity counter_4bit;
architecture behavioral of counter_4bit is
signal count : std_logic_vector(3 downto 0) := "0000";
begin
process(clk, rst)
begin
if rst = '1' then
count <= "0000";
elsif rising_edge(clk) then
count <= count + 1;
end if;
end process;
q <= count;
end architecture behavioral;
Yazılı olmayan kural: Reset sinyali “rst” veya “rstn” olarak belirtilmelidir. Clock sinyali “clk” olarak belirtilmelidir. Kodun düzenli gözükmesi için hizalamalara dikkat edilmelidir. Kodda “numeric” veya “arith” kütüphanelerinden sadece biri kullanılmalıdır.
Veri Akış Modelleme
Veri akış modelleme, veri yolunun nasıl aktığını ve bu verilerin nasıl işlendiğini tanımlar. Bu modelleme türü, genellikle paralel işlemleri ve zamanlama gereksinimlerini belirlemek için kullanılır.
Veri Akış Modelleme Örneği
Bir 4-bit toplayıcıyı veri akış modelleme ile gerçekleştirelim. Bu toplayıcı, iki 4-bit giriş ve bir taşıma girişi alır ve 4-bit bir toplam ve bir taşıma çıkışı üretir. Aşağıda bu veri akış modellemenin VHDL kodu verilmiştir:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity adder_4bit is
port (
a : in std_logic_vector(3 downto 0);
b : in std_logic_vector(3 downto 0);
cin : in std_logic;
sum : out std_logic_vector(3 downto 0);
cout: out std_logic
);
end entity adder_4bit;
architecture dataflow of adder_4bit is
begin
process(a, b, cin)
begin
variable temp : std_logic_vector(4 downto 0);
temp := ("0" & a) + ("0" & b) + cin;
sum <= temp(3 downto 0);
cout <= temp(4);
end process;
end architecture dataflow;
Yazılı olmayan kural: “std_logic_vector” tipli değişkenler “downto” ifadesi ile tanımlanacaktır. Yorumlar Türkçe veya İngilizce olabilir. Kodun düzenli gözükmesi için hizalamalara dikkat edilmelidir.
Bu yazımızda, VHDL’de modül tasarımının üç ana modelleme yöntemini inceledik: Yapısal Modelleme, Davranışsal Modelleme ve Veri Akış Modelleme. Her bir modelleme türünün farklı avantajları ve kullanım alanları vardır. Bu yöntemleri kullanarak, karmaşık donanım tasarımlarını daha etkili ve verimli bir şekilde gerçekleştirebilirsiniz.
Bir sonraki yazımızda, VHDL’de daha ileri düzey konuları ele alacağız. Takipte kalın!
Bu yazı ilk olarak 6 Ağustos 2024 tarihinde LinkedIn üzerinde yayımlanmıştır.
