OpenCores
URL https://opencores.org/ocsvn/ezidebug/ezidebug/trunk

Subversion Repositories ezidebug

[/] [ezidebug/] [trunk/] [EziDebug_src/] [ezidebugscanchain.cpp] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 EziDebug
#include "ezidebugscanchain.h"
2
#include "ezidebuginstancetreeitem.h"
3
#include "ezidebugmodule.h"
4
#include <QDebug>
5
EziDebugScanChain::EziDebugScanChain(const QString& chainname):m_iChainName(chainname)
6
{
7
 
8
}
9
 
10
EziDebugScanChain::~EziDebugScanChain()
11
{
12
//    if(!m_ptestBechFile)
13
//        delete m_ptestBechFile ;
14
}
15
 
16
QString EziDebugScanChain::m_iscanChainRegCore(QObject::tr("No Core")) ;
17
QString EziDebugScanChain::m_iscanChainIoCore(QObject::tr("No Core")) ;
18
QString EziDebugScanChain::m_iscanChainToutCore(QObject::tr("No Core")) ;
19
QString EziDebugScanChain::m_iuserDir(QObject::tr("No Dir")) ;
20
 
21
const QString &EziDebugScanChain::getChainName(void) const
22
{
23
    return m_iChainName ;
24
}
25
 
26
void EziDebugScanChain::addToInstanceItemList(QString modulename ,QString instancename)
27
{
28
    QString iitemString = modulename + QObject::tr(":")+ instancename ;
29
    m_iinstanceItemList.append(iitemString);
30
 
31
    return ;
32
}
33
 
34
void EziDebugScanChain::removeItemListDuplicates(void)
35
{
36
    m_iinstanceItemList.removeDuplicates();
37
    return ;
38
}
39
 
40
void EziDebugScanChain::addToScanedFileList(const QString & filename)
41
{
42
    m_iscanedFileNameList <<  filename ;
43
    return ;
44
}
45
 
46
 
47
void EziDebugScanChain::backupFileList(void)
48
{
49
    m_isbackupscanedFileNameList = m_iscanedFileNameList ;
50
    return ;
51
}
52
 
53
const QStringList &EziDebugScanChain::getBackupFileList(void) const
54
{
55
    return  m_isbackupscanedFileNameList ;
56
}
57
 
58
void EziDebugScanChain::clearupFileList(void)
59
{
60
    m_iscanedFileNameList.clear();
61
    return ;
62
}
63
 
64
void EziDebugScanChain::resumeFileList(void)
65
{
66
    m_iscanedFileNameList = m_isbackupscanedFileNameList ;
67
    return ;
68
}
69
 
70
const QStringList& EziDebugScanChain::getScanedFileList(void) const
71
{
72
    return m_iscanedFileNameList ;
73
}
74
 
75
void EziDebugScanChain::removeScanedFileListDuplicate(void)
76
{
77
    m_iscanedFileNameList.removeDuplicates() ;
78
}
79
 
80
void EziDebugScanChain::setChildChainNum(QString clock ,int num)
81
{
82
    m_nchildChainNumMap.insert(clock,num) ;
83
}
84
 
85
 void EziDebugScanChain::setHeadTreeItem(EziDebugInstanceTreeItem *item)
86
 {
87
    m_pheadItem =  item;
88
    return ;
89
 }
90
 
91
 EziDebugInstanceTreeItem * EziDebugScanChain::getHeadTreeItem(void)
92
 {
93
    return m_pheadItem ;
94
 }
95
 
96
 
97
/*
98
QString EziDebugScanChain::getFirstInstanceItemName() const
99
{
100
    return m_iChainName ;
101
}
102
*/
103
 
