fpga

Başlatan fthdmrl, 11 Aralık 2008, 13:13:17

fthdmrl

merhaba arkadaşlar...fpga ile uygulama yapacam...uygulama için vhdl kodları lazım...acaba değişik uygulamaların vhdl kodlarını bulabileceğim bir yer varmı...teşekkürler

fthdmrl

şu anda basit bir uygulama yapacam...öğle çok kompleks uygulamalar olmayacak..flip-flop olabilir...bunun dışında bir kaç tane daha basit örnek gönderirsen sevinrm..çok teşekkürler

fthdmrl

allah razı olsun...çok teşekkür ederim

semitesla

ise' nin içinde Edit>Language templates e tıkla orada vhdl örnekleri bulabilirsin.

fthdmrl

teşekkürler hocam

semesu

Merhaba,
bende FPGA ve verillog  üzerinde çalışmaya başladım. yapmaya çalıstıgım sey pwm and one bit dac. internette kodlar ve bılgıler buldum bu konu uzerıne.

buldugum kodlar ve bılgıler asagıdadır. sormak istedgim sey, aşagıdakı bılgılerde  hardware accumulator derken neyı kastedıyor?
ve burda ben pwm gırısı ıcın dıgıtal datayı nasıl verebılırım?
yardımcı olursanız cok sevınırım arkadaslar


module PWM(clk, PWM_in, PWM_out);
input clk;
input [7:0] PWM_in;
output PWM_out;

reg [8:0] PWM_accumulator;
always @(posedge clk) PWM_accumulator <= PWM_accumulator[7:0] + PWM_in;

assign PWM_out = PWM_accumulator[8];
endmodule


FPGAs run is so fast compared to the frequencies required in the audio domain (MHZ's compared to KHz's), a one-bit DAC is a better choice.<BR><BR>The simplest way to implement a one-bit DAC is with a PWM generator.
<H4>PWM (Pulse Width Modulation)</H4>The PWM generates pulses on its output. The pulses are made in such a way that the average value of highs and lows is proportional to the PWM input. By filtering the pulses, we obtain an analog value proportional to the PWM input.<BR><BR>A PWM input can be of any width. Most common values are 8-bits and 16-bits.<BR>A PWM output is just one-bit wide.

The simplest way to create a PWM signal is to use an hardware accumulator.Every time the accumulator overflows, output a '1'. Otherwise output a '0'.That's very easily done in an FPGA.

KaraBekir

Sayıcının veri girişleri PWM_in den giriliyor ve PWM_accumulator ün son biti PWM çıkışı olarak kullanılıyor. Her yükselen kenar clk palsinde PWM_accumulator, PWM_accumulator[7:0] + PWM_in kadar artıyor.

semesu

cevabınız icin teşekkür ederım.
peki burda eger input 4 bitlik olursa  ornekleme frekansı kac khz olmalı?
ayrıca bu kodu ISE de denemek istesem sıtımulusu nasıl yazabılırım?
belki sorularım cok basıt gelebılır ancak verılog da yenı oldugum ıcın bunların nasıl oldugunu bılmıyorum.
teşekkür ederım
iyi çalısmalar

semesu

merhaba, cevabınız  icin teşekkür ederım.
yeni bır kod buldum internetten.aşağıda eklıyorum kodu.

şimdi burda sormak istedigim sey su, bu programı FPGA a yuklesem calısırmı?
birde sunu merak edıyorum,xilinx ise de bunun sımulasyonunu yapmak istsem stimulusu nasıl yazacagım orda clock nasıl uretecegım onu bılmıyorum?
birde merak ettigim su var örmekleme frekansı yontemı analog sınyaller ıcın kullanılıyor oyle degılmı,burdakı gırısler dıgıtal oldugu ıcın boyle bırsey kullanmama gerek yok degılmı? eger varsa bunu programa nasıl yansıtabılırım?
birde ben yaptıgım arastırmalardan sunu anladım, şimdi diyelım ki input olarak "00001100" verısı gırıldı  sonra "11100111" verısı gırıldı. bu verıler clockun her yukselen kenarında analog olarak outputa  verılecek degılmı? bırde mesela burda pwm ın pulse genılslıgını bu gırdıgımız verıler belırlıyor ve ona gore outputta farklı sesler cıkıyor degılmı? yani soyle dıyebılırmıyız diyelım ki 11khz ve 8 bit lik datalar gonderılsın. burda 11000 tane paket 8 bitlık halde 1sn de örmeklenıyor  diye anladım ,ozaman " orantı kurup 1 sn de 11000 kes orneklenıyorsa mesela dıyelım kı clockun frekansı 25Mhz olsun buradan 1/25MHz de kac kez orneklenır dıyebılırmıyız?
bu soruların cevabı kafamda tam oturmadıgı ıcın bır turlu cozemedım ne yapacagımı.

module PWMMain(DC,CLK,Q);
input [7:0] DC;
input CLK;
output Q;
wire CLKO;
// synthesis attribute LOC clk "P9"
// synthesis attribute LOC Q "P1"
// synthesis attribute LOC DC "P11","P10","P7","P6","P5","P4","P3","P2"

clkdiv div(CLK,CLKO);
PWM sev(DC,CLKO,Q);

endmodule

module clkdiv(CLKIN,CLKOUT,RESET);
input CLKIN;
output CLKOUT;
input RESET;
wire iclk;
parameter BITS=13;
reg [BITS-1:0] COUNT;
initial COUNT=0;
assign CLKOUT=COUNT[BITS-1];
BUFG clkbuf(iclk,CLKIN);
always @(posedge iclk)
begin
if (RESET) COUNT=0;
COUNT = COUNT + 1;
end
endmodule



module PWM(DC,CLK,Q);
input [7:0] DC;  // duty cycle input
input CLK;

output Q;
reg [8:0] acc;   // accumulator has one more bit than the duty cycle
assign Q=acc[8];  // output is the 8th bit

initial acc=0;   // for simulation only
always @(posedge CLK)
begin

acc=acc[7:0]+DC;   // only add with 8 bits.
end
endmodule

yardımcı olursanız cok sevınırım arkadaslar,projemın teslım gunu yaklasıyor ama ben hala birsey yapamadım:(
iyi çalısmalar