VHDL

Antworten
dvajda
Site Admin
Beiträge: 352
Registriert: Mo Feb 06, 2023 5:13 pm

Re: VHDL

Beitrag von dvajda »

Bild
Bild
Bild
Bild
Bild
Bild
dvajda
Site Admin
Beiträge: 352
Registriert: Mo Feb 06, 2023 5:13 pm

Re: VHDL

Beitrag von dvajda »

Code: Alles auswählen

/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
dvajda
Site Admin
Beiträge: 352
Registriert: Mo Feb 06, 2023 5:13 pm

Re: VHDL

Beitrag von dvajda »

Code: Alles auswählen

apt-get install locales-all
apt-get install libncurses5
dvajda
Site Admin
Beiträge: 352
Registriert: Mo Feb 06, 2023 5:13 pm

Re: VHDL

Beitrag von dvajda »

Code: Alles auswählen


apt-get install locales-all

Code: Alles auswählen

apt-get install libncurses5
weil:

Code: Alles auswählen


david@git:~/Xilinix-bin/Vivado/2023.1/bin$ ./vivado 
application-specific initialization failed: couldn't load file "librdi_commontasks.so": libtinfo.so.5: cannot open shared object file: No such file or directory

dvajda
Site Admin
Beiträge: 352
Registriert: Mo Feb 06, 2023 5:13 pm

Re: VHDL

Beitrag von dvajda »

dvajda
Site Admin
Beiträge: 352
Registriert: Mo Feb 06, 2023 5:13 pm

Re: VHDL

Beitrag von dvajda »

  1. Block
  2. Signal
Blöcke: Zähler, Multiplexer, Dekoder, ...

