首页 > 代码库 > 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的数据结构选择