当前位置: 首页 > news >正文

verilog代码连线集成工具的实践

目录

引言

代码解析

解析器的需求

数据结构

基础class

集合class:

界面

模块例化里界面

连线界面

连线界面示例

消息传递


引言

工作中经常需要开发很多自动化的脚本或者小工具来提升开发效率。在没有读《Cad Frameworks: Principles And Architecture》之前,这些脚本或者工具的开发,只是按照功能需求,用各种function和变量、类堆砌而成。但是随着脚本代码规模的增加,脚本就像一个打满补丁的轮胎,每迭代一次,都很恼火。

最近刚好完成一个公司内部的自动连线工具,在开发前按照书中的结构划分,照猫画虎做了类似的分层设计。目前迭代很多版,修改起来比以前轻松很多。回看书中的framework,有多了一些认知,对这本1994年初版的书心中默默点了个赞。

此外,还要感谢pyverilog的作者,从他的代码中借鉴了部分数据结构。

代码解析

代码解析直接使用开源的解析工具。然后从工具中提取需要的数据,组成module的数据结构。

解析器的需求

  1. 支持宏定义的展开

  2. 支持提取parameter的名字和值。目前用的verilog-perl只能提取parameter的定义字符,对于parameter之间的嵌套引用,还需要自己处理。

  3. 支持端口名、位宽、方向等信息

  4. 支持按照定义的顺序获取端口信息

目前在用verilog-perl,基本上满足端口解析的需求。

解析结果通过转换为xml或者json,提供给自研的工具进行读取。

使用json作为中间格式,除了便于调试,还便于以后切换不同的编译工具。

数据结构

基础class

分为:module(解析好的module信息)、instance(例化模块信息),top_module(连线后生成的顶层模块)、project(编译顺序等配置信息)。

module主要包含端口名、位宽、类型。

instance主要包含例化名、端口的连线信息。

top_module包含:端口名、位宽、类型、wire的定义名、位宽。

集合class:

modules(module的实例列表)、instances(例化模块的实例列表)。

界面

界面分为3大块:

  1. 模块例化界面:完成module的添加和更新,例化模块的创建和重命名、参数配置等

  2. 连线操作界面:显示例化模块和顶层的pin,提供连线操作——例如链接和断开、创建顶层引脚和重命名等。

  3. 消息界面:显示修改记录或者状态变更信息,方便用户查阅和问题定位。

模块例化里界面

需要考虑verilog文件的添加、重新加载(这个经常用到,尤其是在代码频繁迭代时)。

如果考虑宏文件的加载,就会更复杂,需要支持解析顺序的配置。

需要支持parameter的重定义(在重定义的界面,还要显示module内的parameter的默认值)。

连线界面

连线界面的功能需求比较多--显示例化模块和port,port显示位宽,链接的wire名称,显示顶层模块的引脚信息,支持端口连接和断开,支持顶层引脚的添加和删除,支持wire的重命名,支持端口的固接。支持自动和手动连线,支持按照名字筛选模块和port,支持筛选port的链接状态。

自动连线其实因为按照同名进行连接,反而比较简单。(这也是很多)

对非同名信号的手动链接,对于工具的易用性有较大的提升。这一点,gui界面的优点就提现出来了。

还要考虑wire的拼接、截取,或者固接。

连线界面示例

连线界面分为左右两半。特意把顶层的引脚input和例化模块的output、input分为一边。这样划分的好处是,只有半屏之间存在连线关系;半屏之内不会需要连接——交互方式的处理上比较简单。

例化模块的端口显示示意

port name用来显示端口的名称

port width显示端口的宽度定义

connection用来显示连接信息,显示连接的wire或者顶层port、固接。

 上图为连线的示例。

实施通过在界面中显示连线的wire名称来表示连接关系,没有使用绘图来表示连线。绘图的方式在连线很多的时候,感觉会比较混乱。

消息机制

因为使用不同类封装了界面的区域,有时候还需要建立消息传输的机制,用于不同区域的协同更新。例如某个顶层引脚删除,还需要断开例化模块相连的引脚。这就需要从顶层通知到例化模块的变量,让其相应的断开连线。


随着工具不断地迭代,发现连线工具除了可以提高连线效率,通过增加筛选功能,可以降低连线出错的概率,并且可以在编译前更早的发现问题。

例如支持筛选连线与端口宽度不匹配的connection、筛选端口名和连线名不同的connection、筛选未连接的端口。

相关文章:

verilog代码连线集成工具的实践

目录 引言 代码解析 解析器的需求 数据结构 基础class 集合class: 界面 模块例化里界面 连线界面 连线界面示例 消息传递 引言 工作中经常需要开发很多自动化的脚本或者小工具来提升开发效率。在没有读《Cad Frameworks: Principles And Architecture》…...

【深入STL:C++容器与算法】深度解析string类的使用

