From 479429e12dc78c6f2c56653f72daaf7569cc19d3 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Wed, 29 Apr 2015 10:41:43 +0200 Subject: [PATCH] Support for .gates and .mlatch in Blif. Ap parser beautifying. --- crlcore/src/ccore/alliance/ap/ApParser.cpp | 10 ++++----- crlcore/src/ccore/blif/BlifParser.cpp | 25 ++++++++++++++++------ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/crlcore/src/ccore/alliance/ap/ApParser.cpp b/crlcore/src/ccore/alliance/ap/ApParser.cpp index 72cb6a3a..2965e727 100644 --- a/crlcore/src/ccore/alliance/ap/ApParser.cpp +++ b/crlcore/src/ccore/alliance/ap/ApParser.cpp @@ -518,8 +518,8 @@ namespace { , WIDTH ); } - if (not net ) _printError( false, "Unknown net name %s." , fields[5] ); - if (not layerInfo ) _printError( false, "Unknown layer name %s.", fields[6] ); + if (not net ) _printError( false, "Unknown net name <%s>." , fields[5] ); + if (not layerInfo ) _printError( false, "Unknown layer name <%s>.", fields[6] ); } } @@ -542,7 +542,7 @@ namespace { if ( layerInfo ) Contact::create ( net, layerInfo->getLayer(), XVIA, YVIA ); else - _printError ( false, "Unknown layer name %s.", fields[2] ); + _printError ( false, "Unknown layer name <%s>.", fields[2] ); } } @@ -572,7 +572,7 @@ namespace { Contact::create ( net, layerInfo->getLayer(), XVIA, YVIA, WIDTH-shrink, HEIGHT-shrink ); } else - _printError ( false, "Unknown layer name %s.", fields[4] ); + _printError ( false, "Unknown layer name <%s>.", fields[4] ); } } @@ -627,7 +627,7 @@ namespace { } } else - _printError ( false, "Unknown layer name %s.", fields[7] ); + _printError ( false, "Unknown layer name <%s>.", fields[7] ); } } diff --git a/crlcore/src/ccore/blif/BlifParser.cpp b/crlcore/src/ccore/blif/BlifParser.cpp index e735f54b..cf9f8302 100644 --- a/crlcore/src/ccore/blif/BlifParser.cpp +++ b/crlcore/src/ccore/blif/BlifParser.cpp @@ -61,11 +61,13 @@ namespace { , Model = 0x00000004 , End = 0x00000008 , Subckt = 0x00000010 - , Latch = 0x00000020 - , Inputs = 0x00000040 - , Outputs = 0x00000080 - , Clock = 0x00000100 - , Names = 0x00000200 + , Gate = 0x00000020 + , MLatch = 0x00000040 + , Latch = 0x00000080 + , Inputs = 0x00000100 + , Outputs = 0x00000200 + , Clock = 0x00000400 + , Names = 0x00000800 , CoverZero = 0x00001000 , CoverOne = 0x00002000 , CoverLogic = 0x00004000 @@ -128,7 +130,9 @@ namespace { if (_tokens.front() == ".outputs") { _state = Outputs; } if (_tokens.front() == ".clock" ) { _state = Clock; } if (_tokens.front() == ".subckt" ) { _state = Subckt; } + if (_tokens.front() == ".gate" ) { _state = Gate; } if (_tokens.front() == ".latch" ) { _state = Latch; } + if (_tokens.front() == ".mlatch" ) { _state = MLatch; } if (_tokens.front() == ".names" ) { _state = Names; @@ -560,6 +564,15 @@ namespace CRL { continue; } + if (tokenize.state() == Tokenize::MLatch) { + cerr << Error( "Blif::load() \".mlatch\" command is not supported.\n" + " File %s.blif at line %u." + , blifFile.c_str() + , tokenize.lineno() + ) << endl; + continue; + } + if (not blifModel) { cerr << Error( "Blif::load() Unexpected command \"%s\" outside of .model definition.\n" " File %s.blif at line %u." @@ -595,7 +608,7 @@ namespace CRL { } } - if (tokenize.state() == Tokenize::Subckt) { + if (tokenize.state() == Tokenize::Subckt or tokenize.state() == Tokenize::Gate) { Subckt* subckt = blifModel->addSubckt( blifLine[1] ); for ( size_t i=2 ; i