FlipFlops für Ausgänge einer Entity

Gast #1090826
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.
Moderator (Firma: Titel) Persönliche Seite #1091039
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
       :

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren