Forum: FPGA, VHDL & Co. FlipFlops für Ausgänge einer Entity


von Max (Gast)


Lesenswert?

Hallo!

Wenn ich einen getakteten Prozess erstelle, dann erzeugt mir Xilinx ISE 
für alle out Ports meiner Entity immer D-FF.
Dieses Beispiel verdeutlicht dies:
Ich würde gerne folgendes haben: FF für i ==> kombinatorische Logik ==> 
Output auf ValOut
Xilinx ISE erzeugt mir aber folgendes:
FF für i ==> kombinatorische Logik ==> FF ==> Output auf ValOut

Mir ist klar, warum hier ein extra FF angelegt wird, jedoch stehe ich 
irgendwie auf dem Schlauch und finde keine Möglichkeit diese extra FF zu 
eliminieren.
1
entity x is
2
    Port ( Clk : in  STD_LOGIC;
3
           Reset : in  STD_LOGIC;
4
           ValOut : out  STD_LOGIC_VECTOR(3 downto 0)
5
    );
6
end x;
7
8
architecture Behavioral of x is
9
10
  signal i : integer range 0 to 2;
11
  
12
begin
13
14
  process(Clk, Reset) is
15
  begin
16
    if Reset = '1' then
17
      i <= 0;    
18
    elsif rising_edge(clk) then
19
      case i is
20
        when 0 => ValOut <= b"1011";
21
        when 1 => ValOut <= b"0101";
22
        when 2 => ValOut <= b"1101";
23
        when others => ValOut <= (others => 'X');
24
      end case;
25
      
26
      if i = 3 then
27
        i <= 0;
28
      else 
29
        i <= i + 1;
30
      end if;
31
      
32
    end if;
33
  end process;
34
  
35
end Behavioral;

Danke für eure Hilfe.

von SeriousSam (Gast)


Lesenswert?

Dann solltest du ValOut nicht im getakteten process zuweisen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Dann solltest du ValOut nicht im getakteten process zuweisen.

Probiers doch mal so:
1
entity x is
2
    Port ( Clk : in  STD_LOGIC;
3
           Reset : in  STD_LOGIC;
4
           ValOut : out  STD_LOGIC_VECTOR(3 downto 0)
5
    );
6
end x;
7
8
architecture Behavioral of x is
9
  signal i : integer range 0 to 3 := 0;
10
begin
11
  process(Clk, reset) is
12
  begin
13
    if Reset = '1' then
14
        i <= 0;    
15
    elsif rising_edge(clk) then
16
      if i = 3 then
17
        i <= 0;
18
      else 
19
        i <= i + 1;
20
      end if;
21
    end if;
22
  end process;
23
  
24
  ValOut <= b"1011" when i=0 else
25
            b"0101" when i=1 else
26
            b"1101" when i=2 else
27
            (others => 'X');
28
end Behavioral;


Auch daran solltest du auch noch arbeiten:
1
  signal i : integer range 0 to 2;
2
  :
3
      if i = 3 then 
4
       :

von Henk ten Bakker (Gast)


Lesenswert?

Wozu manche immer die Integers brauchen, habe ich noch nie genutzt

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Henk ten Bakker wrote:
> Wozu manche immer die Integers brauchen, habe ich noch nie genutzt
Mit Integer kann man (ohne Tricks) richtig rechnen.
Zähler lassen sich schöner schreiben.
Und Integer wird als Index für ein Array benutzt.

Wozu einen Schraubenschlüssel nehmen?
Ich schaff das mit dem Hammer   ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.