<?php echo _title;?> www.prochazka.zde.cz
www.ccsinfo.com/CEH
Server si právě čte 430 lidí, dnes je úterý, 26. Listopad 2024   
Kategorie: Knihovnička, Xilinx, VHDL

Příklady v jazyce VHDL

Různé příklady kódu v jazyce VHDL.

VHDL code - Sčítač
entity scitac is
 port (a, b: in std_logic_vector(7 downto 0);
       cin: in std_logic;
       cout: out std_logic;
       sum: out std_logic_vector (7 downto 0));
end scitac;
architecture scitac1 of scitac is
begin
 process (cin, a, b)
 variable temp : std_logic_vector (8 downto 0);
 begin
  temp := ('0' & a) + ('0' & b) + ("00000000"& cin);
  cout <= temp(8) after 1 ns;
  sum <= temp(7 downto 0) after 1 ns;
 end process;
end scitac1;
VHDL code - Aritmetická Jednotka
entity alu is
 port (opcode : in bit_vector(2 downto 0);
       a, b, cin, clock : in bit;
       s, cout : out bit);
end alu;
architecture alu1 of alu is
begin
 process begin
  wait until clock'event and clock='1';
  case opcode is
   when "000" => s <= '0'; -- vynulovat, s <= 0
   when "001" => s <= not(a); -- negace, s <= /a
   when "010" => s <= a xor cin; -- increment, s <= a+cin
              cout <= a and cin;
   when "011" => s <= not(a xor cin); -- negate, s <= /a + cin
              cout <= a and cin;cout <= (not(a)) and cin;
   when "100" => s <= b; -- prenos b, s <= b
   when "101" => s <= a xor b; -- XOR, a XOR b
   when "110" => s <= (a xor b) xor cin; -- Add, a + b + cin
              cout <= a and cin;cout <= (a and cin) or (b and (a xor cin));
   when "111" => s <= a xor (not(b)) xor cin; -- Subtract, a + /b + cin
         cout <= a and cin;cout <= (a and cin) or ((not(b)) and (a xor cin));
   when others =>
  end case;
 end process;
end alu1;
VHDL code - Aritmetická Jednotka 2
entity alu is
 port (opcode : in bit_vector(2 downto 0);
       bin : in bit_vector(3 downto 0);
       load : in bit;
       clock : in bit;
       areg : buffer bit_vector(3 downto 0);
       breg : buffer bit_vector(3 downto 0);
       carry : buffer bit);
end alu;
architecture alu2 of alu is
begin
 process
  variable a : bit;
  variable b : bit;
  variable cin : bit;
  variable s : bit;
  variable cout : bit;
  begin
  wait until clock'event and clock = '1';
  if (load = '1') then
   breg <= bin;
   areg <= "0000";
  else
   a := areg(0);
   areg(0) <= areg(1);
   areg(1) <= areg(2);
   areg(2) <= areg(3);
   b := breg(0);
   breg(0) <= breg(1);
   breg(1) <= breg(2);
   breg(2) <= breg(3);
   breg(3) <= b;
   cin := carry;
   case opcode is
    when "000" => s := '0'; -- clear, s <= 0
    when "001" => s := not(a); -- compliment, s <= /a
    when "010" => s := a xor cin; -- increment, s <= a+cin
               cout := a and cin;
    when "011" => s := not(a xor cin); -- negate, s <= /a + cin
               cout := (not(a)) and cin;
    when "100" => s := b; -- transfer b, s <= b
    when "101" => s := a xor b; -- XOR, a XOR b
    when "110" => s := (a xor b) xor cin; -- Add, a + b + cin
               cout := (a and cin) or (b and (a xor cin));
    when "111" => s := a xor (not(b)) xor cin; -- Subtract, a + /b + cin
               cout := (a and cin) or ((not(b)) and (a xor cin));
    when others =>
   end case;
   areg(3) <= s;
   carry <= cout;
  end if;
 end process;
end alu2;
VHDL code - Posuvné matematické operace
--hacesoft 24.7.2005
--prochazka.zde.cz
--posuvné matematické operace
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;

entity posuny is
 Port ( clk : in std_logic;      -- vstup hodinoveho pulzu.
   prikaz : in signed(3 downto 0); -- přikaz co se ma provest.
   Vystup : out signed(7 downto 0)); -- vystup
end posuny;

architecture behavioral of posuny is
signal Vstup: signed(7 downto 0);
begin

