在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用python實現網表分模塊統計面積

sanyue7758 ? 來源:處芯積律 ? 2023-04-16 09:25 ? 次閱讀

雖然dc也有report_area -hier命令來報告各級模塊的面積,本python方案看似有點造輪子,但還是有一定的便利性。一、不受網表類型的限制,綜合網表、DFT網表、APR都可以。二、可以過濾面積小于指定值的小模塊,比如工具自動插入的ICG模塊。三、還可以根據面積占比做排序,方便分析面積的瓶頸。

一、讀入網表

下面先讀入網表,并分模塊識別每個模塊內部的stdcell和子模塊。這部分與《用python實現分模塊按cell類型統計cell個數并降序排列》的方法相同,所以這里直接導入netlistparser.py。

import netlistparser as nlparser
import sys


vlog_netlist_file = sys.argv[2]
modules=nlparser.read_vlog_netlist(vlog_netlist_file)

這樣網表就讀到了內部python字典里,結構如下:

{
"moduleA": {
"module_name": "moduleA",
"insts": {
"u_AND2_01":"AND2X1",
"u_AND2_02": "AND2X1",
"u_OR2_01":"OR2X1",
"u_INV_01":"INVX1"
}
},
"moduleB": {
    "module_name": "moduleB",
    "insts": {
        "u_AND2_01": "AND2X1",
        "u_AND2_02": "AND2X1",
        "u_OR2_01": "OR2X1",
        "u_INV_01": "INVX1"        
    }
},
}

二、讀入lib庫

stdcell的面積信息存儲在fab提供的lib文件里,所以我們需要從lib里讀到每種cell的面積,方法如下:

# libparser.py
import sys
import re
import json




def read_library(file_name):
    cells = {}
    
    lib_lines = open(file_name, 'r').readlines()


    cell_start = 0    
    pin_start = 0


    total_lines = len(lib_lines)
    print('')
    
    for i in range(total_lines):
        line = lib_lines[i]
        print('33[1F {}%'.format(round(100 * i / total_lines)))
        
cell_s_m=re.search(r'cells*((w+))s+{',line)
area_m=re.search(r'sareas+:s+(S+)s*;',line)
        pin_s_m  = re.search(r'spin((w+))s+{', line)
        dir_m    = re.search(r'sdirections+:s+(w+)', line)
        func_m   = re.search(r'sfunctions+:s+"(.*)"', line)
        end_m    = re.search(r'}', line)


        if cell_s_m:
            cell_start = 1
            cell = {}
            cell_name = cell_s_m.group(1)
            cell['cell_name'] = cell_name
            pins = []
            cell['pins'] = pins
            cells[cell_name] = cell


        if cell_start and area_m:
            area = area_m.group(1)
            cell['area'] = round(float(area), 4)
        
        if cell_start and pin_s_m:
            pin_start = 1
            pin = {}
            pin_name = pin_s_m.group(1)
            pin['pin_name'] = pin_name


        if cell_start and dir_m:
            pin_dir = dir_m.group(1)
            pin['pin_dir'] = pin_dir


        if cell_start and func_m:
            pin_func = func_m.group(1)
            pin['pin_func'] = pin_func


        if cell_start and pin_start and end_m:
            pin_start = 0
            pins.append(pin)
            
    return cells




def get_cell_area(cells, cell_name):
    if cell_name in cells:
        return cells[cell_name]['area']
    else:
        return 0




def is_libcell(cells, cell_name):
    if cell_name in cells:
        return True
    else:
        return False




def write_lib_info(lib_info, file_name):
    f = open(file_name, 'w')
    f.write(json.dumps(lib_info, indent=4))
    f.close()

其中,read_library()函數實現了用正則讀取lib文件里的cell名字、area、pin、pin方向、function等信息。今天只需要用到cell名字和面積。其它信息是為了后續擴展其它功能做準備。

get_cell_area()提供了讀取指定cell面積的接口。is_libcell()實現了判斷是libcell還是一般的設計上的子模塊。

write_lib_info()可以將lib庫的字典寫到json文件里,方便調試。

接下來,用這個libparser讀入lib庫:

import libparser
import sys


lib_file = sys.argv[1]
lib_info=libparser.read_library(lib_file)

三、面積遞歸統計

我們從top design開始,當遇到stdcell中的cell則累加,當遇到子模塊則遞歸。直到子模塊不再含有其它子模塊(僅由stdcell組成)時,則返回。

area_info = {}
def report_area(modules, lib_info, module_name):
    global area_info
    area = 0
    
    insts = modules[module_name]['insts']
    for inst in insts:
        cell_inst = inst
        cell_type = insts[inst]
        if cell_type in area_info:
            area = area + area_info[cell_type]
        elif libparser.is_libcell(lib_info, cell_type):
            area = area + libparser.get_cell_area(lib_info, cell_type)
        else:
#遞歸
report_area(modules,lib_info,cell_type)
            area = area + area_info[cell_type]
    
area_info[module_name]=area

四、打印面積

打印的同時,可以做一些過濾或者排序。

for module in area_info:
        if not re.search(r'CLOCK_GATE', module):
            print(module, round(area_info[module], 4))

效果如下:

c691f868-dbad-11ed-bfe3-dac502259ad0.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84739
  • 網表
    +關注

    關注

    0

    文章

    15

    瀏覽量

    7660

原文標題:用python實現網表分模塊統計面積

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    python模塊安裝方法

    Python模塊是一個Python文件,以.py結尾,包括了Python對象定義和Python語句,能讓
    發表于 04-04 14:57

    請問python可以替代shell嗎?

    的。再說下Python的效率問題,Python支持多進程、多線程以及協程(比線程更小一級),程序并發度是在Shell之上的。Python的核心模塊基本都是
    發表于 06-07 14:57

    分庫是什么?怎么實現

    數據庫分庫、讀寫分離的原理實現,使用場景
    發表于 10-25 17:24

    基于面積統計的氣候評價系統魏磊

    基于面積統計的氣候評價系統_魏磊
    發表于 03-16 08:00 ?0次下載

    如何使用python實現截圖自動存入Excel

    如何使用python實現截圖自動存入Excel
    的頭像 發表于 02-05 12:13 ?7268次閱讀

    如何利用Python判斷統計每個月天數源

    如何利用Python判斷統計每個月天數源。在日常的學習或是工作中會經常遇到需要統計日期數據的情況。特別是統計涉及到自然周或是自然月的計算。
    的頭像 發表于 11-02 09:41 ?3028次閱讀

    Python字符數統計函數程序

    Python字符數統計函數程序免費下載。
    發表于 05-25 14:35 ?19次下載

    python統計詞頻的三種方法

    python統計詞頻的三種方法方法。
    發表于 05-25 14:33 ?2次下載

    多元統計分析:R與Python實現

    多元統計分析:R與Python實現說明。
    發表于 05-27 11:27 ?14次下載

    Python學習科學編程

    Python學習科學編程,Python經典教材。
    發表于 03-09 15:00 ?0次下載

    使用Python DIY Arduino來顯示PC統計數據

    電子發燒友網站提供《使用Python DIY Arduino來顯示PC統計數據.zip》資料免費下載
    發表于 10-18 09:12 ?1次下載
    使用<b class='flag-5'>Python</b> DIY Arduino來顯示PC<b class='flag-5'>統計</b>數據

    淺析python模塊創建和from及import使用

    python模塊通過python程序編寫的.py文件即可創建,通過from及import語句導入模塊來使用。
    的頭像 發表于 02-21 14:44 ?862次閱讀

    Python實現OpenCV的安裝與使用

      本文實例講述了 Python 實現 OpenCV 的安裝與使用。分享給大家供 大家參考,具體如下:  由于下一步要開始研究下深度學習,而深度學習領域很多的算法和應 都是
    發表于 07-20 11:46 ?7次下載

    python如何導入模塊

    Python是一種強大的編程語言,它支持模塊化編程,使得開發者可以將代碼分解為可重用且獨立的模塊模塊是一個包含函數、類和變量等定義的文件,我們可以使用import語句將這些
    的頭像 發表于 11-22 14:46 ?964次閱讀

    如何實現Python復制文件操作

    Python 中有許多“開蓋即食”的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在這篇文章中,你將會看到一些 Python
    的頭像 發表于 07-18 14:53 ?426次閱讀
    主站蜘蛛池模板: www.五月婷| 国模大尺度在线| 亚洲 自拍 欧美 综合| 最色网站| 亚洲福利在线视频| 热99久久| 国产男女怕怕怕免费视频| 欧美大尺度aaa级毛片| 国产性猛交xx乱| 国产手机看片| 五月综合色啪| 亚洲乱码一二三四区| 最近2018年中文字幕在线| 亚洲爱婷婷色婷婷五月| 色老头在线官方网站| 在线毛片网| 亚洲区在线播放| 99久久精品免费看国产免费| 亚洲成人观看| 人人看人人澡| 天堂中文在线网| 全黄h全肉边做边吃奶在线观看| 六月丁香婷婷激情| 成人18毛片| 日本综合视频| h黄色| 曰本毛片| 欧美日韩精品一区二区在线线| 国产拍拍拍精品视频| 天天好比| 亚洲 另类色区 欧美日韩| 91视频污污版| 青娱乐伊人| 5月丁香6月婷婷| 福利一级片| 在线观看你懂的网址| 日本老师xxxxxxxxx79| 日韩毛片在线影视| 国产一级特黄毛片| 日韩第十页| 亚洲免费一|