Blöcke werden über Signale miteinander verbunden
  1. Konventionen
    1. Namensregeln
    2. Kommentare
    3. Zuweisungen
  2. Typologie
  3. Vektoren
  4. Aufbau der Schaltungsbeschreibung
    1. Header mit Bibliothek und Packageeinbindungen
    2. Entity für Schnittstellendefinition
    3. Architecture für Funktionsbeschreibung
  5. Nebenläufige oder sequentielle Umgebungen
    1. Nebenläufig
    2. Sequentiell
  6. Anweisungen
    1. Einfache Verknüpfungen
    2. Arithmetische Operatoren
    3. with/select
    4. when/else
    5. if/then
    6. case/is
  1. Konventionen
    1. Namensregeln
      • Zwischen Gross und Kleinschreibung wird in VHDL nicht unterschieden
      • ... das übliche
    2. Kommentare
      • Komentare werden durch doppelten Bindestrich eingeleitet --
    3. Zuweisungen
      • Zuweisungen
        • Signal an ein anderes Signal
        • konstanter Wert an Signal
      • Zeichenkombination <=
      • Von rechts nach links
      Beispiel:

      Code: Alles auswählen

      Y <= S;
      Y <= A or B;
      -- Falsch A => Y; -- Falsch
      
  2. Typologie
    • VHDL ist streng typgebundene Sprache
    Es genügt:
    • boolean
    • bit
    • std_logic
    1. Typ: boolean
      1. Wertevorrat: true, false
      2. Verwendung: logische Abfragen (if)
    2. Typ: bit
      1. Wertevorrat: 0, 1
      2. Verwendung: Entwurf
    3. Typ: std_logic:
      1. Wertevorrat: 0, 1, Z, -, L, H, X, W
      2. Entwurf und Simulation
    Deklartion:

    Code: Alles auswählen

    signale <signalname>: typ;
    
    signal x0, x1, x2, x3: bit;
    signal EN: std_logic;
    signal on_of: boolean;
    
    Bei Verknüpfungen müssen einzelne Signale vom selben Typ sein

    Code: Alles auswählen

    0: starke 0
    1: starke 1
    Z: hochohmig
    -: don't care
    U: unbekannt
    X: konflikt
    L: Schwache 0
    H: Schwache 1
    W: Schwaches X
    
  3. Vektoren
    1. Deklaration

      Code: Alles auswählen

      signal <signalname>: typ (<lower> to <upper>);
      signal <signalname>: typ (<upper> downto <lower>);
      
      signal x: bit_vector(0 to 7);
      signal a: std_logic_vector(2 to 4);
      signal r: bit_vector(3 downto 0);
      
    2. Zuweisungen

      Code: Alles auswählen

      c <= a or b;
      c <= ('1', '0', '0', '0');
      c <= "1000";
      
  4. Aufbau der Schaltungsbeschreibung
    1. Header mit Bibliothek und Packageeinbindungen
    2. Entity für Schnittstellendefinition
    3. Architecture für Funktionsbeschreibung
    1. Header
      • Definitionen die für Schaltungsbeschreibung gelten sollen

      Code: Alles auswählen

      library ieee;
      use ieee.std_logic_1164.all
      use ieee.std_logic_unsigned.all
      
    2. Entity
      1. Eingang
      2. Ausgang
      3. Bidirektional
      1. Eingang: in
      2. Ausgang: out
      3. Bidirektional: inout

      Code: Alles auswählen

      entity <blockname> is
      port
      (
          <signalnamen>: <richtung> <typ>;
          <signalnamen>: <richtung> <typ>;
          <signalnamen>: <richtung> <typ>
      );
      end;
      

      Code: Alles auswählen

      entity multiplexer is
      port
      (
          a0, a1, a2, a3: in bit;
          b0, b1, b2, b3: in bit;
          s:              in bit;
          y0, y1, y2, y3: out bit;
      );
      end;
      

      Code: Alles auswählen

      entity counter is
      port
      (
          clk: in bit;
          rst: in bit;
          q: out bit_vector (3 downto 0)
      );
      end;
      
    3. Die Funktion - Architecture

      Code: Alles auswählen

      architecture <beschreibungsname> of <blockname> is
      -- locale signale 
      begin 
      -- functionsbeschreibung
      end;
      

      Code: Alles auswählen

        
      architecture mymux of multiplexer is 
          signal a, b, y: bit_vector (0 to 3);
      begin 
          a <= (a0, a1, a2, a3);
          b <= (b0, b1, b2, b3);
          
          y <= a when (s='0') else b;
          
          y0 <= y(0);
          y1 <= y(1);
          y2 <= y(2);
          y3 <= y(3);
      end mymux
      
    4. Nebenläufige oder sequentielle Umgebungen
      1. Nebenläufige

        • In C werden alle Anweisungen hintereinander abgearbeitet
        • Anweisungen in VHDL in der Regel nebenläufig, d.h. parallel
        • Befindet man sich in einer nebenläufigen oder Sequentiellen Umgebung?
        Aus:

        Code: Alles auswählen

        architecture verhalten of multiplexer is 
            signal a, b, y: bit_vector (0 to 3);
        begin 
            a <= (a0, a1, a2, a3);
            b <= (b0, b1, b2, b3);
            
            y <= a when (s='0') else b;
            
            y0 <= y(0);
            y1 <= y(1);
            y2 <= y(2);
            y3 <= y(3);
        end verhalten
        
        Wird:

        Code: Alles auswählen

        architecture mymux of multiplexer is 
            signal a, b, y: bit_vector (0 to 3);
        begin 
            a <= (a0, a1, a2, a3);
            b <= (b0, b1, b2, b3);
            
            y <= a when (s='0') else b;
            
            y0 <= y(0);
            y1 <= y(1);
            y2 <= y(2);
            y3 <= y(3);
        end mymux
        
      2. Die erste umgebung ist nebenläufig
      3. Squentielle Umgebung
        1. Prozess

          Code: Alles auswählen

          process <empfindlichkeitsliste>
          -- lokale signale   
          begin 
          -- sequentielle umgebung
          end process;
          
          • Ist eine Sequentielle Umgebung abgearbeitet, startet die Ausführung von vorne
          • Eine parallele Umgebung kann mehrere sequentielle enthalten, die parallel ausgeführt werden
          • Empfindlichkeitsliste: Alle signale die sich potentiell ändern können

          Code: Alles auswählen

          architecture verhalten of counter is
              signal qint: std_logic_vector ( 3 downto 0);
          begin 
              process (reset, clk)
              begin 
                  if (reset='0') then 
                      quint <= x"0";
                  elseif (clk='1') and clk'event
                  then 
                      qint <= qint+1;
                  end if;
              end process;
              
              q<=qint;
          end;
          
          Variablen im Prozess

          Code: Alles auswählen

          process ..
              variable V std_logic_vector (3 downto 0);
          begin 
              V := ...
          end;
          
  5. Anweisungen
    1. Einfache Verknüpfungen
      • not
      • and
      • or
      • nand
      • nor
      • xor
      • not
    2. Arithmetische Operatoren
      • Addition +
      • Subtraktion -
      • gleich =
      • ungleich /=
      • kleiner <
      • kleiner gleich <=
      • groesser >
      • groesser gleich >=
    3. with/select
      • nebenläufig

        Code: Alles auswählen

        with <auswahlsignal> select 
        ergebnis <= <Verknüpfung_1> when <auswahlwert_1>,
                    <Verknüpfung_2> when <auswahlwert_2>,
                    <Verknüpfung_n> when others;
        
    4. when/else
      • nebenläufig

        Code: Alles auswählen

        <ergebnis> <=   <Verknüpfung_1> when <Bedingung_1>, 
                        else <Verknüpfung_2> when <Bedingung_2>, 
                        else <Vernüpfung_n>;
        
    5. if/then
      • sequentiell

      Code: Alles auswählen

      if <Bedingung_1>        then <Sequentielle Anweisungen 1>;
      elseif <Bedingung_2>    then <Sequentielle Anweisungen 2>;
      elseif <Bedingung_3>    then <Sequentielle Anweisungen 3>;
      else                         <Sequentielle Anweisungen n>;
      end if;
      
      Bedingung muss vom Typ Boolean sein
    6. case/is
      • wie with/select nur in sequentiell

      Code: Alles auswählen

      case <testsignal> is
          when <Wert_1> => <Sequentielle Anweisungen 1>;
          when <Wert_2> => <Sequentielle Anweisungen 2>;
          when <Wert_3> => <Sequentielle Anweisungen 3>;
          when others   => <Sequentielle Anweisungen n>; 
      end case;
      