process (clk) begin
 if clk='1' and clk'event then
   case prikaz is
     when "0000" =>
       Vstup <= "11001001"; --201
     when "0001" =>
       Vstup <= Vstup sll 1;
     when "0010" =>
       Vstup <= Vstup sll 2;
     when "0011" =>
       Vstup <= Vstup srl 1;
     when "0100" =>
       Vstup <= Vstup srl 2;
     when "0101" =>
       Vstup <= Vstup rol 1;
     when "0110" =>
       Vstup <= Vstup rol 2;
     when "0111" =>
       Vstup <= Vstup ror 1;
     when "1000" =>
       Vstup <= Vstup ror 2;
     when "1001" =>
       Vstup <= Vstup + 1;
     when "1010" =>
       Vstup <= Vstup - 1;
     when "1011" =>
       Vstup <= Vstup / 1;
     when "1100" =>
       Vstup <= "11111111";
     when
VHDL code - Comparator
entity comp is
 port (a, b: in bit_vector;
       y: out bit);
end comp;
architecture comp1 of comp is
begin
 process (a, b) begin
  if a <= b then y <= '1';
   else y <= '0';
  end if;
 end process;
end comp1;
VHDL code - Klopný obvod R-S
entity RS is
 port (reset, set: in std_logic;
       y : out std_logic);
end RS;
architecture rtl of RS is
begin
 process (reset, set) begin
  if (reset = '0') then
   y <= '0';
  elsif (set = '0') then
   y <= '1';
  end if;
 end process;
end rtl;
VHDL code - D Latch
entity d_latch is
 port (enable, data: in std_logic;
       y: out std_logic);
end d_latch;
architecture rtl of d_latch is
begin
 process (enable, data) begin
  if (enable = '1') then
   y <= data;
  end if;
 end process;
end rtl;
VHDL code - D Latch se vstupem ENABLE a funkcí AND mezi vstupy Data a Data1
entity d_latch_enp is
 port (enable, data, data1 : in std_logic;
       q : out std_logic);
end d_latch_enp;
architecture rtl of d_latch_enp is
begin
 process (enable, data, data1) begin
  if ((enable) = '1') then
   q <= data and data1 ;
  end if;
 end process;
end rtl;
VHDL code - D Latch funkce enable mezi vstupy ENABLE a GATE
entity d_latch_en is
 port (enable, gate, d : in std_logic;
       q : out std_logic);
end d_latch_en;
architecture rtl of d_latch_en is
begin
 process (enable, gate, d) begin
  if ((enable and gate) = '1') then
   q <= d;
  end if;
 end process;
end rtl;
VHDL code - D Latch s asynchronním nulováním
entity d_latch_async_reset is
 port (enable, data, reset : in std_logic;
       q : out std_logic);
end d_latch_async_reset;
architecture rtl of d_latch_async_reset is
begin
 process (enable, data, reset) begin
  if (reset ='1') then
   q <='0';
  elsif (enable ='1') then
   q <= data;
  end if;
 end process;
end rtl;
VHDL code - D Latch s asynchronním nastavením
entity d_latch_async_set is
 port (enable, data, set: instd_logic;
       q: outstd_logic);
end d_latch_async_set;
architecture rtl of d_latch_async_set is
begin
 process (enable, data, set) begin
  if (set ='0') then
   q <='1';
  elsif (enable ='1') then
   q <= data;
  end if;
 end process;
end rtl;
>
VHDL code - D Latch s asynchronním nastavením a nulováním
entity d_latch_async is
 port (enable, data, reset, set:instd_logic;
       q:outstd_logic);
end d_latch_async;
architecture rtl of d_latch_async is
begin
 process (enable, data, reset, set) begin
  if (set ='0') then
   q <= '1';
  elsif (reset ='0') then
   q <= '0';
  elsif ( enable ='1') then
   q <= data;
  end if;
 end process;
end rtl;
VHDL code - D Flip-Flop se zápisem náběžné hodinové hrany
entity dff_pos is
 port (data, clk : in std_logic;
       q : out std_logic);
