rejestr_przesuwny.vhdl

library ieee;
use ieee.std_logic_1164.all;

entity rejestr_przesowny is
  generic (
    N: natural := 1
  );
  port (
    CLK,RST,ENABLE: in std_logic;
    D: in std_logic;
    P_OUT: buffer std_logic_vector (N-1 downto 0)
  );
end;

architecture logic of rejestr_przesuwny is
  begin
    process (CLK, RST)
    begin
      if (RST='0') then
        for i in 0 to N-1 loop
          P_OUT(i) <= '0';
        end loop;
        -- sprytniejszym zapisem tego jest:
        --  P_OUT <= (others => '0');
        -- korzystamy tu z tzw agregacji umożliwiającej wygodne nadawanie wartości wektorom np.:
        --  wektor <= (1|3 => '1', 2|4 =>'0');
        --  wektor <= (1 => '1', 3 => '1', 2|4 =>'0');
        --  wektor <= ('1', '0', '1', '0');
        --  wektor <= "1010"
        -- są całkowicie równoważnymi zapisami, jednak pierwszy z nich jest zdecydowanie
        -- wygodniejszy dla długich wektorów
        -- ponadto dzieki agregacji możemy łatwo wpisać wektor do zestawu sygnałów poprzez:
        --  (skalar, vektor_2, skalar) <= wektor_4
      elsif (CLK='0' and CLK'event) then
        if (ENABLE='1') then
          P_OUT <= D & P_OUT(N-1 downto 1);
          -- tak jak do pojedynczych bitow mozemy odwolac sie do zakresow
          -- o kolejnosci bitow z zakresu decyduje uzycie to / downto
        end if;
      end if;
    end process;
end;

architecture modularna of rejestr_przesuwny is
  begin
    -- uzywamy generate for aby wykorzystac odpowiednia liczbe 1 bitowych multiplekserow
    G0: for i in 0 to N-1 generate
      -- mozemy takze warunkowac fragmenty tego co umieszczamy w generate
      G01: if i=N-1 generate
        mux: entity work.przerzutnik(logic)
        -- powyzszy zapis oszczedza podawania deklaracji komponentu
        -- oraz ewntualnego podawania konfiguracji ...
          port map (D=>D,CLK=>CLK,RST=>RST,ENABLE=>ENABLE,Q=>P_OUT(i));
      end generate;
      G02: if i<N-1 generate
        mux: entity work.przerzutnik(logic)
          port map (D=>P_OUT(i+1),CLK=>CLK,RST=>RST,ENABLE=>ENABLE,Q=>P_OUT(i));
      end generate;
    end generate;
end;

XHTML generated by highlight (http://www.andre-simon.de/) from rejestr_przesuwny.vhdl



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/programing/vhdl/rejestr_przesuwny.vhdl) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2014-01-07 19:27:39 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).