104
void EziDebugScanChain::addToLineCodeMap(const QString &modulename, const QStringList &code)
105
{
106
    QStringList ialreadyExistCodeStr = m_icodeMap.value(modulename,QStringList()) ;
107
    if(ialreadyExistCodeStr.count())
108
    {
109
        m_icodeMap.remove(modulename);
110
    }
111
    ialreadyExistCodeStr.append(code);
112
 
113
    m_icodeMap.insert(modulename,ialreadyExistCodeStr);
114
    return ;
115
}
116
 
117
void EziDebugScanChain::addToBlockCodeMap(const QString &modulename, const QStringList &code)
118
{
119
    QStringList ialreadyExistCodeStr = m_iblockCodeMap.value(modulename,QStringList()) ;
120
    if(ialreadyExistCodeStr.count())
121
    {
122
        m_iblockCodeMap.remove(modulename);
123
    }
124
    ialreadyExistCodeStr.append(code);
125
 
126
    m_iblockCodeMap.insert(modulename,ialreadyExistCodeStr);
127
    return ;
128
}
129
 
130
void  EziDebugScanChain::replaceLineCodeMap(const QString &modulename, const QStringList &code)
131
{
132
    m_icodeMap.remove(modulename) ;
133
    m_icodeMap.insert(modulename,code);
134
}
135
 
136
void  EziDebugScanChain::replaceBlockCodeMap(const QString &modulename, const QStringList &code)
137
{
138
    m_iblockCodeMap.remove(modulename);
139
    m_iblockCodeMap.insert(modulename,code);
140
}
141
 
142
 
143
void EziDebugScanChain::addToClockSetMap(EziDebugInstanceTreeItem *item)
144
{
145
    if(!item)
146
        return ;
147
 
148
    if(item == m_pheadItem)
149
    {
150
 
151
        EziDebugInstanceTreeItem * pparentItem = item->parent();
152
        QMap<QString,QString> iclockMap = pparentItem->getModuleClockMap(item->getInstanceName());
153
        QMap<QString,QString>::const_iterator i = iclockMap.constBegin();
154
        while( i!= iclockMap.constEnd())
155
        {
156
            QStringList itopclock ;
157
            QString iclock =  i.value() ;
158
            if(!iclock.isEmpty())
159
            {
160
                itopclock.append(item->getInstanceName() + QObject::tr(":") + iclock);
161
                m_iclockSetMap.insert(i.key(),itopclock);
162
            }
163
            ++i ;
164
        }
165
    }
166
    else
167
    {
168
 
169
        // 根据 父节点所在集合位置,将本节点的 clock 加入到相应的 集合 , 找不到 端口 时钟对应关系 则不加入
170
        EziDebugInstanceTreeItem * pparentItem = item->parent();
171
 
172
        QMap<QString,QString> iclockMap = pparentItem->getModuleClockMap(item->getInstanceName());
173
        QMap<QString,QString>::const_iterator j = iclockMap.constBegin() ;
174
        while(j != iclockMap.constEnd())
175
        {
176
            QString iparentClock  =  pparentItem->getInstanceName() + QObject::tr(":") + j.key();
177
            QMap<QString,QStringList>::const_iterator i = m_iclockSetMap.constBegin();
178
            while( i!= m_iclockSetMap.constEnd())
179
            {
180
                QStringList iclockList =  i.value();
181
                if(iclockList.contains(iparentClock))
182
                {
183
                    QString iitemClock = iclockMap.value(j.key(),QString());
184
                    if(!iitemClock.isEmpty())
185
                    {
186
                        iclockList << (item->getInstanceName() + QObject::tr(":") +  iitemClock) ;
187
                        m_iclockSetMap.insert(i.key(),iclockList);
188
                    }
189
                }
190
                ++i ;
191
            }
192
            ++j ;
193
        }
194
    }
195
 
196
}
197
 
198
 
