Vhdl led yakma ve hız kontrolü

Başlatan rumpi, 12 Ocak 2013, 23:01:43

rumpi

Herkese merhaba, spartan 3e starter kit'i üzerindeki 8 adet led'i sırayla yakıp bu yanma hızını kontrol etmek istiyorum.Vhdl konusunda pek deneyimli değilim. Led'leri output std_logic_vector olarak gösterip (7 down to 0)
önce "10000000" gönderip belli bir gecikme ile "1" girişini sağa kaydırmayı düşünüyorum ama pseudo kod olarak yazsam da çalışır hale getirmem için yardımınıza ihtiyacım var ya da bambaşka bir fikre ayrıca led yanma hızını ne ile kontrol edebilirim bilmiyorum.Oldukça deneyimli kişilerin kodlarını gördüm forumda bana yardımcı olabilirseniz sevinirim
Şimdiden herkese teşekkürler

speak48


rumpi

Bu kadarını öğrensem şimdilik benim için yeterli

speak48


rumpi

vhdl 'i zor öğrendim :) hız kontrolü için mux kullanabilir miyim ?

metaltrrocker

led yanıp sönme işini clock divider kullanarak halledebilirsin vhdl kullanıyorsun değilmi?

metaltrrocker

hocam clk divider kullanarak ledlerin yanıp sönme hızlarını ayarlayabilirsin
labortuvar derslerinde kullandığımızı atıyorum bu işini görür benim kullandığım başkaydı onu da atarım bulduğum zaman
--clk  bölücü kodları--
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity clk_div is
    Port ( clk_50 : in  STD_LOGIC;--50Mhz giriş clk
           clk1 : out  STD_LOGIC--çıkış clk
           );
end clk_div;

architecture Behavioral of clk_div is
     --f_div=50MHz/(2^24)=2.98Hz=>1/2.98=0.34sn 
    signal clk_divider:std_logic_vector(23 downto 0):=x"000000";
begin 
    
    clk_division : process (clk_50, clk_divider) 
    begin 
        if (clk_50 = '1' and clk_50'event) then 
            clk_divider <= clk_divider + 1; 
        end if; 
    clk1 <= clk_divider(23); 
     end process;
    
end Behavioral;

rumpi

hocam sağol ama anlamadığım bir kaç nokta var

signal clk_divider:std_logic_vector(23 downto 0):=x"000000" : bu satırda neden sadece "000000" 6 bite sıfır atadık

clk1 <= clk_divider(23); : bir de clk divider'ın 23.bitini ne amaçla döngünün dışında clk1 e gönderdik

gönderdiğiniz kodu ise'de yazdım anlamaya çalışıyorum

speak48

#8
isdiğiniz devrenin tüm detaylarını yazın.


mesaj birleştirme:: 13 Ocak 2013, 11:56:36

mesela ilk başta 1snyede led yakan devre  50mhz clk için
hızlan dersen iki kat hızlanır
yavaşlad dersen iki kat yavaşlar
module ledyak
(
input clk,
input reset,
input hizlan,
input yavasla,
output reg [7:0] leds
);

reg [3:0] 	cntled;
reg [31:0]	cntclk;
reg [31:0]  regtmr;


always@(cntled)
begin
	case(cntled)
		0: leds<=1;
		1: leds<=2;
		2: leds<=4;
		3: leds<=8;
		4: leds<=16;
		5: leds<=32;
		6: leds<=64;
		7: leds<=128;
		default:  leds<=0;
	endcase
end

always@(posedge clk or posedge reset)
begin
	if(reset)
	begin
		cntled<=0;
		cntclk<=0;
		regtmr<=50000000;
	end
	else
	begin
		if(cntclk==regtmr)
		begin
			cntclk<=0;
			cntled<=cntled+1;
		end
		else
		begin
			cntclk<=cntclk+1;
		end
		
		if(hizlan)
			regtmr<=regtmr>>1;//{1'b0,regtmr[31:1]};
		else if(yavasla)
			regtmr<=regtmr<<1;//{regtmr[30:0],1'b0};
		else
			regtmr<=regtmr;
		
	end
end
endmodule

rumpi

Şöyle : Spartan 3e Starter Kit üzerindeki ledlerin sırayla yanması ve bu yanma hızının kontrolü
VHDL kullanarak programın yazılması

speak48

vhdl kullanmıyorum
vhdle otamatik çevirici sentezlenir bir şekilde çevirmedi

rumpi

#11
Vhdl de sizin hizlan ile ifade ettiğiniz komutu kullanamıyorum sanırım
Bir buton ve sayıcı kullanarak giderek yavaşlanabilir gibi geldi.gözün algılayacağı yavaşlamaları da gecikme ile sağlayabilirim diye düşünüyorum

Vhdl konusunda deneyimli birisinin tavsiyesine ihtiyacım var
Şimdiden sağolun

speak48

vhdl ile verilog aynı şeyin farklı yazım şeklidir.
bu program falan değidir ki komutu olsun
hızlan diye tanımlanan şey giriş pinidir.bir butona bağlanabilinir.
sanırım vhdlide yanlış öğrenmişsiniz



berat23

ödev gibi birşey mi bu yoksa amacın öğrenmek mi?

rumpi

anlatmak için öğrenmem gerekiyor