文章目录 1️⃣什么是stringstring的设计以及编码问题 2️⃣string的重要接口💫💫一、string的初始化二、string的赋值三、string的长度四、string元素获取1. char& at(size_t pos)2. operaotr []3. front和back 五、迭代器1. 什么是迭代器2. 范围fo…...

【ChatGPT】解锁AI思维链:如何让机器像人类一样思考?

在人工智能领域,我们一直在追求让机器像人类一样思考。然而,即使是最先进的AI,也常常被诟病缺乏“常识”,难以理解复杂问题,更不用说像人类一样进行逻辑推理和解决问题了。最经常的表现就是遇到不会的地方,…...

用 Python 从零开始创建神经网络(十七):回归(Regression)

回归(Regression) 引言1. 线性激活(Linear Activation)2. 均方误差损失(Mean Squared Error Loss)3. 均方误差损失导数(Mean Squared Error Loss Derivative)4. 平均平方误差 (MSE) …...

gentoo安装Xfce桌面

一、安装Xfce 1.选择一个配置文件 具体步骤可参见笔者的另一篇博客https://blog.csdn.net/my1114/article/details/143919066,配置文件选择24. 2.安装Xfce (1)root #emerge --ask xfce-base/xfce4-meta 第一次启动登录后时可能还需starx来启动X11 (2)安装slim&#…...

阿尔茨海默症数据集,使用yolo,voc,coco格式对2013张原始图片进行标注,可识别轻微,中等和正常的症状

阿尔茨海默症数据集,使用yolo,voc,coco格式对2013张原始图片进行标注,可识别轻微,中等,严重和正常的症状 数据集分割 训练组100% 2013图片 有效集% 0图片 测试集&#xf…...

【物联网技术与应用】实验4:继电器实验

实验4 继电器实验 【实验介绍】 继电器是一种用于响应施加的输入信号而在两个或多个点或设备之间提供连接的设备。换句话说,继电器提供了控制器和设备之间的隔离,因为设备可以在AC和DC上工作。但是,他们从微控制器接收信号,因此…...

lvs介绍与应用

LVS介绍 LVS(Linux Virtual Server)是一种基于Linux操作系统的虚拟服务器技术,主要用于实现负载均衡和高可用性。它通过将客户端请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性。lvs是基于集群的方式实现 集群…...

Group FLUX - User Usage Survey Report

文章目录 User Feedback Summary: Software Advantages and FeaturesUser Feedback Issues and Suggested Improvements1. Security Concerns:Improvement Measures: 2. System Performance and Loading Speed:Improvement Measures: 3. Data Display Issues:Improvement Measu…...

XXE靶机攻略

XXE-Lab靶场 1.随便输入账号密码 2.使用bp抓包 3.插入xxl代码,得到结果 xxe靶机 1.安装好靶机,然后输入arp-scan -l,查找ip 2.输入ip 3.使用御剑扫描子域名 4.输入子域名 5.输入账号密码抓包 6.插入xml代码 7.使用工具解码 8.解码完毕放入文…...

第78期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…...

电容Q值、损耗角、应用

电容发热的主要原因:纹波电压 当电容两端施加纹波电压时,电容承受的是变化的电压,由于电容内部存在寄生电阻(ESR)和寄生电感(ESL).因此电容会有能量损耗,从而产生热量,这…...

【WRF教程第3.6期】预处理系统 WPS 详解:以4.5版本为例

