首页 > 代码库 > PyConn的数据结构选择

PyConn的数据结构选择

作为数据结构小白,对于开发新工具PyConn的数据结构选择进行了大量的思想斗争而不得其果,只好从数据结构基础开始这个选择的过程。

 

数据结构是数据元素和数据元素之间关系的组织形式。

数据结构包含存储结构,逻辑结构,以及对数据的操作。

 

存储结构分为四种基本形式:

(1)顺序存储方式。数据元素顺序存放,每个存储结点只含一个元素。存储位置反映数据元素间的逻辑关系。存储密度大,但有些操作(如插入、删除)效率较差。

(2)链式存储方式。每个存储结点除包含数据元素信息外还包含一组指针。指针反映数据元素间的逻辑关系。这种方式不要求存储空间连续,便于动态操作(如插入、删除等),但存储空间开销大,且不适用于随机查找。

(3)索引存储方式。除数据元素存储在一地址连续的内存空间外,尚需建立一个索引表,索引表中索引指示存储结点的存储位置,兼有静态和动态特性。

(4)散列存储方式。将关键字散列在连续的有限的地址空间内,并将散列函数的值解释成关键字所在元素的存储地址,这种存储方式称为散列存储。其特点是存取速度快,只能按关键字随机存取,不方便顺序存取。

 

逻辑结构也分为四种基本形式:

(1)集合

(2)线性结构

(3)树形结构

(4)图形或网状结构。

 

目前条件下,我们几乎可以不关系内存空间的大小、连续性,只追求查找和其他操作的效率。

一个大致的判断,PyConn的存储结构可以选取 索引存储方式 或者 散列存储方式,或者混合形式;

逻辑结构可以选取 树形结构 或者 图形/网状结构。

 

简单来看,一种数据结构在语言上可以用结构体(struct)或者类(class)来表示,我们用python,所以用class表示。

PyConn在操作大多在两个层面上:

1. instance数据元素的查找和修改

2. instance之间关系的查找和修改

不妨把这两层看作是两层数据结构,按照之前的预想

第一层是class instance(instance含层次保证唯一性)

value主要包括

a.例化形式(module和param)

b.跟其他instance的connection

c.资源(reg, comb, mem)

存储结构可以选择散列存储

逻辑结构可以无视(元素之间互相不依赖)

基本操作是插入(初始化),查找,修改value(划分导致),删除(删除dft/lp连接)

第二层是class instance_tree(system)

存储结构可以选择链式存储(其实可以看作存的值就是instance的指针,所以这一层可以不关心存储结构)

逻辑结构可以选择树形结构(因为自顶向下的逻辑关系,感觉不需要图或者网形结构)

基本操作是插入(asic代码自顶向下解析),查找,修改value(主要是修改层次即),删除。

亦可以理解为PyConn的数据结构是 存储结构:散列 + 逻辑结构:树形

 

PyConn的input:

FPGA_partition.txt (类似于iconnect中的hierarchy部分,让我们把auto partition跟PyConn分开吧)

ASIC RTL的gtech网表

ASIC RTL的层次结构和例化形式(看能否用反向connect生成)

 

PyConn的DB1:

instance_tree asic_system

instance asic_instance1

instance asic_instance2

instance asic_instance3

 

PyConn的DB2:

instance_tree fpga_system

instance fpga_instance1

instance fpga_instance2

instance fpga_instance3

 

PyConn的output:

FPGA RTL代码

 

散列是确定的,即hash,可是

树形结构有这么多种,哪种最适合 -- 最终选择标准是要算得快 -- 而要算什么?

问题转化为

1. 有哪几种树,这些树形的特点是什么,适合什么样的操作?

2. PyConn需要对instance做哪些操作?每种操作分别有多大概率要用到?

PyConn的数据结构选择