fpganedir.com'da ara

fpganedir mail

RANGE (ARALIK)

Sayısal değerlerin alt kümesini belirlemek için kullanılır.

range alt sınır to üst sınır
range üst sınır downto alt sınır
range <> (kısıtlanmamış)

NOT:

ÖRNEK 1 :

1 to 100         --aralık 1 den 100 (1 ve 100 dahil) yükselen
9 downto  --aralık 9 dan 0 (1 ve 100 dahil) alçalan
15 to 0            --aralık null (boş)

ÖRNEK 2 :

type Bellek is array (NATURAL range <>) of Bit_Vector(7 downto 0);
--Üstteki ifadeyle, her bir dizisi 8’er bit’ten oluşan sınırsız (kısıtlanmamış)  bir bellek  tanımlamış oluruz.

mem

signal memory_ram : Bellek (11 downto 1);  --Bu ifadeyle, sınırsız oluşturulan belleğin kapasitesi belirlenir.


ÖRNEK 3 (10x8 BELLEK):

Bu programımızda bir adet 11x8 kapasiteli bir bellek oluşturacağız. Program kontolörü RESET ve RW (read_write) olacak. RW=1 olduğunda okuma RW=0 olduğunda yazma işlemi yapılacak. RESET ise belleği sıfırlayacak.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity MEMORY is
Port ( CLK : in STD_LOGIC;
           input : inout BIT_VECTOR (7 downto 0);
           RW : in STD_LOGIC;
           reset: in STD_LOGIC);
end MEMORY;

architecture Behavioral of MEMORY is
     type Bellek is array (natural range<> ) of bit_vector(7 downto 0);
     signal memory_ram : Bellek(11 downto 1);
begin
process(clk,reset)
     variable counter:integer:=0;
begin
      if reset='1' then
              for i in memory_ram'range loop
                    memory_ram(i)<=(others=>'0');
                    counter:=0;
               end loop;
      elsif clk='1' and clk'event then
            if rw= '0' then
                  counter:=counter+1;
                  memory_ram(counter)<=input;
            else
                 input <= memory_ram(counter);
                 counter:=counter-1;
            end if;
            if counter= 12 then
                  counter:= 11;
            end if;
            if counter=0 then
                  counter := 1;
            end if;
         end if;
     end process;
end Behavioral;

Test Bench:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE
IEEE.std_logic_arith.all;

ENTITY memory_test_bench IS
END memory_test_bench;

ARCHITECTURE behavior OF memory_test_bench IS

--Component Declaration for the Unit Under Test (UUT)
COMPONENT MEMORY
PORT(CLK : IN std_logic;
            input : INOUT std_logic_vector(7 downto 0);
            RW : IN std_logic;
            reset : IN std_logic );
END COMPONENT;

--Inputs
signal CLK : std_logic := '0';
signal RW : std_logic := '0';
signal RESET : std_logic := '0';

signal input : std_logic_vector(7 downto 0);
constant clk_period:time := 10 ns;

BEGIN

CLK<= not CLK after clk_period/2;

stim_proc: process
   begin 
      RW<='0';
      for i in 0 to 10 loop
         input<= CONV_STD_LOGIC_VECTOR(i, 8); 
      wait for clk_period;
      end loop;
      wait for clk_period*5;
         RESET<='1';
      wait for clk_period;
         RESET<='0'; 
      for i in 10 downto 10 loop
         input<= CONV_STD_LOGIC_VECTOR(i, 8); 
      wait for clk_period;
      end loop;
      wait for clk_period*5;
      RW<='1'; 
      wait for clk_period*10;
      assert false
      report "simülasyon bitti"
      severity failure
 end process;
END;

 

 

Anasayfa | Fpga | VHDL | VHDL Sözlüğü | Embedded Sistem | Android | Sayısal Tasarım | Simulasyon | PCB | Örnekler | Forum | İletişim
Copyright © 2010-2013 FPGAnedir. All Rights Reserved.