end dff_pos;
architecture rtl of dff_pos is
begin
 process (clk) begin
  if (clk'event and clk = '1') then
   q <= data;
  end if;
 end process;
end rtl;
VHDL code - D Flip-Flop se zápisem sestupné hodinové hrany
entity dff_neg is
 port (data, clk : in std_logic;
       q : out std_logic);
end dff_neg;
architecture rtl of dff_neg is
begin
 process (clk) begin
  if (clk'event and clk = '0') then
   q <= data;
  end if;
 end process;
end rtl;
VHDL code - D Flip-Flop s asynchronním nulováním
entity dff_async_reset_orig is
 port (data, clk, reset : in std_logic;
       q : out std_logic);
end dff_async_reset_orig;
architecture rtl of dff_async_reset_orig is
begin
 process (clk, reset) begin
  if (reset = '1') then
   q <= '0';
  elsif (clk'event and clk = '1') then
   q <= data;
  end if;
 end process;
end rtl;
VHDL code - D Flip-Flop s asynchronním nastavením
entity dff_async_set_orig is
 port (data, clk, set : in std_logic;
       q : out std_logic);
end dff_async_set_orig;
architecture rtl of dff_async_set_orig is
begin
 process (clk, set) begin
  if (set ='0') then
   q <='1';
  elsif (clk'event and clk = '1') then
   q <= data;
  end if;
 end process;
end rtl;
VHDL code - D Flip-Flop s asynchronním nulováním a nastavením
entity dff_async is
 port (data, clk, reset, set: in std_logic;
       q: out std_logic);
end dff_async;
architecture rtl of dff_async is
begin
 process (clk, reset, set) begin
  if (reset = '1') then
   q = '0';
  elsif (set = '1') then
   q = '1';
  elsif (clk'event and clk = '1') then
   q = data;
  end if;
 end process;
end rtl;
VHDL code - D Flip-Flop s synchronním nulováním
entity dff_sync_reset is
 port (data, clk, reset : in std_logic;
       q : out std_logic);
end dff_sync_reset;
architecture rtl of dff_sync_reset is
begin
 process (clk) begin
  if (clk'event and clk = '1') then
   if (reset = '0') then
    q <= '0';
   else q <= data;
   end if;
  end if;
 end process;
end rtl;
VHDL code - D Flip-Flop s asynchronním nastavením
entity dff_sync_set is
 port (data, clk, set : in std_logic;
       q : out std_logic);
end dff_sync_set;
architecture rtl of dff_sync_set is
begin
 process (clk) begin
  if (clk'event and clk = '1') then
   if (set = '1') then
    q <= '1';
   else q <= data;
   end if;
  end if;
 end process;
end rtl;
VHDL code - D Flip-Flip s synchronním a asynchronním načtením
entity dff_a_s_load is
 port(sload, aload, adata, sdata, clk : in std_logic;
       q : out std_logic);
end dff_a_s_load;
architecture rtl of dff_a_s_load is
begin
 process (clk, aload) begin
  if (aload = '1') then
   q <= adata;
  elsif (clk'event and clk = '1') then
   if (sload = '1') then
    q <= sdata;
   end if;
  end if;
 end process;
end rtl;
VHDL code - D Flip-Flop s asynchronním nulováním, nastavením a načtením a synchronním načtením
entity dff_arsl_sl is
 port (reset, set, aload, sload, clk :in std_logic;
       adata,sdata : in std_logic_vector (3 downto 0);
       q : out std_logic_vector (3 downto 0));
end dff_arsl_sl;
architecture rtl of dff_arsl_sl is
begin
 process (clk, reset, set, aload) begin
  if (reset = '1') then
   q <= ("0000");
  elsif (set = '1') then
   q <= "1111";
  elsif (aload = '1') then
   q <= adata;
  elsif (clk'event and clk = '1') then
   if (sload = '1') then
    q <= sdata;
   end if;
  end if;
 end process;
end rtl;
VHDL code - JK Flip-Flops
entity JK is
 port (J: in std_logic;
       K, CLK : in std_logic;
       Q_out : out std_logic);
end JK;
architecture rtl of JK is
 signal Q : std_logic;
begin
 process
  variable JK : std_logic_vector (1 downto 0);
 begin
  wait until (CLK'event and CLK = '1');
  JK := (J & K);
  case JK is
   when "01" => Q <= '0';
   when "10" => Q <= '1'
   when "11" => Q <= not (Q);
   when "00" => Q <= Q;
   when others=> Q <= 'X';
  end case;
 end process;
 Q_out <= Q;
end rtl;
VHDL code - JK Flip-Flop s asynchronním nulováním a nastavením
entity jk_async_sr is
 port (RESET, SET, J, K, CLK : in std_logic;
       Q_out : out std_logic );
end jk_async_sr;
architecture rtl of jk_async_sr is
 attribute sync_set_reset of J, K : signal is "true";
 attribute one_hot of RESET ,SET : signal is "true";
 signal Q : std_logic;
begin
 process (CLK, RESET, SET)
  variable JK : std_logic_vector (1 downto 0);
 begin
  if (RESET = '1') then
   Q <= '0';
  elsif (SET = '1') then
   Q <= '1';
  elsif (clk'event and CLK = '1') then
   JK := (J & K);
   case JK is
    when "01" => Q <= '0';
    when "10" => Q <= '1';
    when "11" => Q <= not(Q);
    when "00" => Q <= Q;
    when others => Q <= 'X';
   end case;
  end if;
  Q_out <= Q;
 end process;
end rtl;
VHDL code - Obousměrný komunikační port
entity transport1 is
 Port (DIR: in std_logic;
       A : buffer std_logic_vector(7 downto 0);
       B : buffer std_logic_vector(7 downto 0));
end transport1;
architecture behavioral of transport1 is
begin
 process (DIR) begin
 -- Signál DIR určuje tok dat.
  if DIR = '0' THEN A <= B;
   else A <= "ZZZZZZZZ"; end if;
  if DIR = '1' THEN B <= A;
  else B <= "ZZZZZZZZ"; end if;
 end process;
end behavioral;
VHDL code - Toggle Flip-Flop s nulováním
entity t_async_reset is
 port (RESET, CLK : in std_logic;
       Q: out std_logic);
end t_async_reset;
architecture rtl of t_async_reset is
 signal tmp_q : std_logic;
begin
 process (CLK, RESET) begin
  if (RESET = '1') then
   tmp_q <= '0';
  elsif (CLK'event and CLK = '0') then
   tmp_q <= not (tmp_q);
  end if;
 end process;
 Q <= tmp_q;
end rtl;
VHDL code - Toggle Flip-Flop s nastavením
entity t_async_set is
 port(SET, CLK : in std_logic;
       Q : out std_logic);
end t_async_set;
architecture rtl of t_async_set is
 signal tmp_q : std_logic;
begin
 process (CLK, SET) begin
  if (SET ='1') then
   tmp_q <='1';
  elsif (CLK'event and CLK ='1')
   then tmp_q <= not (tmp_q);
  end if;
 end process;
 Q <= tmp_q;
end rtl;
VHDL code - Toggle Flip-Flop s Enable a asynchronním nulováním
entity t_async_en_r is
 port (RESET, TOGGLE, CLK : in std_logic;
       Q : out std_logic);
end t_async_en_r;
architecture rtl of t_async_en_r is
 signal tmp_q : std_logic;
begin
 process (CLK, RESET) begin
  if (RESET ='1') then
   tmp_q <='0';
  elsif (CLK'event and CLK ='1') then
   if (TOGGLE ='1') then
    tmp_q <= not (tmp_q);
   end if;
  end if;
 end process;
 Q <= tmp_q;
end rtl;
VHDL code - Návrh s synchronním a asynchronním ovládání
entity multi_attr is
 port (data1, data2, clk, reset, sload : in std_logic;
       q1, q2 : out std_logic );
end multi_attr;
architecture rtl of multi_attr is
 attribute async_set_reset_local of infer_async : label is "reset";
 attribute sync_set_reset_local of infer_sync : label is "reset";
begin
infer_sync :
 process (clk) begin
  if (clk'event and clk ='1') then
   if ( reset ='0') then
    q1 <='0';
   elsif (sload ='1') then
    q1 <= data1;
   end if;
  end if;
 end process infer_sync;
infer_async :
 process (clk, reset) begin
  if ( reset ='0') then
   q2 <= '0';
  elsif (clk'event and clk ='1') then
   if (sload ='1') then
    q2 <= data2;
   end if;
  end if;
 end process infer_async;
end rtl;
VHDL code - Master a Slave Latch
entity mslatch is
 port (mclk, sck, data : in STD_LOGIC;
       q : out STD_LOGIC );
end mslatch;
architecture rtl of mslatch is
begin
   -- pragma dc_script_begin
   -- set_signal_type "clocked_on_also" sck
   -- pragma dc_script_end
 process(mclk, data) begin
  if (mclk'event and mclk = '1') then
   q <= data;
  end if;
 end process;
end rtl;
VHDL code - Master a Slave Latch s dvěma páry vstupu
entity mslatcH4 is
 port (mck1, sck1, data1, mck2, sck2, data2 : in STD_LOGIC;
       q1, q2 : out STD_LOGIC );
end mslatcH4;
architecture rtl of mslatcH4 is
begin
   -- pragma dc_script_begin
   -- set_signal_type "clocked_on_also" sck1 -associated_clock mck1
   -- set_signal_type "clocked_on_also" sck2 -associated_clock mck2
   -- pragma dc_script_end
infer1:
 process(mck1, data1) begin
  if (mck1'event and mck1 ='1') then
   q1 <= data1;
  end if;
end process infer1;
infer2:
 process(mck2, data2) begin
  if (mck2'event and mck2 ='1') then
   q2 <= data2;
  end if;
 end process infer2;
end rtl;

print Formát pro tisk

Komentáře rss

Přidat komentář >

Nebyly přidány žádné komentáře.

Všechny informace jsou zahrnuty pod GPL licenci, pokud není explicitně uveden jiný typ licence.
Používání těchto stránek ke komerčním účelům lze jen se souhlasem autora.
Všechna práva vyhrazena (c) 1997 - 2024 hacesoft.
Jste návštevník číslo: 445636
Celkem zobrazeno stránek: 17755422
Přihlásit do administrace