2017-04-06 1 views
0

Le style habituel d'affectation à un réseau SystemVerilog défini par un typedef struct, commeAssigner un seul élément d'une struct nettype

typedef struct { 
real V; 
real I; 
real R; 
} SVAstruct; 
// resolution function ommitted 
nettype SVAstruct SVAnet with res_SVA; 

est

inout SVAnet P; 
assign P = '{Vout,0,0}; 

Ainsi, les affectations sont faites en même temps pour tous les éléments de la structure nette. Des affectations telles que

P.R = 100; 

donnent une erreur. Existe-t-il une méthode pour effectuer des tâches individuelles?

Répondre

0

Vous ne pouvez pas faire cela. Une fois que vous créez un nettype avec un type de données particulier, chaque pilote a besoin de tous les champs de type afin d'exécuter sa fonction de résolution. Imaginez si vous vouliez un signal pour représenter la force sur un objet physique. Une force est une quantité vectorielle qui a à la fois l'ampleur et la direction. Si chaque conducteur sur ce signal représente un vecteur de force, il n'y a aucun moyen de conduire une direction sans savoir quelle est la magnitude.

Vous pouvez créer une variable avec le même type qu'un réseau, puis vous pouvez effectuer des affectations individuelles aux champs de cette variable.

inout SVAnet P; 
... 
SVAstruct S 
assign P = S; 
... 
S.R = 100; 
+0

Alors que la proposition permet de missions individuelles à des éléments de S, il ne permet pas de le faire pour les éléments de P. Par exemple, s'il y a des contributions d'autres modules aux valeurs de P, celles-ci seraient écrasé par assigner P = S ;. Donc, le «tu ne peux pas faire ça» est toujours valable. - THX! – bardo

+0

Les sorties de ces autres modules ne doivent pas être un 'SVAnet', juste des nombres réels simples représentant V, I ou R. Vous pouvez ensuite les combiner ensemble. –

+0

Correct, mais dans mon cas, malheureusement, ils le sont. – bardo