Forum: FPGA, VHDL & Co. iCEcube2 / @N:Can't find top module!


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von U.G. L. (dlchnr)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich komm' grad nicht weiter - ich habe zwei Dateien, eine Datei 
(SR_RS_CE.vhd) mit der Beschreibung eines Scheiberegisters mit ReSet und 
ClockEnable und eine Datei (SR_RS_CE_TST.vhd), in der dieses 
Scheiberegister instanziiert wird und die die Testumgebung für das 
Schieberegister realisiert.
Ich erhalte u.a. die Fehlermeldung "@N:Can't find top module!", finde 
aber keine Möglichkeit, ein Top Module zu definieren.
Ich gestehe auch, dass ich das Hierarchiekonzept von VHDL noch nicht
verstehe - man "soll" Datei wie die darin enthaltenen Entitäten 
benennen, aber allein das "soll" statt "muss" belegt, dass darauf nicht 
ein Mechanismus basieren kann, der das C-include ersetzt?
Der width-Fehler ist mittlerweile geklärt!
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.std_logic_unsigned.all;
4
use IEEE.NUMERIC_STD.ALL;
5
6
entity SR_RS_CE_TST is
7
end SR_RS_CE_TST;
8
9
architecture behavioral of SR_RS_CE_TST is
10
11
constant cycles : integer := 10;
12
signal lss : std_logic := '1';  -- aktive Low Slave Select
13
signal hss : std_logic := '0';  -- aktive Hgh Slave Select
14
signal res : std_logic := '1';  -- RESet of main shift reg
15
signal sck : std_logic := '0';  -- Simulation ClocK
16
signal clk : std_logic := '0';  -- SCI CLocK
17
signal ena : std_logic := '0';  -- ENAble clock of main shift reg
18
signal din : std_logic := '0';  -- Data IN main shift reg
19
signal reg : std_logic_vector(6 downto 0);
20
signal dat : std_logic_vector(47 downto 0) := x"9EAA_CC00_3355";
21
22
component SR_RS_CE is
23
  generic (width : integer := 8);
24
  port(ck : in   std_logic;
25
       ce : in   std_logic;
26
       rs : in   std_logic;
27
       di : in   std_logic;
28
       do : out  std_logic_vector(width-1 downto 0));
29
end component;
30
31
for all : SR_RS_CE use entity work.SR_RS_CE(behavioral);
32
33
begin
34
35
  hss <= not lss;
36
  res <= not hss;
37
  clk <= not lss and sck;
38
  ena <= not reg(0);
39
  din <= dat(47);
40
  
41
  SR : SR_RS_CE generic map (width => 7) port map (clk,ena,res,din,reg);
42
43
  process
44
  begin
45
    for i in 1 to cycles loop
46
      sck <= not sck;
47
      wait for 25 ns;
48
      sck <= not sck;
49
      wait for 25 ns;
50
    end loop;
51
    wait;  -- simulation stops here
52
  end process;
53
  
54
  process
55
  variable cnt : integer range 0 to 63 := 0;
56
  begin
57
    if falling_edge(sck) then
58
      if (lss='0') then
59
        dat(47 downto 1) <= dat(46 downto 0);
60
      end if;
61
      if (cnt=1) then
62
        lss <= '0';
63
      end if;
64
      if (cnt=9) then
65
        lss <= '1';
66
      end if;
67
      cnt := cnt + 1;
68
    end if;
69
  end process;
70
  
71
end behavioral;

: Bearbeitet durch User
von U.G. L. (dlchnr)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Seltsanerweise scheint iCEcube2 die Datei SR_RS_CE_TST.vhd sogar als 
Top-modul zu betrachten, stößt sich aber daran, das die Test-entity 
keine Ports hat, was doch üblich ist?
Ich könnte so eine Meldung verstehen, wenn ich was generieren wollte, 
was in ein physikalischen Device soll, aber ich will doch nur etwas 
generieren, mit dem ich 'ne simulation fahren kann?

