2017-08-14 4 views
0

Je ncverilog avec deux fichiers, sell.v et selltest.v et son fichier journal dit:Un reg n'est pas une lvalue juridique dans ce contexte [6.1.2 (IEEE)]

`ncelab: *E,RANOTL (./selltest.v,6|36): A reg is not a legal lvalue in this context [6.1.2(IEEE)]. 
vendor vendor(NT5,NT10,clk,reset,cola,change); 


ncelab: *E,RANOTL (./selltest.v,6|43): A reg is not a legal lvalue in this context [6.1.2(IEEE)]. 
ncverilog: *E,ELBERR: Error during elaboration (status 1), exiting.` 


Seulement mon selltest.v a "vendor vendor(NT5,NT10,clk,reset,cola,change);", et je ne sais pas ce qui se passe, une partie de mon programme est comme ci-dessous

`timescale 1ns/1ns 

module test_vendor; 

reg NT5 , NT10 , clk , reset; 

//wire cola , change; 
reg cola , change; 

vendor vendor(NT5,NT10,clk,reset,cola,change); 
+1

Voir http://go.mentor.com/wire-vs-reg –

+0

Blog intéressant. Personnellement, j'aurais ajouté qu'il y avait une vieille proposition (rejetée) d'unifier les regs et les fils pré-SV, et que les «assignations continues» ne sont pas vraiment compatibles avec le modèle rétro-retard delta, qui fait peut-être partie de la discussion discutable. – EML

+0

Ah - juste réalisé - excellent blog :) – EML

Répondre

1

Vous essayez de vous connecter une sortie du module à un reg. Vous ne pouvez pas faire cela: vous devez conduire un filet (c'est-à-dire wire/etc). Voir 12.3.9 en 2005 LRM des règles de connexion du port:

Seuls les filets ou expressions structurelles nettes sont les puits dans une mission

Tout cela était nettoyée dans SystemVerilog, où la distinction entre les regs et les fils a été corrigé/clarifié. Une "lvalue" est quelque chose qui peut apparaître sur le côté gauche d'une assignation (valeur de gauche), c.-à-d. Qu'elle peut être affectée à, ainsi qu'un "puits".