Hallo,
Da ich gerade anfange mich mit VHDL zu beschäftigen probiere ich
gerade viel mit dem Xilinx-Webpack und Altera Quartus herum. Dabei
ist mir neben vielen anderen Eigenheiten aufgefallen das Quartus
offensichtlich deutlich anderen RTL-Kode erzeugt. Aus dem folgenden
Kode erzeugt das Xilinx Webpack eine Lookuptable in einem Blockram,
Quartus dagegen eine Kette von 16 Multiplexern.
1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 |
|
4 |
|
5 | entity BinTo7Seg is
|
6 | port(InBin : in std_logic_vector(3 downto 0);
|
7 | Out7Seg : out std_logic_vector(6 downto 0) );
|
8 | end BinTo7Seg;
|
9 |
|
10 | architecture behavioral of BinTo7Seg is
|
11 | begin
|
12 | Out7Seg <= "1000000" when InBin = "0000" else
|
13 | "1111001" when InBin = "0001" else
|
14 | "0100100" when InBin = "0010" else
|
15 | "0110000" when InBin = "0011" else
|
16 | "0011001" when InBin = "0100" else
|
17 | "0010010" when InBin = "0101" else
|
18 | "0000010" when InBin = "0110" else
|
19 | "1111000" when InBin = "0111" else
|
20 | "0000000" when InBin = "1000" else
|
21 | "0010000" when InBin = "1001" else
|
22 | "0001000" when InBin = "1010" else
|
23 | "0000011" when InBin = "1011" else
|
24 | "1000110" when InBin = "1100" else
|
25 | "0100001" when InBin = "1101" else
|
26 | "0000110" when InBin = "1110" else
|
27 | "0001110";
|
28 | end behavioral;
|
Die derzeitigen Entwürfe sind sicher unkritisch, aber irgenwie kommt
mir diese Variante mit den Multiplexern ziemlich ineffizient
hinsichtlich Ressourcen und Geschwindigkeit vor. Wenn die Logikelemente
eh aus Lookuptables bestehen könnte man die doch zusammenfassen,
oder übersehe ich da etwas?
An einer anderen Stelle fügt Quartus 3 Multiplexer mit identischen
Eingängen ein anstatt die Selectsignale miteinander zu verknüpfen.
Überhaupt scheint Quartus nur Multiplexer, Adder, Fli-Flops und
Vergleicher zu kennen. Ich habe im RTL-View noch keine aufgelöste
Logik gefunden. Gibt es irgendwelche Schalter wo ich die
Synthesergebnisse beeinflußen kann?
Jens