Subversion Repositories Vertical

Rev

Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 11
Line 1... Line 1...
1
/*
1
/*
2
 * $Id: unrouted.c,v 1.1.1.1 2003/11/04 23:34:57 mjames Exp $
2
 * $Id: unrouted.c,v 1.1.1.1 2003/11/04 23:34:57 mjames Exp $
3
 *
3
 *
4
 * $Log: unrouted.c,v $
4
 * $Log: unrouted.c,v $
5
 * Revision 1.1.1.1  2003/11/04 23:34:57  mjames
5
 * Revision 1.1.1.1  2003/11/04 23:34:57  mjames
6
 * Imported into local repositrory
6
 * Imported into local repositrory
7
 *
7
 *
Line 19... Line 19...
19
 * Tidying up problematical comments caused by CVS
19
 * Tidying up problematical comments caused by CVS
20
 * 'intelligent' comment guessing
20
 * 'intelligent' comment guessing
21
 *
21
 *
22
 */
22
 */
23
 
23
 
-
 
24
#include <stdio.h>
24
#include "unrouted.h"
25
#include <string.h>
-
 
26
#include <stdlib.h>
-
 
27
#include <ctype.h>
25
 
28
 
26
#include "cmdlog.h"
-
 
27
#include "cmdparse.h"
-
 
28
#include "database.h"
29
#include "vertcl_main.h" 
29
#include "expression.h"
30
#include "expression.h"
30
#include "generic.h"
31
#include "generic.h"
-
 
32
#include "database.h"
31
#include "lx_support.h"
33
#include "lx_support.h"
-
 
34
#include "unrouted.h"
32
#include "statistics.h"
35
#include "statistics.h"
33
#include "vertcl_main.h"
36
#include "cmdparse.h"
-
 
37
#include "cmdlog.h"
-
 
38
 
-
 
39
#ident "@(#)$Header: c:\\cygwin\\cvsroot/Vert03/vertlib/unrouted.c,v 1.1.1.1 2003/11/04 23:34:57 mjames Exp $"
34
 
40
 
35
#include <ctype.h>
-
 
36
#include <stdio.h>
-
 
37
#include <stdlib.h>
-
 
38
#include <string.h>
-
 
39
 
41
 
40
#ident                                                                                        \
-
 
41
    "@(#)$Header: c:\\cygwin\\cvsroot/Vert03/vertlib/unrouted.c,v 1.1.1.1 2003/11/04 23:34:57 mjames Exp $"
-
 
42
 
42
 
43
/* function that creates the node reference lists for one chip in the list ,
43
/* function that creates the node reference lists for one chip in the list ,
44
   these functions perform operations that were done inside database.c.
44
   these functions perform operations that were done inside database.c.
45
  */
45
  */
46
 
46
   
