when netlisting primitive elements (not subcircuits) the "format", "verilog_format", "vhdl_format, "tedax_format" can be specified in instance attributes to override symbol. This allows to adapt primitives (example digital standard cells) to different design kits without using wrapper subcircuits. Together with "symname" redefinition in instance this allows to completely customize element netlisting.
This commit is contained in:
parent
617d708009
commit
0ce6f6ba5d
|
|
@ -1197,12 +1197,12 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
else if(!strcmp(argv[1],"get_tok") )
|
||||
{
|
||||
char *s=NULL;
|
||||
int t;
|
||||
Tcl_ResetResult(interp);
|
||||
if(argc < 4) {Tcl_AppendResult(interp, "Missing arguments", NULL);return TCL_ERROR;}
|
||||
if(argc == 5)
|
||||
my_strdup(648, &s, get_tok_value(argv[2], argv[3], atoi(argv[4])));
|
||||
else
|
||||
my_strdup(648, &s, get_tok_value(argv[2], argv[3], 0));
|
||||
if(argc == 5) t = atoi(argv[4]);
|
||||
else t = 0;
|
||||
my_strdup(648, &s, get_tok_value(argv[2], argv[3], t));
|
||||
Tcl_AppendResult(interp, s, NULL);
|
||||
my_free(649, &s);
|
||||
}
|
||||
|
|
|
|||
29
src/token.c
29
src/token.c
|
|
@ -1147,7 +1147,7 @@ void print_generic(FILE *fd, char *ent_or_comp, int symbol)
|
|||
{
|
||||
int tmp;
|
||||
register int c, state=XBEGIN, space;
|
||||
char *template=NULL,*format=NULL, *s, *value=NULL, *token=NULL;
|
||||
char *template=NULL, *s, *value=NULL, *token=NULL;
|
||||
char *type=NULL, *generic_type=NULL, *generic_value=NULL;
|
||||
const char *str_tmp;
|
||||
int i, sizetok=0, sizeval=0;
|
||||
|
|
@ -1161,7 +1161,6 @@ void print_generic(FILE *fd, char *ent_or_comp, int symbol)
|
|||
my_free(998, &template);
|
||||
return;
|
||||
}
|
||||
my_strdup(470, &format, get_tok_value(instdef[symbol].prop_ptr,"format",0));
|
||||
my_strdup(471, &generic_type, get_tok_value(instdef[symbol].prop_ptr,"generic_type",0));
|
||||
dbg(2, "print_generic(): symbol=%d template=%s \n", symbol, template);
|
||||
|
||||
|
|
@ -1256,7 +1255,6 @@ void print_generic(FILE *fd, char *ent_or_comp, int symbol)
|
|||
}
|
||||
if(tmp) fprintf(fd, "\n);\n");
|
||||
my_free(999, &template);
|
||||
my_free(1000, &format);
|
||||
my_free(1001, &value);
|
||||
my_free(1002, &token);
|
||||
my_free(1003, &type);
|
||||
|
|
@ -1487,8 +1485,10 @@ void print_spice_element(FILE *fd, int inst)
|
|||
/* my_strdup(485, &name,get_tok_value(inst_ptr[inst].prop_ptr,"name",0)); */
|
||||
if (!name) my_strdup(43, &name, get_tok_value(template, "name", 0));
|
||||
|
||||
my_strdup(486, &format,
|
||||
get_tok_value((inst_ptr[inst].ptr+instdef)->prop_ptr,"format",2));
|
||||
/* allow format string override in instance */
|
||||
my_strdup(470, &format, get_tok_value(inst_ptr[inst].prop_ptr,"format",2));
|
||||
if(!format || !format[0])
|
||||
my_strdup(486, &format, get_tok_value((inst_ptr[inst].ptr+instdef)->prop_ptr,"format",2));
|
||||
|
||||
if ((name==NULL) || (format==NULL)) {
|
||||
my_free(1015, &template);
|
||||
|
|
@ -1674,8 +1674,10 @@ void print_tedax_element(FILE *fd, int inst)
|
|||
/* my_strdup(496, &name,get_tok_value(inst_ptr[inst].prop_ptr,"name",0)); */
|
||||
if(!name) my_strdup(2, &name, get_tok_value(template, "name", 0));
|
||||
|
||||
my_strdup(497, &format,
|
||||
get_tok_value((inst_ptr[inst].ptr+instdef)->prop_ptr,"tedax_format",2));
|
||||
/* allow format string override in instance */
|
||||
my_strdup(1185, &format, get_tok_value(inst_ptr[inst].prop_ptr,"tedax_format",2));
|
||||
if(!format || !format[0])
|
||||
my_strdup(497, &format, get_tok_value((inst_ptr[inst].ptr+instdef)->prop_ptr,"tedax_format",2));
|
||||
if(name==NULL || !format || !format[0]) {
|
||||
my_free(1023, &extra);
|
||||
my_free(1024, &extra_pinnumber);
|
||||
|
|
@ -1931,7 +1933,7 @@ void print_verilog_element(FILE *fd, int inst)
|
|||
int quote=0;
|
||||
|
||||
if(get_tok_value((inst_ptr[inst].ptr+instdef)->prop_ptr,"verilog_format",2)[0] != '\0') {
|
||||
print_verilog_primitive(fd, inst); /*15112003 */
|
||||
print_verilog_primitive(fd, inst);
|
||||
return;
|
||||
}
|
||||
my_strdup(506, &template,
|
||||
|
|
@ -2130,7 +2132,10 @@ void print_vhdl_primitive(FILE *fd, int inst) /* netlist primitives, 20071217 *
|
|||
my_strdup(514, &name, inst_ptr[inst].instname);
|
||||
if(!name) my_strdup(50, &name, get_tok_value(template, "name", 0));
|
||||
|
||||
my_strdup(516, &format, get_tok_value((inst_ptr[inst].ptr+instdef)->prop_ptr,"vhdl_format",2)); /* 20071217 */
|
||||
/* allow format string override in instance */
|
||||
my_strdup(1000, &format, get_tok_value(inst_ptr[inst].prop_ptr,"vhdl_format",2));
|
||||
if(!format || !format[0])
|
||||
my_strdup(516, &format, get_tok_value((inst_ptr[inst].ptr+instdef)->prop_ptr,"vhdl_format",2)); /* 20071217 */
|
||||
if((name==NULL) || (format==NULL) ) {
|
||||
my_free(1047, &template);
|
||||
my_free(1048, &name);
|
||||
|
|
@ -2301,8 +2306,10 @@ void print_verilog_primitive(FILE *fd, int inst) /* netlist switch level primiti
|
|||
my_strdup(520, &name,inst_ptr[inst].instname); /*20161210 */
|
||||
if(!name) my_strdup(4, &name, get_tok_value(template, "name", 0));
|
||||
|
||||
my_strdup(522, &format,
|
||||
get_tok_value((inst_ptr[inst].ptr+instdef)->prop_ptr,"verilog_format",2));
|
||||
/* allow format string override in instance */
|
||||
my_strdup(1186, &format, get_tok_value(inst_ptr[inst].prop_ptr,"verilog_format",2));
|
||||
if(!format || !format[0])
|
||||
my_strdup(522, &format, get_tok_value((inst_ptr[inst].ptr+instdef)->prop_ptr,"verilog_format",2));
|
||||
if((name==NULL) || (format==NULL) ) {
|
||||
my_free(1054, &template);
|
||||
my_free(1055, &name);
|
||||
|
|
|
|||
Loading…
Reference in New Issue