FPGA Ödevi

Başlatan Mucit23, 07 Aralık 2015, 09:40:18

Mucit23

FPGA konusunda bir ödevim var.

Okulumuzda Spartan'ın Xilinx XC3s100e FPGA kitleri var. Yanlışım yoksa budur
http://www.elektrovadi.com/BASYS2-100K-GATES,PR-556.html

Basit olarak iki 4 bitlik sayının toplanması, Farkının alınması ve tümleyeni gibi işlemleri yapmam isteniyor. Elimde bunlar dışında hiçbir bilgi yok. Hoca da yok ortada soralım.

Daha önce FPGA ile hiç uğraşmadım. VHDL dilini biraz araştırarak öğrenebilirim ama platfom konusunda bilgim yok. Muhtemelen programı VHDL ile bilgisayarımda yazıp okulda gidip deneyeceğim. Henüz kendime bir kart alamadım.

Bu FPGA lar için hangi platformu indirmem gerek. Başlangıçta proje oluşturmaya kadar bana rehberlik edecek bir kaynak var mı? Şuanda Xilinx'in sitesinde ISE Design Suite'nin windows için olanını indiriyorum.
http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/design-tools.html
Yanlış birşey yapmıyorumdur umarım. Dosya bayağı büyük. Boşa indirmeyelim.

MC_Skywalker

#1
Spartan Fpga için ise web pack yükleyeceksin. Vhdl kodunu çalışır hale getirisen bendeki basys3 kartı ile denemene tardımcı olurum

İlla spatrn şart değil ve çevre ekipmanları ben kurarımdersen Altera Cyclone IV core ve usb blaster ayarlarım

Mucit23

Hocam deneme konusu süper olurdu. Şuanda ISE suitenin inmesini bekliyorum.

Aslında bir tane FPGA kiti alacam. Öğrenmeyi istiyorum cidden. FPGA üzerinde görüntü işleme çalışmaları yapabileceğim bir kart almayı istiyorum.

MC_Skywalker

Nexsys4 DDR kartı işini görü. Onun için Vivado yu indirmen gerekli.

bluemore

Teknisyen Mustafa Beyin yanına git sana FPGA için kullanılan programı verir.5Gb gibi bir boşluk gerekmekte.

MC_Skywalker

@alicavuslu nun kitabı ile başlayabilirsin. Nexsys4 ile anlatıyor

Niyazi_SARAL

http://www.mcu-turkey.com/category/cpu-turkey-2008/

Burada onlarca çalışma var. Bilmem haberiniz var mı?
"Eğitimli insanlar topluma borçludurlar. Bir işin nasıl yapılabileceğini biliyorken bir başkasının yapamadığını görüp susmaları kendilerini yetiştiren o topluma ihanettir."  Bilgi paylaştıkça çoğalır

alicavuslu

Aşağıdaki konu altında Seyyit Yıldırım'ın güzel çalışmaları mevcut.  İşinize yarayacaktır...

https://www.picproje.org/index.php/topic,62168.0.html

Mucit23

Selamlar

ISE Design Suite'yi bilgisayarıma zar zor kurabildim. Şimdi hemen bir proje dosyası oluşturayım dedim. Ve kapısını deneyelim istedim.
Bu linkte anlatılmış

http://fpgaturk.com/fpga-verilog-ile-and-kapisi-programlama-24/

Anlatılanlara bakarak Simülasyon kısmına kadar geldim. Bende aynı şekilde çalıştırdım.


Yazdığım modül budur.
module Toplama(
    input A,
    input B,
    output Out
    );
	assign Out = A & B;

endmodule


Şimdi benim acilen giriş okuma, Butonlara bağlı işlemler yapma, Toplama çıkarma değilleme C' de kullandığım temel işlemleri öğrenmem lazım. Henüz kaynak konusunda hiç araştırmaya başlamamıştım. Niyazi bey araştırmalara yeni başladım. Yeni başlayanlar için temel işlemleri öğrenebileceğim bir kaynak arıyorum.

Sormak istediğim birkaç konu var. Simülasyon yapabiliyoruz anladığım kadarıyla. Geliştirme aşamasında örneğin herhangi bir pinden gelen bilgiye göre işlemler yaptırabilirmiyim? Sormamın sebebi Kart olmadan ne kadar ileriye gidebilirim bunu öğrenmek. Simülasyonla neler yapılabilir? Proteus isis gibi bir ortam var mı?

MC_Skywalker

#9
verilog ilemi yazıyorsun VHDL ilemi

VHDL örnek
library IEEE;

use IEEE.STD.std-LOGIC-1164.all

entity ve_kapisi is
   port (
          giris1 : in std_logic;
          giris2 : in std_logic;
          cikis : out std_logic
          );