47
int create_nodes_from_refs (socket_t *socket, int donesomething)
47
int create_nodes_from_refs(socket_t * socket,int donesomething)
48
{
48
  {
49
        unrouted_ref_t *ref, *prev;
49
  unrouted_ref_t * ref,*prev;
50
        node_t *cnode;
50
  node_t * cnode;
51
        net_t *cnet;
51
  net_t *  cnet;
52
        char null_name;
52
  char null_name;
53
        char *netname;
53
  char * netname;
54
        int errseen = 0;
54
  int errseen = 0;
55
        if (!socket)
55
  if(!socket) {
-
 
56
    Log(LOG_ERROR,"-- missing socket \n");
-
 
57
    return(1);
-
 
58
    }
-
 
59
 
-
 
60
  ref = socket->unrouted_refs;
-
 
61
  while(ref) {
-
 
62
 
-
 
63
/* pick up any new pin identifiers */
-
 
64
    cnode = find_node(socket,Ident,ref->identifier,Create);
-
 
65
 
-
 
66
/* if this node is already on a net on the routed list,
-
 
67
   it has already been linked up
-
 
68
   so it should not be duplicated !!  */  
-
 
69
/* iterate each node on the chip */
-
 
70
 
-
 
71
    if ((ref->listref == &routed_list) &&  cnode->net) /* duplicate !!! */  
56
        {
72
      {
57
                Log (LOG_ERROR, "-- missing socket \n");
73
      if(! errseen) {
58
                return (1);
74
        errseen=1;
-
 
75
        Log(LOG_ERROR,"-- Errors while creating unrouted list from pins :\n");
59
        }
76
        }
60
 
-
 
61
        ref = socket->unrouted_refs;
-
 
62
        while (ref)
-
 
63
        {
-
 
64
                /* pick up any new pin identifiers */
-
 
65
                cnode = find_node (socket, Ident, ref->identifier, Create);
-
 
66
 
-
 
67
                /* if this node is already on a net on the routed list,
77
      Log(LOG_ERROR,"--  Error ! node %s(%s) is already in existence on routed net %s\n",
68
                   it has already been linked up
-
 
69
                   so it should not be duplicated !!  */
-
 
70
                /* iterate each node on the chip */
78
         socket->identifier,ref->identifier,cnode->net->name);
71
 
79
 
72
                if ((ref->listref == &routed_list) && cnode->net) /* duplicate !!! */
-
 
73
                {
-
 
74
                        if (!errseen)
-
 
75
                        {
-
 
76
                                errseen = 1;
-
 
77
                                Log (
-
 
78
                                    LOG_ERROR,
-
 
79
                                    "-- Errors while creating unrouted list from pins :\n");
-
 
80
                        }
-
 
81
                        Log (
-
 
82
                            LOG_ERROR,
-
 
83
                            "--  Error ! node %s(%s) is already in existence on routed net "
-
 
84
                            "%s\n",
-
 
85
                            socket->identifier,
-
 
86
                            ref->identifier,
-
 
87
                            cnode->net->name);
-
 
88
                }
80
      }        
89
                else
-
 
90
                {
81
    else {
91
                        netname = ref->name;
82
      netname   = ref->name;
92
                        null_name = ISNULLSTR (netname);
83
      null_name = ISNULLSTR(netname);
93
                        /* bidir pins are essentially free for routing */
84
    /* bidir pins are essentially free for routing */
94
                        if (null_name || socket->is_template)
85
      if (null_name || socket->is_template) {
95
                        {
-
 
96
                                if (ref->pindir != BIDIR)
86
        if(ref->pindir != BIDIR)
97
                                        cnode->fixed_pin = 1;
87
          cnode->fixed_pin = 1;
98
                                cnode->pindir = ref->pindir;
88
        cnode->pindir    = ref->pindir;
99
                        }
89
      }
100
                        if (socket->is_template || ref->listref == &routed_list)
90
     if(socket->is_template || ref->listref == &routed_list) {
101
                        {
-
 
102
                                cnode->pin_group = ref->pin_group;
91
       cnode->pin_group = ref->pin_group;
-
 
92
 
103
 
93
 
104
                                cnode->vhdltype = ref->vhdltype;
94
       cnode->vhdltype  = ref->vhdltype;
105
#if defined DEBUG_EXPRESSION
95
#if defined DEBUG_EXPRESSION  
106
                                if (cnode->vhdltype)
96
       if (cnode->vhdltype) {
107
                                {
-
 
108
                                        print_msg_expression (
-
 
109
                                            stdout, "COPYING ", cnode->vhdltype->expr);
97
         print_msg_expression(stdout,"COPYING ",cnode->vhdltype->expr);
110
                                }
98
         }
111
#endif
99
#endif
112
                                if (!null_name)
100
       if(!null_name)
113
                                        cnode->name = strdup (netname);
101
       cnode->name      = strdup(netname);
114
                        }
102
       }  
115
                        if (!socket->is_template && !null_name)
103
     if (!socket->is_template && !null_name ) {
116
                        {
-
 
117
                                cnet = find_net (ref->listref, Ident, netname, Create);
104
       cnet  = find_net(ref->listref,
118
                                connect_node_net (
105
                        Ident,
119
                                    ref->orig_name,
106
                        netname,
120
                                    cnode,
107
                        Create);
121
                                    cnet,
108
       connect_node_net(ref->orig_name,
122
                                    ref->pindir,
109
             cnode,cnet,ref->pindir,
123
                                    ref->vhdltype,
110
             ref->vhdltype,
124
                                    ref->orig_vhdltype,
111
             ref->orig_vhdltype,
125
                                    ref->lhs_expr);
112
             ref->lhs_expr);
126
                                donesomething = 1;
113
       donesomething = 1;  
127
                        };
114
       };  
128
                }
115
    }
129
                prev = ref;
116
    prev=ref;
130
                ref = ref->next;
117
    ref= ref->next;
131
                free (prev);
118
    free(prev);
132
        }
119
    }
133
        socket->unrouted_refs = NULL; /* remove any references to unrouted stuff,
120
  socket->unrouted_refs = NULL; /* remove any references to unrouted stuff,
134
                                         they are all free()'d now */
121
                                   they are all free()'d now */    
135
 
122
 
136
        return 0;
123
  return 0;
137
}
124
  }
