8 Bit veriyi tek tek değişkene atana

Başlatan universitelim54, 31 Ekim 2016, 20:39:36

universitelim54

Mrb Arkadaşlar 8 bitlik bir veriyi parcalara ayırıp diziye atamak itiyorum.Diziye atama işlemi tamam ama dijital girişi parçalayamadım. Bununla ilgili olarak örnek verebilirmisiniz.

Saygılarımla

serdararikan

bizde senin sorunu parçalayamadık malesef.

alicavuslu

Oncelikle FPGA ile alaklı temel konuları ogrenmeni oneririm. Clock ve sayac kullanımlarını anlarsan bu işlemi yapabilirsin.

muuzoo

Tam olarak ne yapmak istiyorsunuz. Eğer 8 bit veriyi aldıysanız direk bitlere erişebiliyorsunuz demektir. Örneğin 8 bitlik bir vector tanımlanmış olsun ve ilk değer olarak hex "FA" değeri atanmış olsun;

signal myData : unsigned(7 downto 0) := X"FA"


Tanımlanan verideki istediğiniz bite "n" bit indisi olmak üzere;

myData(n)


şeklinde erişebilirsiniz.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

universitelim54

Muzoo anlamış. Süpersin arkadasım tşk ederim.. ilginizden dolayı hepınıze ayrı ayrı tesekkur ederım .... Birlikten kuvvet dogar

alicavuslu

Bende muzonun anlattıklarından n'yi nasıl kontrol ettiğini yazdıklarından sonra cok merak ettim. Bizimle paylaşırmısın.

universitelim54

Tabı kı yapmak ıstedıgım sey 8 bıtlık verı gırısınden gelen verıyı tek tek ıncelemektı.Muzoo bu gelen verıyı bır dızıye atamıs sonrada dızıdekı elemanları dizi(0) elemanı,dizinin(1) elamanı şeklinde tek tek kullanıma atamış. ama ben dizi tanımlaması yapmadım...

Ram2_Out         : out   STD_LOGIC_VECTOR (63 downto 0);  -- cıkıs tanımlaması


PROCESS (clk)   
BEGIN
   
    IF( şart sağlar ise  = '1' ) then   
   
          Ram2_Out(0) <= '1';
       
    ELSE
        
          Ram2_Out(0) <= '0';
   
    END IF;


şeklinde yaptım derledım ancak kullandıgım altera işlemci 93 kullanıcı cıkısı var ben ıse 102 bacak tanımlaması yapmısım :( tabı bu baska bır sorun .... sımdı onu nasıl cozmem gerekıyor ona bakıyorum...
   
END PROCESS;

alicavuslu

Bu yüzden bu tür devrelerin çıkışına pararlelden seriye dönüştürücü koyulur. Sen gel benim önerimi dinle ilk olarak sayaç kavramını iyice bir öğren. Sonra RAM'dan okuduğun cıkısı bu sayac değeri ile bağlantılı olarak tekli çıkışa aktar.

universitelim54

ali bey ben sayıcı yapmayı flan biliyorum .Bazen sıkıntı cekmıyor deglım ama bu sorulara hızlı cevaplar verıyorum. Sızın onerınız ıyı bır oner paralelı SPI ıle serı hale getır dıyorsun guzel ama yaptıgım sıstemın cok hızlı calısması gerekıyor . 64 bıtlık bır verıyı paralel bır sekılde ıslemek durumundayım..

şimdi sunu anlamıyorum fpga de ben sadece bır modul tanımlaması yapıyorum (Tekıl bır VHDl sayfası) sonra  bunları modul halıne getırıp blok dıyargamda bırlestırıp pın atamaları yapacagım.. VHDL teklı sayfada pın hatası vermemesı gerekmez mı ...

Henuz dıs pın ataması yapmıs degılım cunku..

universitelim54

bu arada sormayı unuttum VHDL ILE SAYISAL TASARIM VE FPGA UYGULAMALARI kıtabı sızemı aıt ??

alicavuslu

RAM için aşağıdaki kodu incelemeni öneririm.

Amacın veriyi işlemek ise bunu FPGA ile rahatlıkla yaparsın. Sadece olayı yanlıs yorumluyorsun. Modül sana 64 bitlik çıkışı verir sen bunu parse edebilirsin. Yada olduğu gibi bir işlemde kullanabilirsin.

Yazdığın kodları palaşırsan belki onlar üzerinden yardımcı olabiliriz. Dediklerinden tama olarak ne yapmak istediğini anlayamadım.

Sorunun cevabı evet.

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.Numeric_Std.all;

entity sync_ram is
  port (
    clock   : in  std_logic;
    we      : in  std_logic;
    address : in  std_logic_vector;
    datain  : in  std_logic_vector;
    dataout : out std_logic_vector
  );
end entity sync_ram;

architecture RTL of sync_ram is

   type ram_type is array (0 to (2**address'length)-1) of std_logic_vector(datain'range);
   signal ram : ram_type;
   signal read_address : std_logic_vector(address'range);

begin

  RamProc: process(clock) is

  begin
    if rising_edge(clock) then
      if we = '1' then
        ram(to_integer(unsigned(address))) <= datain;
      end if;
      read_address <= address;
    end if;
  end process RamProc;

  dataout <= ram(to_integer(unsigned(read_address)));

end architecture RTL;

universitelim54

Kodlarım cok fazla yazsam roman olur cınsınden .. ama dedıgınızı suan yapıyorum sorun cozulecek gıb ornek ıcın tsk ederım