预处理系统 WPS 详解:以4.5版本为例 Geogrid/Metgrid 插值选项详解1. 插值方法的工作机制2. 插值方法的详细说明2.1 四点双线性插值(four_pt)2.2 十六点重叠抛物线插值(sixteen_pt)2.3 简单四点平均插值(av…...

linux 安装redis

下载地址 通过网盘分享的文件:redis-7.2.3.tar.gz 链接: https://pan.baidu.com/s/1KjGJB1IRIr9ehGRKBLgp4w?pwd0012 提取码: 0012 解压 tar -zxvf redis-7.2.3.tar.gz mv redis-7.2.3 /usr/local/ cd /usr/local/redis-7.2.3 安装 make install 修改配置文件 /搜索…...

Linux - rpm yum 工具及命令总结

RPM 概述 定义:RPM(RedHat Package Manager),是一个功能强大的软件包管理系统,用于在 Linux 系统中安装、升级和管理软件包采用系统:主要用于基于 RPM 的 Linux 发行版,如 Red Hat、CentOS、S…...

电子应用设计方案-58:智能沙发系统方案设计

智能沙发系统方案设计 一、引言 智能沙发作为一种融合了舒适与科技的家居产品,旨在为用户提供更加便捷、舒适和个性化的体验。本方案将详细介绍智能沙发系统的设计思路和功能实现。 二、系统概述 1. 系统目标 - 实现多种舒适的姿势调节,满足不同用户的…...

复习打卡Linux篇

目录 1. Linux常用操作命令 2. vim编辑器 3. 用户权限 4. Linux系统信息查看 1. Linux常用操作命令 基础操作: 命令说明history查看历史执行命令ls查看指定目录下内容ls -a查看所有文件 包括隐藏文件ls -l ll查看文件详细信息,包括权限类型时间大小…...

在Ubuntu 22.04 LTS中使用PyTorch深度学习框架并调用多GPU时遇到indexSelectLargeIndex相关的断言失败【笔记】

在Ubuntu 22.04 LTS系统中,已安装配置好CUDA 12.4、cuDNN 9.1.1以及PyTorch环境 export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 在PyTorch深度学习框架训练调用多GPU时,提示 indexSelectLargeIndex: block: [x, 0, 0], thread: [x, 0, 0] Assertion src…...

qt 类中的run线程

在Qt中,QThread类的run()方法是线程的执行入口,它是由QThread内部自动调用的,而不是用户直接调用。 详细解释: QThread类: QThread是Qt的线程类,提供了用于多线程操作的接口。我们可以创建QThread对象并将…...

Vue3父子组件传属性和方法调用Demo

Vue3父子组件传属性和方法调用Demo 说明目录父组件给子组件传值和方法 父组件给子组件传值-使用defineProps接受父组件属性值父组件给子组件传值-使用defineModel接受父组件v-model值 当子组件只需要接收父组件一个v-model值时,写法1如下:子组件接收单个v-model写法2如下:当子…...

aac怎么转为mp3?操作起来很简单的几种aac转mp3的方法

aac怎么转为mp3?aac格式的优势主要体现在音质和压缩效率,尤其是在较低比特率下,能够实现更清晰的音质,这也是为何许多现代设备和应用偏爱aac格式的原因之一。特别是在手机、平板以及智能音响等设备中,aac文件几乎可以无…...

结合mybatis-plus实现Function获取java实体类的属性名

1、工具类 package com.yh.tunnel.util;import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.google.common.base.CaseFormat; import com.yh.tunnel.domain.Plan;import java.lang.invoke.SerializedLambda; import java.lang.reflect.Field; import…...

vue 响应式数据原理

发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 Vue 的响应式数据原理是其核心功能之一,它使得 Vue 应用能够自动响应数据的变化,并在数据变化时自动更新…...

android 计算CRC

<?php /** * 将一个字符按比特位进行反转 eg: 65 (01000001) --> 130(10000010) * param $char * return $char */ function reverseChar($char) { $byte ord($char); $tmp 0; for ($i 0; $i < 8; $i) { if ($byte & (1 << $i)…...

Linux tinyproxy 使用教程

简介 Tinyproxy 是一款轻量级 HTTP 代理服务器&#xff0c;使用最少的资源&#xff0c;非常适合硬件有限的系统。尽管体积小&#xff0c;但它可以处理大量流量&#xff0c;而不会出现明显的性能问题。旨在处理简单的代理任务。它通常用于路由网络流量以保护隐私、缓存或访问受…...

局部规划器设计思路

本文参考知乎文章:如何设计局部规划器 0 引言 局部规划器设计通用方法:生成路径——>寻找最优路径——>后处理优化 1 路径生成 四个问题: ① 如果全局路径中突然出现动态障碍物 ② 如果全局路径非常靠近障碍物 ③ 如果全局路径不容易跟踪(B样条平滑) ④ 如果全局…...

数字图像处理技术期末复习

1. 已知图像的分辨率和深度&#xff0c;怎么求图像的存储空间&#xff08;位&#xff0c;字节&#xff0c;KB&#xff09;&#xff1f; 题目&#xff1a; 已知图像的分辨率和深度&#xff0c;怎么求图像的存储空间&#xff08;位&#xff0c;字节&#xff0c;KB&#xff09;&a…...

UITableView显示数据,增加数据,删除数据及移动数据行

UITableView和html中的table有点类似的&#xff0c;也有header和footer和body&#xff0c;row。下面给出一个demo // // TableViewTestViewController.m // iosstudy2024 // // Created by figo on 2024/12/9. //#import "TableViewTestViewController.h"interfa…...

金智塔科技喜获CCF中国数字金融大会 GraphRAG竞赛二等奖

12月7日&#xff0c;CCF 首届中国数字金融大会GraphRAG竞赛在上海落下帷幕&#xff0c;金智塔科技&#xff08;团队名称&#xff1a;塔塔向前冲&#xff09;从众多参赛队伍中脱颖而出&#xff0c;喜获二等奖。 CCF 首届中国数字金融大会由中国计算机学会主办&#xff0c;中国计…...

方案解读:数字化扩展中如何提升多云应用安全能力?

越来越多企业选择上云&#xff0c;拥抱数字化转型。数据显示&#xff0c;在过去一年中&#xff0c;将应用托管至六种不同环境中的企业比例已经翻倍&#xff0c;达到令人震惊的38%。与此同时&#xff0c;应用和流经其的关键数据已成为日益复杂的网络攻击的首选目标&#xff0c;且…...