199
QString EziDebugScanChain::getChainClock(QString instancename,QString clock)
200
{
201
    QString iitemClock ;
202
    iitemClock = instancename + QObject::tr(":") + clock ;
203
    QMap<QString,QStringList>::const_iterator i = m_iclockSetMap.constBegin();
204
    while( i!= m_iclockSetMap.constEnd())
205
    {
206
        if(m_iclockSetMap.value(i.key()).contains(iitemClock))
207
        {
208
            return i.key();
209
        }
210
        else
211
        {
212
            continue ;
213
        }
214
        ++i ;
215
    }
216
    iitemClock.clear();
217
    return iitemClock ;
218
}
219
 
220
const QMap<QString,QStringList> &EziDebugScanChain::getLineCode(void) const
221
{
222
    return m_icodeMap ;
223
}
224
 
225
const QMap<QString,QStringList> &EziDebugScanChain::getBlockCode(void) const
226
{
227
     return m_iblockCodeMap ;
228
}
229
 
230
/*
231
int EziDebugScanChain::codeNum(QString modulename)
232
{
233
    return 0 ;
234
}
235
*/
236
 
237
const QMap<QString,QVector<QStringList> > & EziDebugScanChain::getRegChain(void) const
238
{
239
    return m_iregChainStructure ;
240
}
241
 
242
int EziDebugScanChain::getChildChainNum(QString clock)
243
{
244
    return m_nchildChainNumMap.value(clock,0) ;
245
}
246
 
247
const QStringList &EziDebugScanChain::getSyscoreOutputPortList(void)
248
{
249
    return m_isysCoreOutputPortList ;
250
}
251
 
252
void EziDebugScanChain::addToSyscoreOutputPortList(const QString& portlist)
253
{
254
    m_isysCoreOutputPortList.append(portlist);
255
    return ;
256
}
257
 
258
const QString &EziDebugScanChain::getscaningPortClock(void) const
259
{
260
    return m_iscaningPortClock ;
261
}
262
 
263
const QString &EziDebugScanChain::getSlowClock(void) const
264
{
265
    return m_islowClock ;
266
}
267
 
268
 const QStringList &EziDebugScanChain::getInstanceItemList(void) const
269
 {
270
    return m_iinstanceItemList ;
271
 }
272
 
273
 int  EziDebugScanChain::traverseAllInstanceNode(EziDebugInstanceTreeItem *item)
274
 {
275
     QString imoduleName = item->getModuleName() ;
276
     int nresult = 0 ;
277
     EziDebugPrj *icurrentPrj = const_cast<EziDebugPrj *>(EziDebugInstanceTreeItem::getProject());
278
     if(!icurrentPrj)
279
     {
280
         return 1 ;
281
     }
282
     int nappearanceTimes =  icurrentPrj->getPrjModuleMap().value(imoduleName)->getInstancedTimesPerChain(m_iChainName) ;
283
 
284
     nappearanceTimes++ ;
285
     icurrentPrj->getPrjModuleMap().value(imoduleName)->setInstancedTimesPerChain(m_iChainName,nappearanceTimes);
286
     icurrentPrj->getPrjModuleMap().value(imoduleName)->setConstInstanceTimesPerChain(m_iChainName,nappearanceTimes);
287
     icurrentPrj->getPrjModuleMap().value(imoduleName)->setAddCodeFlag(false);
288
     icurrentPrj->getPrjModuleMap().value(imoduleName)->setRegInfoToInitalState();
289
 
290
     // 清空
291
     for(int i = 0 ; i < item->childCount();i++)
292
     {
293
         if(nresult = traverseAllInstanceNode(item->child(i)))
294
         {
295
            return nresult ;
296
         }
297
     }
298
     this->addToInstanceItemList(item->getModuleName(),item->getInstanceName());
299
     return nresult;
300
 }
301
 