138
 
125
 
139
/* creates the unrouted list from unrouted_refs list for all sockets */
-
 
140
 
126
 
-
 
127
/* creates the unrouted list from unrouted_refs list for all sockets */
-
 
128
 
141
void create_unrouted_list (void)
129
void create_unrouted_list(void)
142
{
130
{
143
        socket_t *socket = socket_head;
131
  socket_t * socket = socket_head;
144
        int donesomething = 0;
132
  int donesomething = 0;
145
        while (socket)
133
  while(socket) {
146
        {
-
 
147
                donesomething = create_nodes_from_refs (socket, donesomething);
134
    donesomething = create_nodes_from_refs(socket,donesomething);
148
                socket = socket->next;
135
  socket=socket->next;
-
 
136
 
149
        }
137
  }
150
        if (donesomething)
138
  if(donesomething)
151
                Log (LOG_GENERAL, "-- New pins converted to unrouted net\n");
139
    Log(LOG_GENERAL,"-- New pins converted to unrouted net\n");
152
}
-
 
153
 
140
 
154
void rename_unrouted_pin_socket (
-
 
155
    socket_t *socket, char *old_name, char *new_name, vhdl_t *vhdl_type)
-
 
156
{
141
}
157
        unrouted_ref_t *ref;
-
 
158
        char *socket_name;
-
 
159
 
142
 
160
        socket_name = socket->identifier;
-
 
161
 
143
 
-
 
144
void rename_unrouted_pin_socket(socket_t * socket,
-
 
145
                                char * old_name,
-
 
146
                                char * new_name,vhdl_t * vhdl_type)  {
-
 
147
  unrouted_ref_t * ref;
-
 
148
  char * socket_name;
-
 
149
 
-
 
150
 
-
 
151
  socket_name = socket->identifier;
-
 
152
 
162
        ref = socket->unrouted_refs;
153
  ref = socket->unrouted_refs;
-
 
154
   
-
 
155
  if(!ref)
-
 
156
    Log(LOG_ERROR,"# ERROR pin rename : no pin '%s.%s'\n",socket_name,old_name);
-
 
157
   
-
 
158
   
-
 
159
  while(ref) {
-
 
160
    if(strcmp2(old_name,ref->name)==0) {
-
 
161
    /* do rename only if there is a rename */
-
 
162
      if(strcmp2(ref->orig_name,ref->name)!=0) {
-
 
163
        ref->orig_name = ref->name; /* keep old name in alias part */
-
 
164
        ref->name = strdup(new_name); /* and rename the unrouted node */
-
 
165
        }
-
 
166
/* if it does not have a base type then copy it */
-
 
167
    if(!vhdl_type->basetype)
-
 
168
      vhdl_type->basetype = default_vhdl_datatype->basetype;
-
 
169
 
-
 
170
    /* do pinslicing only if there is a pin slice involved */
-
 
171
             
-
 
172
      if(vhdl_type != default_vhdl_datatype) {
-
 
173
        ref->orig_vhdltype = ref->vhdltype; /* keep old VHDL type around */
-
 
174
        if(vhdl_type)
-
 
175
          ref->vhdltype = copy_vhdl(vhdl_type,socket);         /* assign the new vhdl type */
163
 
176
 
164
        if (!ref)
-
 
165
                Log (
-
 
166
                    LOG_ERROR, "# ERROR pin rename : no pin '%s.%s'\n", socket_name, old_name);
-
 
167
 
-
 
168
        while (ref)
-
 
169
        {
-
 
170
                if (strcmp2 (old_name, ref->name) == 0)
-
 
171
                {
-
 
172
                        /* do rename only if there is a rename */
-
 
173
                        if (strcmp2 (ref->orig_name, ref->name) != 0)
-
 
174
                        {
-
 
175
                                ref->orig_name = ref->name; /* keep old name in alias part */
-
 
176
                                ref->name =
-
 
177
                                    strdup (new_name); /* and rename the unrouted node */
-
 
178
                        }
-
 
179
                        /* if it does not have a base type then copy it */
-
 
180
                        if (!vhdl_type->basetype)
-
 
181
                                vhdl_type->basetype = default_vhdl_datatype->basetype;
-
 
182
 
-
 
183
                        /* do pinslicing only if there is a pin slice involved */
-
 
184
 
-
 
185
                        if (vhdl_type != default_vhdl_datatype)
-
 
186
                        {
-
 
187
                                ref->orig_vhdltype =
-
 
188
                                    ref->vhdltype; /* keep old VHDL type around */
-
 
189
                                if (vhdl_type)
-
 
190
                                        ref->vhdltype = copy_vhdl (
-
 
191
                                            vhdl_type, socket); /* assign the new vhdl type */
-
 
192
                        }
-
 
193
 
-
 
194
                        if (level & 16)
-
 
195
                        {
-
 
196
                                Log (
-
 
197
                                    LOG_GENERAL,
-
 
198
                                    "# renaming '%s.%s' to be '%s'\n",
-
 
199
                                    socket_name,
-
 
200
                                    ref->orig_name,
-
 
201
                                    ref->name);
-
 
202
                        }
-
 
203
                        break;
-
 
204
                }
-
 
205
                ref = ref->next;
-
 
206
        }
177
        }
207
}
178
 
208
 
179
 
209
void rename_unrouted_pin (char *socket_name, char *old_name, char *new_name, vhdl_t *vhdl_type)
-
 
210
{
-
 
211
        socket_t *socket;
-
 
212
        socket = find_socket (Ident, socket_name, Search, &socket_head);
-
 
213
        if (!socket)
180
      if(level & 16)
214
        {
181
        {    
215
                Log (
-
 
216
                    LOG_ERROR,
-
 
217
                    "# ERROR connecting port : Cannot Locate socket identified as '%s'\n",
182
        Log(LOG_GENERAL,"# renaming '%s.%s' to be '%s'\n",socket_name,ref->orig_name,ref->name);
218
                    socket_name);
-
 
219
        }
183
        }
220
        else
184
      break;
-
 
185
      }
-
 
186
    ref=ref->next;
-
 
187
    }
-
 
188
  }
-
 
189
 
-
 
190
 
-
 
191
void rename_unrouted_pin(char * socket_name,char * old_name,char * new_name,vhdl_t * vhdl_type)  {
-
 
192
  socket_t * socket;
-
 
193
  socket = find_socket(Ident,socket_name,Search,&socket_head);  
-
 
194
  if(!socket) {
-
 
195
    Log(LOG_ERROR,"# ERROR connecting port : Cannot Locate socket identified as '%s'\n",socket_name);
-
 
196
    }
-
 
197
  else
221
                rename_unrouted_pin_socket (socket, old_name, new_name, vhdl_type);
198
    rename_unrouted_pin_socket(socket,old_name,new_name,vhdl_type);
222
}
199
  }