OSTİM OSB · Ankara  |  KÜ Teknopark · Kırıkkale LinkedIn TR | EN

VHDL’de Modül Tasarımı

VHDL’de Modül Tasarımı

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.

← Tüm yazılar Paylaş: LinkedIn
Devamı

Diğer Yazılar