[[dt-code]]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
dt-code [2010/12/20 13:42]
beckmanf created
dt-code [2011/03/29 13:09]
beckmanf end component eingefügt
Line 42: Line 42:
       b_i : in std_ulogic;       b_i : in std_ulogic;
       y_o : out std_ulogic);​       y_o : out std_ulogic);​
 +  end component; ​     ​
       ​       ​
   component or_gate   component or_gate
Line 48: Line 49:
       b_i : in std_ulogic;       b_i : in std_ulogic;
       y_o : out std_ulogic);​       y_o : out std_ulogic);​
-  ​+  ​end component;​ 
 +    ​
   component inv_gate   component inv_gate
     port(     port(
       a_i : in std_ulogic;       a_i : in std_ulogic;
       y_o : out std_ulogic);​       y_o : out std_ulogic);​
-      ​+  end component;​ 
 +        ​
   signal s1 : std_ulogic;   signal s1 : std_ulogic;
   signal s2 : std_ulogic;   signal s2 : std_ulogic;
Line 86: Line 89:
  
 </​code>​ </​code>​
 +
 +== Funktionale Beschreibung mit Concurrent Signal Assignments ==
 +
 +Eine alternative Beschreibung des Multiplexers mit Funktionen und 
 +Concurrent Signal Assignments. Die Funktionen "​not"​ "​and",​ "​or"​ und andere
 +sind im package ieee.std_logic_1164 definiert. ​
 +
 +<code vhdl>
 +
 +architecture rtl-1 of mux is
 +signal s1, s2, s3 : std_ulogic;
 +begin
 +
 +s1 <= not s_i;
 +s2 <= s1 and a_i;
 +s3 <= s_i and b_i;
 +y_o <= s2 or s3;  ​
 +
 +end rtl-1
 +</​code>​
 +
 +== Funktionale Beschreibung mit einem Prozess ==
 +
 +Ein Prozess enthält sequentielle Anweisungen. Ein Prozess wird immer ausgeführt,​ wenn
 +sich ein Signal in der "​sensitivity list" ändert. ​
 +
 +Die Sequenz der Anweisungen in einem Prozess entspricht nicht einer zeitlichen Sequenz. ​
 +Das bedeutet der Prozess berechnet die neuen Werte der Signale und diese werden dann alle
 +zeitgleich zugewiesen. Im folgenden Beispiel wurde die Anweisung s3 <= s_i and b_i durch einen
 +Prozess ersetzt. Die Funktion hat sich dadurch nicht geändert. ​
 +
 +<code vhdl>
 +
 +architecture rtl-2 of mux is
 +signal s1, s2, s3 : std_ulogic;
 +begin
 +
 +s1 <= not s_i;
 +s2 <= s1 and a_i;
 +-- s3 replaced with process
 +y_o <= s2 or s3; 
 +
 +s3_and_p : process (s_i, b_i)
 +begin
 +  s3 <= '​0';​
 +  if s_i = '​1'​ and b_i = '​1'​ then 
 +    s3 <= '​1';​
 +  end if;
 +end process s3_and_p;
 +
 +end rtl-2
 +</​code>​
 +
 +== Komplette funtkionale Beschreibung in einem Prozess ==
 +
 +Alternativ lässt sich auch die ganze Multiplexerfunktion in einem
 +Prozess beschreiben. Die Lesbarkeit wird durch diese Beschreibung häufig erhöht. ​
 +
 +<code vhdl>
 +
 +architecture rtl-3 of mux is
 +
 +begin
 +
 +mux_p : process (s_i, a_i, b_i)
 +begin
 +  y_o <= '​0';​
 +  if s_i = '​1'​ then
 +    y_o <= b_i; 
 +  else
 +    y_o <= a_i; 
 +  end if;
 +end process mux_p;
 +
 +end rtl-3
 +</​code>​
 +
 +== Prozess mit einem case statement ==
 +
 +Alternativ lässt sich auch ein case statement in einem Prozess verwenden. ​
 +
 +<code vhdl>
 +
 +architecture rtl-4 of mux is
 +
 +begin
 +
 +mux_p : process (s_i, a_i, b_i)
 +begin
 +  y_o <= '​0';​
 +  case s_i is
 +    when '​0' ​   => y_o <= b_i;
 +    when '​1' ​   => y_o <= a_i;
 +    when others => y_o <= '​0';​
 +  end case;
 +end process mux_p;
 +
 +end rtl-4
 +</​code>​
 +
 +== Conditional Signal Assignment ==
 +
 +Dann gibt es noch das Conditional Signal Assignment. ​
 +
 +<code vhdl>
 +
 +architecture rtl-5 of mux is
 +
 +begin
 +
 +y_o <= b_i when s_i = '​1'​ else a_i; 
 +
 +end rtl-5
 +</​code>​
 +
 +== Selected Signal Assignment ==
 +
 +Noch eine alternative ist das selected signal assignment. ​
 +
 +<code vhdl>
 +
 +architecture rtl-6 of mux is
 +
 +begin
 +
 +with s_i select
 +  y_o <= a_i when '​0',​
 +  y_o <= b_i when '​1';​
 +
 +end rtl-6
 +</​code>​
 +
 +
 +
 +
 +
 +
  • dt-code.txt
  • Last modified: 2024/03/12 00:19
  • by beckmanf