dvajda
Site Admin
Beiträge: 352
Registriert: Mo Feb 06, 2023 5:13 pm

Re: VHDL

Beitrag von dvajda »

Code: Alles auswählen

-- ich habe jetzt erst mal das:

use std.textio.all;

entity myhello is
port 
(
    a0, a1, a2, a3: inout bit;
    b0, b1, b2, b3: in bit;
    s:              in bit;
    y0, y1, y2, y3: out bit
);
end;


architecture behaviour of myhello is
begin
    process
        variable l : line;
    begin
        if (a0='0') then 
            a0 <= '1';
            write (l, String'("Hello world!"));
            writeline (output, l);
        else 
            a0 <= '0';
            write (l, String'("das ist ein Standardspruch"));
            writeline (output, l);
        end if;
        wait;
    end process;
end behaviour;
dvajda
Site Admin
Beiträge: 352
Registriert: Mo Feb 06, 2023 5:13 pm

Re: VHDL

Beitrag von dvajda »

Code: Alles auswählen

-- 0001 VHDL - Multiplexer, Adder, Fulladder, Paralleladder, Coder, Decoder
-- without architecture and entity - this will be in 0002 - VHDL

-- Multiplexer 

    signal a: bit_vector (3 downto 0);
    signal b: bit_vector (3 downto 0);
    signal c: bit_vector (3 downto 0);
    
    process (cout)
    begin
        a <= ain;
        b <= bin;
        if (clk='0') then
            c <= a;
        elseif (clk='1') then
            c <= b;
        end if;
        cout <= c;
    end process;
            
        
dvajda
Site Admin
Beiträge: 352
Registriert: Mo Feb 06, 2023 5:13 pm

Re: VHDL

Beitrag von dvajda »

Code: Alles auswählen


-- 0001 VHDL - Multiplexer, Halfadder, Fulladder, Paralleladder, Coder, Decoder
-- without architecture and entity - this will be in 0002 - VHDL

-- Multiplexer 

    signal a: bit_vector (3 downto 0);
    signal b: bit_vector (3 downto 0);
    signal c: bit_vector (3 downto 0);
    
    process (cout)
    begin
        a <= ain;
        b <= bin;
        if (clk='0') then
            c <= a;
        elseif (clk='1') then
            c <= b;
        end if;
        cout <= c;
    end process;
            
-- Adder

    signal a: bit;
    signal b: bit;
    signal c: bit;
    signal s: bit;
    
    process (cout, sout)
    begin
        a <= ain;
        b <= bin;
        c <= a xor b;
        s <= a and b;
        cout <= c;
        sout <= s;
    end process;
        
        
dvajda
Site Admin
Beiträge: 352
Registriert: Mo Feb 06, 2023 5:13 pm

Re: VHDL

Beitrag von dvajda »

Code: Alles auswählen

-- 0001 VHDL - Multiplexer, Halfadder, Fulladder, Paralleladder, Coder, Decoder
-- without architecture and entity - this will be in 0002 - VHDL

-- Multiplexer 

    signal a: bit_vector (3 downto 0);
    signal b: bit_vector (3 downto 0);
    signal c: bit_vector (3 downto 0);
    
    process (cout)
    begin
        a <= ain;
        b <= bin;
        if (clk='0') then
            c <= a;
        elseif (clk='1') then
            c <= b;
        end if;
        cout <= c;
    end process;
            
-- Adder

    signal a: bit;
    signal b: bit;
    signal c: bit;
    signal s: bit;
    
    process (cout, sout)
    begin
        a <= ain;
        b <= bin;
        c <= a xor b;
        s <= a and b;
        cout <= c;
        sout <= s;
    end process;

-- Fulladder 

    signal a: bit;
    signal b: bit;
    signal c: bit;
    signal s0: bit;
    signal s1: bit;
    
    process (cout, sout)
    begin
        a <= ain;
        b <= bin;
        s0 <= sin;
        
        c <= a xor b xor s0;
        s1 <= (a and b) or (a or b) and c;
        
        cout <= c;
        sout <= s1;
    end process;
Antworten