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] – Asynchroner Reset eingefügt beckmanfdt-code-sequ [2014/01/08 11:02] (current) – flipflop process -> concurrent beckmanf
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