The VST driver may suppress linkage type.

* Change: In Vhdl:::Signal::toVhdlPort(), in Alliance VST signal with
    undefined directions are typed "linkage". This may not be compatible
    with vasy, so allow to replace them by "in".
* New: In CRL::Catalog::State, add a new flag VstNoLinkage to tell if
   the VST driver should not use the "linkage" type.
* Change: In Vhdl::Entity, add a VstNoLinkage flag to disable the use
    of the "linkage" type.
This commit is contained in:
Jean-Paul Chaput 2020-06-24 23:27:21 +02:00
parent 1ccb9c340f
commit b23f620c5d
6 changed files with 16 additions and 5 deletions

View File

@ -281,7 +281,9 @@ namespace Vhdl {
for ( auto isignal=internalSignals.begin(); isignal!=internalSignals.end() ; ++isignal ) { for ( auto isignal=internalSignals.begin(); isignal!=internalSignals.end() ; ++isignal ) {
out << tab; out << tab;
(*isignal)->toVhdlPort( out, width, Entity::AsInnerSignal|(_flags & Entity::IeeeMode) ); (*isignal)->toVhdlPort( out, width, Entity::AsInnerSignal
|(_flags & Entity::IeeeMode)
|(_flags & Entity::VstNoLinkage) );
out << ";\n"; out << ";\n";
} }
out << "\n"; out << "\n";
@ -305,7 +307,9 @@ namespace Vhdl {
size_t ioCount = 0; size_t ioCount = 0;
for ( auto isignal=ioSignals.begin(); isignal!=ioSignals.end() ; ++isignal ) { for ( auto isignal=ioSignals.begin(); isignal!=ioSignals.end() ; ++isignal ) {
if (ioCount) out << "\n" << tab << " ; "; if (ioCount) out << "\n" << tab << " ; ";
(*isignal)->toVhdlPort( out, width, Entity::AsPortSignal|(_flags & Entity::IeeeMode ) ); (*isignal)->toVhdlPort( out, width, Entity::AsPortSignal
|(_flags & Entity::IeeeMode)
|(_flags & Entity::VstNoLinkage ) );
++ioCount; ++ioCount;
} }
out << "\n" << tab << " );"; out << "\n" << tab << " );";

View File

@ -33,6 +33,7 @@ namespace Vhdl {
: _name(name) : _name(name)
{ } { }
Signal::~Signal () Signal::~Signal ()
{ } { }
@ -54,7 +55,9 @@ namespace Vhdl {
case Net::Direction::IN: out << "in"; break; case Net::Direction::IN: out << "in"; break;
case Net::Direction::OUT: out << "out"; break; case Net::Direction::OUT: out << "out"; break;
case Net::Direction::INOUT: out << "inout"; break; case Net::Direction::INOUT: out << "inout"; break;
default: out << "linkage"; default:
if (flags & Entity::VstNoLinkage) out << "in";
else out << "linkage";
} }
} }

View File

@ -42,6 +42,7 @@ namespace CRL {
unsigned int entityFlags = Vhdl::Entity::EntityMode /* | Vhdl::Entity::IeeeMode */; unsigned int entityFlags = Vhdl::Entity::EntityMode /* | Vhdl::Entity::IeeeMode */;
if (saveState & Catalog::State::VstUseConcat ) entityFlags |= Vhdl::Entity::VstUseConcat; if (saveState & Catalog::State::VstUseConcat ) entityFlags |= Vhdl::Entity::VstUseConcat;
if (saveState & Catalog::State::VstNoLowerCase) entityFlags |= Vhdl::Entity::VstNoLowerCase; if (saveState & Catalog::State::VstNoLowerCase) entityFlags |= Vhdl::Entity::VstNoLowerCase;
if (saveState & Catalog::State::VstNoLinkage ) entityFlags |= Vhdl::Entity::VstNoLinkage;
//NamingScheme::toVhdl( cell, NamingScheme::FromVerilog ); //NamingScheme::toVhdl( cell, NamingScheme::FromVerilog );
Vhdl::Entity* vhdlEntity = Vhdl::EntityExtension::create( cell, entityFlags ); Vhdl::Entity* vhdlEntity = Vhdl::EntityExtension::create( cell, entityFlags );

View File

@ -88,6 +88,7 @@ namespace CRL {
, Foreign = 1 << 8 , Foreign = 1 << 8
, VstUseConcat = 1 << 9 , VstUseConcat = 1 << 9
, VstNoLowerCase = 1 << 10 , VstNoLowerCase = 1 << 10
, VstNoLinkage = 1 << 11
, Views = Physical|Logical , Views = Physical|Logical
}; };
// Constructors. // Constructors.

View File

@ -66,9 +66,10 @@ namespace Vhdl {
, AsInnerSignal = 0x0010 , AsInnerSignal = 0x0010
, VstUseConcat = 0x0020 , VstUseConcat = 0x0020
, VstNoLowerCase = 0x0040 , VstNoLowerCase = 0x0040
, OptionMask = VstUseConcat|VstNoLowerCase , VstNoLinkage = 0x0080
, OptionMask = VstUseConcat|VstNoLowerCase|VstNoLinkage
}; };
const unsigned int ModeMask = VstUseConcat|VstNoLowerCase; const unsigned int ModeMask = VstUseConcat|VstNoLowerCase|VstNoLinkage;
public: public:
static std::vector<Entity*>& static std::vector<Entity*>&
getAllEntities (); getAllEntities ();

View File

@ -147,6 +147,7 @@ extern "C" {
LoadObjectConstant(PyTypeCatalogState.tp_dict,Catalog::State::Foreign ,"Foreign"); LoadObjectConstant(PyTypeCatalogState.tp_dict,Catalog::State::Foreign ,"Foreign");
LoadObjectConstant(PyTypeCatalogState.tp_dict,Catalog::State::VstUseConcat ,"VstUseConcat"); LoadObjectConstant(PyTypeCatalogState.tp_dict,Catalog::State::VstUseConcat ,"VstUseConcat");
LoadObjectConstant(PyTypeCatalogState.tp_dict,Catalog::State::VstNoLowerCase ,"VstNoLowerCase"); LoadObjectConstant(PyTypeCatalogState.tp_dict,Catalog::State::VstNoLowerCase ,"VstNoLowerCase");
LoadObjectConstant(PyTypeCatalogState.tp_dict,Catalog::State::VstNoLinkage ,"VstNoLinkage");
LoadObjectConstant(PyTypeCatalogState.tp_dict,Catalog::State::Views ,"Views"); LoadObjectConstant(PyTypeCatalogState.tp_dict,Catalog::State::Views ,"Views");
} }