: Bearbeitet durch User
von dlchnr (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Das Ganze läuft offenbar anders als von mir erwartet - der simulator 
bringt anscheinend seinen eigenen VHDL-Compiler mit - und nur diesem 
muss auch die Testbench-Datei übergeben werden.

von Duke Scarring (Gast)


Bewertung
0 lesenswert
nicht lesenswert
dlchnr schrieb:
> der simulator
> bringt anscheinend seinen eigenen VHDL-Compiler mit - und nur diesem
> muss auch die Testbench-Datei übergeben werden.
Ja, so ist es.


U.G. L. schrieb:
> use IEEE.std_logic_unsigned.all;
> use IEEE.NUMERIC_STD.ALL;
beep *beep* beep

Bitte nur die ieee.numeric_std verwenden.
Begründung siehe hier: Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"


> component SR_RS_CE is
>   generic (width : integer := 8);
>   port(ck : in   std_logic;
>        ce : in   std_logic;
>        rs : in   std_logic;
>        di : in   std_logic;
>        do : out  std_logic_vector(width-1 downto 0));
> end component;
Für eine Übung ist es ok mal ein Register zu beschreiben.
In praktischen FPGA-Designs würde ich mit Tippen nicht fertig werden, 
wenn ich für jedes primitive Logikelement (AND, OR etc.) oder FF eine 
extra Instanz anlegen würde.

Duke

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Duke Scarring schrieb:
> In praktischen FPGA-Designs würde ich mit Tippen nicht fertig werden,
> wenn ich für jedes primitive Logikelement (AND, OR etc.) oder FF eine
> extra Instanz anlegen würde.
Ich habe schon mal so ein Anfängerdesign (mit Namen "Diplomarbeit") zur 
Durchsicht und zum Gegenlesen bekommen. Da wurde tatsächlich auf dieser 
Ebene per Hand das ganze Design realisiert. Absolut undurchschaubar und 
unwartbar. Ich habe dann als kleine Fingerübung gezeigt, wie man 6 
Dateien dieses Designs auf von über 3000 auf knapp 50 Zeilen reduzieren 
könnte.
Das passiert, wenn ein Student mit Hochschulwissen ohne Betreuung auf 
FPGAs losgelassen wird... ;-)

von Holger (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@U.G. L. (dlchnr)
Damit habe ich mit Aldec erfolgreich angefangen...
Link: Part1 Part2
https://www.youtube.com/watch?v=_4cEZm5CXBo


Gruss Holger.

von U.G. L. (dlchnr)


Bewertung
0 lesenswert
nicht lesenswert
Duke Scarring schrieb:
> Bitte nur die ieee.numeric_std verwenden.
> Begründung siehe hier: Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"


Wie ist diesbezüglich die Angabe im iCEcube2 User Manual zu bewerten, 
beim Einsatz des Active-HDL zu ergänzen:

library ice;
use ice.vcomponent_vital.all;

("Add the following library declaration in the HDL file. This library 
contains all the iCE primitive VHDL functional and timing models.")

von dlchnr (Gast)


Bewertung
0 lesenswert
nicht lesenswert
>> use IEEE.std_logic_unsigned.all;
>> use IEEE.NUMERIC_STD.ALL;
> beep beep beep
>
> Bitte nur die ieee.numeric_std verwenden.
> Begründung siehe hier: Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"

Also ohne "use ieee.std_logic_unsigned.all;" vermag Aldec Active-HDL auf 
einen std_logic_vector kein + auszuführen!?

# Error: COMP96_0071: SPIctrl.vhd : (83, 22): Operator "+" is not 
defined for such operands.
# Error: COMP96_0077: SPIctrl.vhd : (83, 16): Undefined type of 
expression. Expected type 'STD_LOGIC_VECTOR'.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
dlchnr schrieb:
> Also ohne "use ieee.std_logic_unsigned.all;" vermag Aldec Active-HDL auf
> einen std_logic_vector kein + auszuführen!?
Man rechnet auch gar nicht mit std_logic_vector, sondern mit signed, 
unsigned un integer. Ein std_logic_vector ist nur ein undefinierten 
Haufen Bits ohne definierte Ordnung. Oder kannst du mir sagen, was das 
hier ist:
"1100"
Der der Wert 12? Oder der Wert -5?

Mit signed und unsigned wäre Alles sonnenklar. Und zum Rechnen und 
Konvertieren reicht die numeric_std locker aus. Zudem ist sie 
supersimpel zu merken. Auf jeden Fall wesentlich besser als das 
inkonsistente conv_integr() Gemurkse der std_logic_arith.

Sieh dir das mal an:
http://www.lothar-miller.de/s9y/categories/16-Numeric_Std

von dlchnr (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ok - d.h., sowie Lattice einen Counter implementiert 
(www.latticesemi.com/view_document?document_id=50795), sollte man es 
nicht machen!

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Man kann es genau so wie im letzten Jahrtausend und in Amerika mit der 
veralteten std_logic_arith Lib machen. ODER eben mit der numeric_std.
Aber niemals nie mit BEIDEN zusammen.

Klick einfach mal auf den oben verlinkten Thread. Dort und in den darin 
enthaltenen Links wird der Hintergrund erklärt...

: Bearbeitet durch Moderator
von dlchnr (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hab' den Link selbstverstänlich angeklickt, da ich es nicht "wie im 
letzten Jahrhundert" machen möchte ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.