2017-07-17 3 views
-2

Comment puis-je générer de nombreuses boîtes aux lettres, par exemple avec generate endgenerate et la façon de mettre des données à un pour eux.Systemverilog Générer des boîtes aux lettres

J'ai essayé de faire

generate 
for (genvar i=0; i<10; i++) begin 
    mailbox test = new(); 
end 
endgenerate 

et crée 10 boîtes aux lettres mais je ne savais pas comment mettre les données à l'un d'entre eux j'imagine quelque chose comme

test[4].put(input); 

mais ne fonctionne pas

des idées?

+0

Vous avez nommé la boîte aux lettres 'test'. Peut-être que vous devriez utiliser le nom que vous lui avez donné: 'test [4] .put (entrée);' – toolic

+0

ouais désolé je voulais écrire test [4] .put (entrée); mais cela ne fonctionne pas –

+0

Peut-être que vous devez déclarer le tableau de boîtes aux lettres en dehors de votre bloc de génération: 'test de boîte aux lettres [10];' – toolic

Répondre

2

Chaque fois qu'une boucle generate-for est créée, vous devez nommer le bloc, et c'est le nom de bloc qui est développé en blocs numérotés. générer

for (genvar I=0; I<10; i++) begin : block_A 
    mailbox test; 
end : block_a 
endgenerate 

Ensuite, vous pouvez faire référence block_a[0].test, block_a[1].test, .etc.

Mais vous ne voulez probablement pas utiliser un bloc generate pour cela car vous ne pourrez pas utiliser une variable pour indexer dans le bloc puisque le bloc n'est pas un tableau régulier.

Vous pouvez simplement déclarer un transport régulier de boîtes aux lettres. Je recommande également que vous paramétrez votre boîte aux lettres par le type de message que vous pariez mettre en elle.

+0

merci pour votre réponse! –

0

Merci à l'toolic conseil m'a donné, voici la solution pour tout le monde dans le besoin:

// first make an array of mailboxes 
mailbox slave_mailbox [TB_SLAVES]; 
int out; 
initial begin 
    for (int i = 0; i < TB_SLAVES; i++) begin 
     // then create the object for every mailbox 
     slave_mailbox[i] = new(); 
    end 
    // testing if it works 
    slave_mailbox[0].try_put(1); 
    slave_mailbox[0].try_get(out); 
    $display("got %0d",out); 
end