[[dt-code-sequ]]

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dt-code-sequ [2011/07/14 15:56]
beckmanf Asynchroner Reset eingefügt
dt-code-sequ [2014/01/08 11:02] (current)
beckmanf flipflop process -> concurrent
Line 16: Line 16:
   in_i     : ​       in std_ulogic; ​   in_i     : ​       in std_ulogic; ​
   out_o    :        out std_ulogic);​   out_o    :        out std_ulogic);​
-end;+end entity flipflop;
  
 architecture rtl of fliplfop is architecture rtl of fliplfop is
Line 33: Line 33:
 out_o <= q;  out_o <= q; 
  
-end; +end architecture rtl;  
 +</​code>​ 
 + 
 +Ein Flipflop kann alternativ mit einem concurrent statement beschrieben werden. ​  
 + 
 +<code vhdl> 
 +entity flipflop is  
 +  port( 
 +  clk      :        in std_ulogic;​ 
 +  reset_n ​ :        in std_ulogic;​ 
 +  in_i     : ​       in std_ulogic;  
 +  out_o    :        out std_ulogic);​ 
 +end entity flipflop; 
 + 
 +architecture rtl of fliplfop is 
 +  signal q : std_ulogic;​ 
 +begin 
 + 
 +q <= '​0'​ when reset_n = '​0'​ else in_i when rising_edge(clk);​  
 + 
 +out_o <= q
  
 +end architecture rtl; 
 </​code>​ </​code>​
   ​   ​
 == Flipflop, dessen Zustand in jedem Takt invertiert wird == == Flipflop, dessen Zustand in jedem Takt invertiert wird ==
  
-In diese Bespiel wird der Ausgang des Flipflops mit einem Inverter an den Eingang zurückgeführt. ​+In diesem ​Bespiel wird der Ausgang des Flipflops mit einem Inverter an den Eingang zurückgeführt. ​
  
 <code vhdl> <code vhdl>
Line 48: Line 69:
 begin begin
  
-ff_p : process(clk,​ reset_n) +q <= '​0' ​when reset_n ​= '​0' ​else new_q when rising_edge(clk); ​
-begin +
-  if reset_n ​= '​0' ​then +
-    q <= '​0'​+
-  elsif rising_edge(clk) ​then +
-    q <= new_q;  +
-  end if; +
-end process ff_p;+
  
 new_q <= not q;  new_q <= not q; 
  
 +end architecture rtl; 
 +
 +</​code>​
 +
 +== Beispiel: Seltsamer Zähler ==
 +
 +Was macht die Schaltung in diesem folgenden Beispiel? Versuchen Sie zunächst die Funktion aus dem VHDL Code zu erarbeiten.
 +
 +
 +<code vhdl>
 +library ieee;
 +use ieee.std_logic_1164.all;​
 +
 +-- Strange Counter
 +
 +entity strangecnt is 
 +  port (
 +    clk                     : in std_ulogic;
 +    rst_n                   : in std_ulogic;
 +    s_i                     : in std_ulogic;
 +    cnt0_o ​                 : out std_ulogic;
 +    cnt1_o ​                 : out std_ulogic);​
 end;  end; 
  
 +architecture rtl of strangecnt is
 +  signal c0, c0_new : std_ulogic;
 +  signal c1, c1_new : std_ulogic;
 +  signal l : std_ulogic;
 +begin
 +  ​
 +  c0 <= '​0'​ when rst_n = '​0'​ else c0_new when rising_edge(clk); ​
 +  c1 <= '​0'​ when rst_n = '​0'​ else c1_new when rising_edge(clk);​
 +
 +  c0_new <= not c0;
 +  l <= c0 xor c1;
 +  cnt0_o <= c0;
 +  cnt1_o <= c1 xor c0; 
 +  c1_new <= l when s_i = '​1'​ else not l;
 +
 +end architecture rtl; 
 </​code>​ </​code>​
 +
 +a) Zeichnen Sie die Schaltung! Handelt es sich um einen Moore oder Mealy Automaten?
 +
 +b) Zeichnen Sie den Graphen!
 +
 +c) Zeichnen Sie ein Timingdiagramm! ​
 +
 +
 +Dieses Codebeispiel ist funktional ein steuerbarer Zähler. Wenn s_i=0 ist, dann zählt der Zähler vorwärts, ansonsten rückwärts. Nur ist hier eine ungewöhnliche Zustandskodierung gewählt, die dann aber zusammen mit der Ausgangslogik den Zähler ergibt.  ​
  
  
  • dt-code-sequ.1310651815.txt.gz
  • Last modified: 2011/07/14 15:56
  • by beckmanf