302
int EziDebugScanChain::traverseChainAllReg(EziDebugInstanceTreeItem *item)
303
{
304
    EziDebugPrj *icurrentPrj = const_cast<EziDebugPrj *>(EziDebugInstanceTreeItem::getProject());
305
    int nresult = 0 ;
306
 
307
    if(!icurrentPrj)
308
    {
309
        qDebug() << "the Prj Pointer is NULL!";
310
        return 1 ;
311
    }
312
 
313
    for(int i = 0 ; i < item->childCount();i++)
314
    {
315
        if(nresult = traverseChainAllReg(item->child(i)))
316
        {
317
           return nresult ;
318
        }
319
    }
320
 
321
    icurrentPrj->getPrjModuleMap().value(item->getModuleName())->constructChainRegMap(icurrentPrj , m_iinstanceItemList,item->getInstanceName()) ;
322
 
323
    return nresult;
324
}
325
 
326
 
327
int EziDebugScanChain::compareCodeSequence(const QMap<QString,int> &ilinesearchposMap ,const QMap<QString,int> &iblocksearchposMap )
328
{
329
    return 0 ;
330
}
331
 
332
void EziDebugScanChain::addToRegChain(QString clock ,int chainNum , const QStringList& reglist)
333
{
334
    QVector<QStringList> iregListVec  = m_iregChainStructure.value(clock) ;
335
    int i = 0 ;
336
 
337
    qDebug() << "EziDebug Info: The insert chain number:" << chainNum  ;
338
 
339
    if(iregListVec.count())
340
    {
341
        for(i = 0 ; i < iregListVec.count() ; i++)
342
        {
343
            // 加入到 未完毕的链
344
            if(i == chainNum)
345
            {
346
                QStringList ioriginRegList = iregListVec.at(i) ;
347
                ioriginRegList << reglist ;
348
                iregListVec.replace(i,ioriginRegList);
349
                m_iregChainStructure.insert(clock,iregListVec);
350
                break ;
351
            }
352
        }
353
        // 新增链
354
        if(i == iregListVec.count())
355
        {
356
            // 新增 链
357
            if(chainNum != iregListVec.count())
358
            {
359
                qDebug() << "EziDebug Error: the reglist is insert chain number:" << chainNum  <<" is not equal to total number:" << iregListVec.count() ;
360
            }
361
            iregListVec.insert(chainNum ,reglist);
362
            m_iregChainStructure.insert(clock,iregListVec);
363
        }
364
    }
365
    else
366
    {
367
       if(chainNum != 0)
368
       {
369
           qDebug() << "EziDebug Error: the reglist is insert chain number:" << chainNum  <<" is not right" ;
370
       }
371
       iregListVec.insert(0,reglist);
372
       m_iregChainStructure.insert(clock,iregListVec);
373
    }
374
 
375
    return ;
376
}
377
 
378
void EziDebugScanChain::setChainRegCount(const QString &clock ,int count)
379
{
380
    m_nregCountMap.insert(clock,count);
381
}
382
 
383
int EziDebugScanChain::getChainRegCount(QString clock)
384
{
385
   return m_nregCountMap.value(clock,0);
386
}
387
 
388
 
389
const QString &EziDebugScanChain::getCfgFileName(void) const
390
{
391
    return m_iChainName ;
392
}
393
 
394
/*
395
EziDebugTemplateFile * EziDebugScanChain::getTestBenchFile() const
396
{
397
    return m_ptestBechFile ;
398
}
399
*/
400
 
401
const QString& EziDebugScanChain::getChainRegCore(void)
402
{
403
    return m_iscanChainRegCore ;
404
}
405
 
406
const QString& EziDebugScanChain::getChainToutCore(void)
407
{
408
    return m_iscanChainToutCore ;
409
}
410
 
411
const QString& EziDebugScanChain::getUserDir(void)
412
{
413
    return m_iuserDir ;
414
}
415
 
416
void  EziDebugScanChain::saveEziDebugAddedInfo(const QString &regcore,const QString &toutcore,const QString &dir)
417
{
418
    m_iscanChainRegCore = regcore ;
419
    m_iscanChainToutCore = toutcore ;
420
    m_iuserDir = dir ;
421
}
422
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.