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
bizde senin sorunu parçalayamadık malesef.
Oncelikle FPGA ile alaklı temel konuları ogrenmeni oneririm. Clock ve sayac kullanımlarını anlarsan bu işlemi yapabilirsin.
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.
Muzoo anlamış. Süpersin arkadasım tşk ederim.. ilginizden dolayı hepınıze ayrı ayrı tesekkur ederım .... Birlikten kuvvet dogar
Bende muzonun anlattıklarından n'yi nasıl kontrol ettiğini yazdıklarından sonra cok merak ettim. Bizimle paylaşırmısın.
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;
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.
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..
bu arada sormayı unuttum VHDL ILE SAYISAL TASARIM VE FPGA UYGULAMALARI kıtabı sızemı aıt ??
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;
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