Forum: FPGA, VHDL & Co. ModelSim Unconstrained Array Element VHDL 2008


von Juergen J. (jungnickel)


Lesenswert?

Hallo ich habe folgendes Problem.

Ich habe folgendes package deklariert:
1
package modulator_top_level_defs is
2
3
4
  -- arrays of std_logic_vectors
5
  type t_std_logic_vector_array is array (natural range<>) of std_logic_vector;
6
  type t_signed_array is array (natural range<>) of signed;
7
  type t_unsigned_array is array (natural range<>) of unsigned;
8
9
end package modulator_top_level_defs;

ModelSim 10.0a leider noch keine unconstrained Array-Elemente(VHDL 
2008).
Synthesefähig ist es mit Quaruts 10.1 .

Ein zweidimensionales array(m downto 0, n downto 0) of std_logic 
scheidet leider aus da ich die einzelnen zeilen als std_logic_vector 
(unsigned, signed) haben möchte und ich die Dimensionen über generics 
bestimmen will.

Ich brauche dieses Package für mehrere Module da die Module als 
Eingangs- bzw. Ausgangsdatentyp diese Typen haben.

Bsp:
1
entity x is
2
3
  generic( 
4
    g_NOF_STAGES  : natural  := 4;
5
    g_IQ_WIDTH    : natural  := 18
6
  );
7
  
8
  port( i_clk         : in  std_logic;             -- sample clock of input data
9
        i_rst_b       : in  std_logic; 
10
        i_data_i      : in  std_logic_vector(g_IQ_WIDTH-1 downto 0);   -- I-part of complex signal
11
        i_data_q      : in  std_logic_vector(g_IQ_WIDTH-1 downto 0);   -- Q-part of complex signal
12
        
13
        i_step_value : in  std_logic_vector(g_IQ_WIDTH-1 downto 0);
14
        
15
        o_data_i      : out t_std_logic_vector_array(g_NOF_STAGES-1 downto 0)(g_IQ_WIDTH-1 downto 0 );
16
        o_data_q      : out t_std_logic_vector_array(g_NOF_STAGES-1 downto 0)(g_IQ_WIDTH-1 downto 0 )
17
  );
18
      
19
end entity x;


Jetzt ist meine Frage wie kann ich das Package bzw Entity so umschreiben 
dass ich das fertige Modul mit ModelSim simulieren kann?

Viele Grüße und schon mal danke.

Jürgen

von SuperWilly (Gast)


Lesenswert?

Indem Du auf Modelsim 10.1 wartest ;-)
Erst dort werden "unconstrained arrays of unconstrained 
std_logic_vector" unterstützt.

Vorerst kannst du das vollgenerisch nicht simulieren!

VG, SuperWilly

von Juergen J. (jungnickel)


Lesenswert?

Ne des würd mir dann doch zu lang dauern ;-)

Gibt es dann irgend ne Möglichkeit mehrere std_logic zu einem 
std_logic_vector zusammenzufassen
1
type t_std_logic_matrix is array ( m downto 0 , n downto 0) of std_logic;
2
3
signal x : t_std_logic_matrix( m downto 0 , n downto 0);
4
signal y : std_logic_vector(n downto 0);
5
6
y <= x(1);

also einfach eine zeile mit std_logic auswählen und diese zu nem 
std_logic_vector casten?

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Juergen Jungnickel schrieb:
> Ne des würd mir dann doch zu lang dauern ;-)
Sicher? Schau doch mal auf model.com nach...

Duke

von SuperWilly (Gast)


Lesenswert?

>Sicher? Schau doch mal auf model.com nach...

Bingo :-))

von Juergen J. (jungnickel)


Lesenswert?

Ah ok. Aber ich verwende es nicht für mich privat sondern schreibe 
gerade meine Diplomarbeit und da gibts halt nur ModelSim 10.0a und ich 
denk des 10.1 wird nicht eingeführt da bei mir in der Firma mehr und 
mehr auf Aldec Riviera gesetzt wird.

Außerdem müssten dann alle meine Kollegen die meinen Code nutzen wollen 
auf ModelSim 10.1 umstellen was auch wieder nicht so toll wär.

Aber danke

von SuperWilly (Gast)


Lesenswert?

Ja dann simuliere dein Design doch mit Aldec!

VG, SuperWilly

von Juergen J. (jungnickel)


Lesenswert?

Ok dann werd ich mal Aldec installieren und schaun ob ich mich zurecht 
finde. Bin noch ein relativer Neuling was VHDL Simulationen angeht.


Was ist euerer Meinung nach der bessere Simulator?

bzw gibt es überhaupt eine Eier legende Wollmilchsau?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Juergen Jungnickel schrieb:
> Bin noch ein relativer Neuling was VHDL Simulationen angeht.
Ich behaupte: du bist auch noch ein relativer Anfänger mit VHDL....
Wie ich darauf komme?
Weil du alles möglichst weit möglichst generisch machen willst. Darum. 
;-)

Ich mache das gerne andersrum: erst wird mal ein spezieller Fall gelöst.
Anschliessend wird geschaut, ob es sich überhaupt lohnt, das Ganze 
generisch aufzuziehen. Und falls ja, dann habe ich am speziellen 
Beispiel soviel gelernt, dass idR. keine besonderen Features (die erst 
in der nächsten Softwareversion drin sind) benötigt werden. Denn du mußt 
dir die Fragen stellen lassen:
Wie haben die das vor 3 Jahren gemacht?
Ist deine Lösung besser/schneller/felxibler?

> Was ist euerer Meinung nach der bessere Simulator?
Der, mit dem du deine Arbeit am einfachsten erledigt bekommst.

von Juergen J. (jungnickel)


Lesenswert?

> Wie haben die das vor 3 Jahren gemacht?
Da gabs keinen und das ist auch so mit meinem Betreuer abgesprochen ob 
das sich lohnt.


> Ist deine Lösung besser/schneller/felxibler?
Ja flexibler auf jedenfall! Weil ich über einen genric mir die 
Stufenanzahl(g_NOF_STAGES) von parallelen Verbindungen zwischen den 
Untermodulen flexibel gestalten kann. Dies ist wichtig da ich zwar 
momentan nur 4 parallele Verbindungen brauch, aber in der endgültigen 
Version vermutlich 8 oder 16 und bevor ich dann mit endlos vielen 
Einzelsignalen hantier hab ich bequem meine generate-Anweisungen.

Außerdem ist dießer datentyp nur ein interner.
1
entity top_level is
2
generic(
3
  g_IQ_WIDTH : natural := 16
4
);
5
port(
6
  i_data_i : in std_logic_vector(g_IQ_WIDTH-1 downto 0);
7
  i_data_q : in std_logic_vector(g_IQ_WIDTH-1 downto 0);
8
9
  o_data_1 : std_logic;
10
  o_data_2 : std_logic;
11
   ...
12
  o_data_n : std_logic
13
);
14
end entiy


Und ich mach ja nicht alles neu sondern habe auch schon ein paar fertige 
Module von meiner Abteilung.

Ich geb ja zu dass ich auch in VHDL ein Anfänger bin. Aber ich habs mir 
nun mal eingebildet da flexibel zu sein^^

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.