VHDL diliyle cocktail sort algoritması ve simüle etme(Vivado)

Başlatan OnePeso, 22 Mayıs 2021, 15:07:52

OnePeso

İyi günler, bilgisayar mühendisliği son sınıf öğrencisiyim. Vivado yazılımı üzerinden VHDL diliyle cocktail sort algoritması tasarımını yaparak simülasyon ve uygulamanın çalıştırılması gerekiyor. Programın doğruluğunun kontrolü için Testbench de gerekli. Input ve Output dizilerinin, veri tipi ve ve dizi uzunluğunu kendimiz belirleyebiliyoruz.

Aldığım bir ders için verilen bir ödev ama VHDL dili ve Vivado programı ile ilk defa çalıştığım için beni çok zorluyor genel olarak mantığını kavrayamadım. Kendim uğraştım ama işin içinden bir türlü çıkamadım.

Üzerinde uğraştığım örnek kod:
----------------------------------------------------------------------------------
library ieee;
use 
ieee.std_logic_1164.all;
use 
ieee.numeric_std.all;

package package_name is
	
type t_vector is array (0 to 5of integer;
end package_name;

use 
work.package_name.all;
library ieee;
use 
ieee.std_logic_1164.all;
use 
ieee.numeric_std.all;

entity CocktailSort_ent is
port
(
	
clkin std_logic;
        
input_arrayin t_vector;
	
output_arrayout t_vector
);
end CocktailSort_ent

architecture CocktailSort_beh of CocktailSort_ent is
signal swapped 
boolean := true;
signal start integer := 0;
signal temp integer range 0 to 50;
signal son integer := 6;       

signal a_array t_vector;
begin 
    process
(clk)             
    
begin
        
if (clk '1' and clk'event) then
        a_array <= input_array;
        while swapped = true loop
            for i in 0 to 3 loop
                if a_array(i + 1) > a_array(i + 2) then
                temp <= a_array(i + 1);
                a_array(i + 1) <= a_array(i + 2);
                a_array(i + 2) <= temp;
                swapped <= true;
                end if;
            end loop;              
        if (swapped = false) then
            exit;
        end if;               
                swapped <= false;               
                son <= son - 1;              
                for i in 3 downto 0 loop
                    if a_array(i + 1) > a_array(i + 2) then
                    temp <= a_array(i + 1);
                    a_array(i + 1) <= a_array(i + 2);
                    a_array(i + 2) <= temp;
                    swapped <= true;              
                    end if;
                end loop;               
                start <= start + 1;                       
        end loop; 
        end if;       
        output_array <= a_array;  
    end process;        
end CocktailSort_beh;
Çok hatalı olduğunu biliyorum ama ilerisine gidemiyorum tıkandım, yardımcı olabilirseniz çok sevinirim.

devrecii

Benim burada gördüğüm tüm arrayı devreye sokmamıssın, bir interger ile arrayrı saydırman gerekir , hep 0 ile 3 arasını kontol etmişsin bunun için for döngüsüne gerek yok ve aynı rutini iki defa yazmaya da gerek yok.

start <= start + 1;  son <= son - 1;   mesela sisteme bunları sokmamıssın bunlar  adresleme mi yapıyor. 

OnePeso

VHDL mantığını tam anlayamadığım için algoritmanın c# halini anladığım kadarı ile çevirerek entegre etmeye çalıştım, bundan kaynaklı kod kısmım yanlış. Dediğiniz kısımda adresleme yapma amacı ile kullanmadım. Örnek aldığım algoritma : Algoritmam ve c# hali


Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.