end ve_kapisi;

architecture Behavioral of ve_kapisi is

begin

     cikis <= giris1  and giris2;

end Behavioral

Mucit23

Verilog ile yazıyorum hocam

vitruvius

Alıntı yapılan: Mucit23 - 07 Aralık 2015, 16:26:46
Sormak istediğim birkaç konu var. Simülasyon yapabiliyoruz anladığım kadarıyla. Geliştirme aşamasında örneğin herhangi bir pinden gelen bilgiye göre işlemler yaptırabilirmiyim? Sormamın sebebi Kart olmadan ne kadar ileriye gidebilirim bunu öğrenmek. Simülasyonla neler yapılabilir? Proteus isis gibi bir ortam var mı?

Simulasyon için testbench yazman gerekir. Testbench'te de kod yazıp istediğin zaman istediğin sinyalin değerini değiştirip istediğin kadar çalıştırabilirsin. Bunun sonuçlarını da "ve" kapısında yaptığın gibi simülasyonda görürsün. Lazım olursa simulasyonda herhangi bir sinyali "Force" ile de değerini değiştirmeye zorlayabilirsin. Kart olmadan sinyal değerlerini görüp yorumlayabilirsin yani, bu da yeterli olacaktır şu an.

Mucit23

#12
Selamlar

İki 4 Bitlik sayının toplamasını yapıyorum.
Proje oluşturdum girişleri ve çıkışları tanıttım.
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    00:47:26 12/08/2015 
// Design Name: 
// Module Name:    Proje2 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module Proje2(A,B,Q,PB0,PB1,PB2,PB3);
    input [3:0]A;
	 input [3:0]B;
	 output[4:0]Q;
	 input PB0,PB1,PB2,PB3;
	 
	 always @(PB0 or PB1 or PB2 or PB3)
	 begin
	 
	   if(PB0==1)
	   begin

	   end
	 
	 end

endmodule


PB0=1 olduğu anda A sayısı ile B sayısını toplayıp 5 bitlik Q 'ya yüklemem gerek. İnternette tam toplayıcılarla ilgili örnek var. Fakat aynısını yazdığımda dahi birçok hata alıyorum. Bu konuda bana ufak bir örnek göstermeniz mümkünmü?

mesaj birleştirme:: 08 Aralık 2015, 01:37:38

Ekleme

Mesela şunu araştırıyorum.

4 bitlik bir girişimiz olsun

input [3:0] A;

Mesela ben bir if sorgulamasında A'nın 2. bitinin 1 olup olmadığını nasıl sorgularım?

Toplama için şöyle bir modül oluşturdum
module fulladd(Cin, x, y, s, Cout);
  input Cin, x, y;
  output s, Cout;
  
  assign s=x ^ y ^ Cin, Cout=(x & y) | (x & Cin) | (y & Cin);
endmodule


Mesela A'nın 0. bitini ve bu modülün x elemanına nasıl gönderirim. Bu tür temel konularda eksiklerim var. Açıklayıcı kaynak bulamıyorum.

Mucit23

Yazım hatalarını anlamıyorum.
Toplama işlemine örnek yapmaya çalıştım.PB0' girişi 1 olunca toplama yapılacak. Örneklerden bakarak aşağıdaki gibi kod yazdım.
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    01:20:33 12/08/2015 
// Design Name: 
// Module Name:    Project 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module Project(A,B,Q,PB0);
    input [3:0] A;
    input [3:0] B;
    output [4:0] Q;
    input PB0;
	 
	 wire [2:0] Carry;
	 
	 always @ (PB0)
	 begin
	   if(PB0==1)  //Toplama Yapılacak
	   begin
		  fulladd stage1(1'b0,A[0],B[0],Q[0],Carry[0]);
		  fulladd stage2(Carry[0],A[1],B[1],Q[1],Carry[1]);
		  fulladd stage3(Carry[1],A[2],B[2],Q[2],Carry[2]);
		  fulladd stage4(Carry[2],A[3],B[3],Q[3],Q[4]);
	   end
	 end

endmodule

module fulladd(Cin, x, y, s, Cout);  //Toplama modülü
  input Cin, x, y;
  output s, Cout;
  
  assign s=x ^ y ^ Cin;
  assign Cout=(x & y) | (x & Cin) | (y & Cin);
endmodule


Fakat derlerken hata veriyor
ERROR:HDLCompilers:26 - "Project.v" line 36 unexpected token: 'fulladd'


fulladd stage1(1'b0,A[0],B[0],Q[0],Carry[0]);
Yukarıdaki satırlarda hata veriyor.
Ben ilk başta eldeyi sıfır verdim. 1'b0 bu işe yaramıyormu

Nerde hata yapıyorum?

alicavuslu

#14