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!
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?
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.
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
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... ;-)
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.")
>> 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'.
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
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...