Hallihallo zusammen,
ich tüftel gerade ein bisschen an VHDL rum. (AVR-Softcore in einen
Spartan-3E).
Dazu verwende ich ISE 12.3.
Mein Top-Modul hat momentan zwei Inputs: die 50MHz Clock und einen
Reset-Taster.
Die Clock geht dann direkt zu einem DCM, der 20MHz produziert, was dann
weiter zu den einzelnen Komponenten geht.
Soweit so übersichtlich.
Hier mal die wichtigen VHDL-Schnipsel:
Top-Level:
1 | entity AVR_SoC_Top is
|
2 | port(
|
3 | CLK_50 : in std_logic;
|
4 | Btn_North : in std_logic
|
5 | );
|
6 | end AVR_SoC_Top;
|
Der DCM:
1 | --Digital Clock Manager:
|
2 | Inst_Clock_Gen : Clock_Gen port map(
|
3 | CLKIN_IN => CLK_50, --50MHz input from the board
|
4 | RST_IN => '0', --don't reset the DCM
|
5 | CLKFX_OUT => CLK_20xC, --20MHz Output
|
6 | CLKFX180_OUT => CLK_20_180xC, --20MHz, 180deg phase Shifted Output
|
7 | CLKIN_IBUFG_OUT => open ,
|
8 | CLK0_OUT => open, --no use for the 50MHz clock
|
9 | LOCKED_OUT => DCM_lockedxS --use for Reset
|
10 | );
|
Und die Reset-Verwurstung:
1 | --Assign Reset from Button to signal:
|
2 | Assert_Reset: process(DCM_lockedxS, Btn_North) is
|
3 | begin
|
4 | if DCM_lockedxS = '0' or Btn_North = '1' then
|
5 | ResetxS <= '1';
|
6 | AVR_ResetxS <= '0';
|
7 | else
|
8 | ResetxS <= '0';
|
9 | AVR_ResetxS <= '1';
|
10 | end if;
|
11 |
|
12 | end process Assert_Reset;
|
Und zuletzt noch das UCF:
1 | NET "CLK_50" LOC = "C9" |IOSTANDARD = LVTTL;
|
2 | NET "CLK_50" PERIOD = 20 ns HIGH 50%;
|
3 | # Press buttons
|
4 | # Must have pull DOWN resistors to provide Low when not pressed.
|
5 | #
|
6 | NET "Btn_North" LOC = "V4" |IOSTANDARD = LVTTL |PULLDOWN;
|
Nun das Problem:
Die Synthese funktioniert Tiptop, ich kann das Ganze auch ohne Probleme
im Isim simulieren und es tut, was es soll.
Aber: Sobald ich Implentieren möchte, macht der mapper das:
WARNING:MapLib:701 - Signal CLK_50 connected to top level port CLK_50
has been
removed.
WARNING:MapLib:701 - Signal Btn_North connected to top level port
Btn_North has
been removed.
WARNING:MapLib:39 - The timing specification "PERIOD=20000 pS HIGH 50%"
on net
"CLK_50" has been discarded, because the net was optimized out of the
design.
Und als Konsequenz:
ERROR:Pack:198 - NCD was not produced. All logic was removed from the
design.
This is usually due to having no input or output PAD connections in
the
design and no nets or symbols marked as 'SAVE'. You can either add
PADs or
'SAVE' attributes to the design, or run 'map -u' to disable logic
trimming in
the mapper. For more information on trimming issues search the
Xilinx
Answers database for "ERROR:Pack:198" and read the Master Answer
Record for
MAP Trimming Issues.
Hä, wieso schneidet der mir diese beiden Signale ab?!? Die werden doch
offensichtlich gebraucht...?(Simulation klappt ja und da funktionieren
die Signale auch...) Wieso wirft er die raus?
Stehe etwas auf dem Schlauch... bzw. begreife nicht....
Vielleicht könnt Ihr mir da ja weiterhelfen... ;-)
Herzlichen Gruss und schonmal vielen Dank
Mario