自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 IC版图设计之GDS2文件格式详解

GDS2(Graphic Data System II)是一种用于集成电路(IC)设计和版图数据的二进制文件格式。它是GDS格式的第二个版本,由Calma公司在20世纪70年代开发,现已成为半导体行业中最广泛使用的版图数据交换标准之一。GDS2文件主要用于描述芯片的物理布局信息,包括几何图形、层次结构、文本标注等。GDS2文件作为半导体行业中最经典的版图数据格式,至今仍在IC设计和制造中发挥着重要作用。尽管其存在文件体积大、功能有限等局限性,但其广泛的兼容性和成熟性使其难以被完全取代。

2025-02-20 14:56:29 1142

原创 PCB设计之Gerber RS274X格式详解

Gerber RS274X是PCB设计和制造中最常用的文件格式之一,凭借其简单、可靠的特点,成为行业标准。尽管它存在一定的局限性(如缺乏层间关系和网络表),但其广泛的支持和易用性使其在PCB制造中占据重要地位。掌握Gerber RS274X的生成和验证方法是PCB设计师的基本技能。

2025-02-20 14:37:46 588

原创 PCB设计之ODB++文件格式详解

ODB++(Open Database++)是一种广泛应用于PCB(印制电路板)设计和制造领域的开放数据交换格式。它由Valor Computerized Systems(现为Siemens EDA的一部分)开发,旨在替代传统的Gerber文件格式,提供更完整、结构化的制造数据,从而优化PCB设计到生产的流程。ODB++通过结构化数据整合了PCB设计到制造的全流程信息,显著提高了生产效率和准确性。尽管存在一定的兼容性挑战,但其在复杂项目和高可靠性场景中的价值不可替代。

2025-02-20 14:11:04 2361

原创 面向对象设计

面向对象的编程类之间的关系有复合(composition)、委托(aggregation)和继承(extension) 3种.继承我里头里面有某种东西;queue里面的功能有deque来实现;A拥有B;A的所有功能都有B来实现;Adapter(适配器);queue,用别的来实现内存角度构造和析构函数顺序委托(Delegation)指针指向右边的类;by reference (指针也叫)has a :有外部就有内部,一起的委托:不同步。左边指针可以指向不同的类,实现不同的功

2021-03-30 00:37:41 255

转载 常见七大排序算法c++代码实现

一级标题二级标题三级标题四级标题五级标题六级标题排序的分类稳定排序:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;其中稳定得排序有冒泡排序、插入排序、归并排序、计数排序、桶排序、基数排序。不稳定排序:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;不稳定的排序有选择排序、希尔排序、快速排序和堆排序。内排序 :所有排序操作都在内存中完成;外排序 :由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;各算法的对比如下表所示:n:

2020-12-13 23:33:21 1921

原创 工程实践中常见的几种设计模式解析及 C++ 实现

以上四种设计模式(单例模式、工厂模式、观察者模式和策略模式)是工程实践中最常用的设计模式之一。每种模式都有其适用的场景和注意事项,合理使用它们可以显著提升代码的质量和系统的可维护性。在实际开发中,我们需要根据具体需求选择合适的设计模式,并结合语言特性和框架进行实现。同时,也要注意避免过度设计,以免增加不必要的复杂性。

2025-02-25 11:02:42 565

原创 C++代码编写:优雅与高效兼得的技术分享

以上是一些C++编程中的最佳实践,涵盖了函数设计、命名规范、内存管理、错误处理等多个方面。遵循这些原则可以显著提升代码的质量和可维护性,减少潜在的bug和安全漏洞。希望对你有所帮助!

2025-02-24 16:49:19 438

原创 IC版图设计之DEF文件格式详解

DEF(Design Exchange Format)是描述集成电路物理设计实现细节的标准格式,由Cadence提出并广泛应用于EDA工具链。又叫设计交换格式,它描述的是实际的设计,对库单元及它们的位置和连接关系进行了列表,使用DEF来在不同的设计系统间传递设计,同时又可以保持设计的内容不变。DEF与只传递几何信息的GDSII不一样。它还给出了器件的物理位置关系和时序限制等信息。

2025-02-24 16:30:02 449

原创 IC版图设计之LEF文件格式详解

LEF是集成电路设计流程中的一种标准文件格式,由Cadence公司提出并被业界广泛采用。它用于描述单元库(Standard Cell Library)的,包含金属层定义、单元边界、引脚位置、障碍区域等关键数据,是EDA工具间交换的重要载体。

2025-02-23 11:41:28 515

原创 IC版图设计之OASIS文件格式详解

OASIS(Open Artwork System Interchange Standard)是继GDSII之后新一代的集成电路版图数据交换标准,由SEMI在2004年正式发布(SEMI标准号:SEMI P39)。高压缩率:相比GDSII可减少3-10倍文件体积扩展性强:支持纳米级工艺的复杂图形描述跨平台兼容:独立于EDA工具和操作系统安全增强:内置校验和与加密支持。

2025-02-23 10:37:18 720

原创 IC版图设计之DXF文件格式详解

【代码】IC版图设计之DXF文件格式详解。

2025-02-22 11:10:55 205

原创 PCB设计之IPC2581文件格式详解

IPC-2581是电子行业广泛使用的PCB设计与制造数据交换标准,由IPC国际电子工业联接协会制定。

2025-02-22 10:35:20 341

原创 C++开发ODB++文件解析动态库

此博客讲解C++开发解析ODB++文件以及导入OA,生成版图。

2025-02-20 15:03:04 134

原创 C++开发解析Gerber文件导入OA

此博客讲解geber文件解析以及导入OA生成版本全过程。

2025-02-20 15:00:16 132

原创 win11 系统 GPU版本pytorch、CUDA、anaconda 、pycharm详细安装教程

win11 系统深度学习环境搭建----- GPU版本pytorch、CUDA、cuDnn、anaconda 、tensorflow_gpu、pycharm详细安装教程参考比站视频:PyTorch(GPU版)详细安装教程_哔哩哔哩_bilibiliPython+Anaconda+PyCharm的安装和基本使用【适合完全零基础】不只是教你如何安装,还告诉你为什么这么安装_哔哩哔哩_bilibiliAnaconda和Pycharm的安装和配置 - 做你的太阳乀 - 博客园 (cnblogs.com)1

2021-11-18 14:38:27 14904 11

原创 自定义排序、结构体/优先队列 重载小于或大于号

数组一般的sort排序#include<iostream>#include<algorithm>using namespace std;int a[10]={5,1,8,4,2,5,7,4,9,10};int main(){ int i; sort(a,a+10); for(int i=0;i<10;i++){ cout<<a[i]<<" "; } return 0;}//输出:

2021-09-15 19:44:24 3034

原创 2021-08-12

40.1 函数、类模版模版可分两类:函数模版,类模版。函数模板可被重载,而类模板不能被重载,也就是说允许存在两个同名的函数模板,还可以对它们进行实例化,使它们具有相同的参数类型。函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。40.2 模板特化对单一模板提供的一个特殊实例,使每种类型都具有相同的功能,将一个或多个模板参数绑定到特定的类型或值上。特化分为了两种,全特化和偏特化。不能将特化和重载混为一谈,全特化和偏特化都没有引入一个全新的模板或者模

2021-08-12 17:23:19 471

原创 软件开发基础知识

34. 内存资源及管理内存被分成五个区:栈、堆、静态存储区、常量区、代码区。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D6oQfAxQ-1628760080125)(file:///D:/写文章-优快云博客_files/89263655e6e048caa4615ec16accb0eb.png)]栈:存放函数的参数和局部变量,编译器自动分配和释放。栈属于计算机系统的数据结构,进栈出栈有相应的计算机指令支持,而且分配专门的寄存器存储栈的地址,效率高,内存空间是

2021-08-12 17:22:51 812

原创 软件开发基础知识

19. std::move语义并不移动任何东西,唯一功能是将一个左值强制转化为右值引用,继而可通过右值引用使用该值,以用于移动语义。本质是一个无条件static_cast,形参为左值类型,返回右值引用。1) 函数原型定义template <typename T>typename remove_reference<T>::type&& move(T&& t) { return static_cast<typenam

2021-08-12 17:21:07 988

原创 软件开发基础知识(1)

3.虚函数和纯虚函数3.1动态编译VTABLE实际是一个函数指针的数组,每个虚函数占用这个数组的一个slot。一个类只有一个VTABLE,不管它有多少个实例。派生类有自己的VTABLE,但派生类的VTABLE与基类的有相同的函数排列顺序,同名的虚函数被放在两个数组的相同位置。在创建类实例的时候,编译器还会在每个实例的内存布局中增加一个vptr字段,该字段指向本类的VTABLE。通过这些手段,编译器在看到一个虚函数调用的时候,就会将这个调用改写。类的实例对象不包含虚函数表,只有虚指针;一个类的虚函数在

2021-08-12 17:18:16 925

原创 c++软件开发基础知识

3.虚函数和纯虚函数3.1动态编译VTABLE实际是一个函数指针的数组,每个虚函数占用这个数组的一个slot。一个类只有一个VTABLE,不管它有多少个实例。派生类有自己的VTABLE,但派生类的VTABLE与基类的有相同的函数排列顺序,同名的虚函数被放在两个数组的相同位置。在创建类实例的时候,编译器还会在每个实例的内存布局中增加一个vptr字段,该字段指向本类的VTABLE。通过这些手段,编译器在看到一个虚函数调用的时候,就会将这个调用改写。类的实例对象不包含虚函数表,只有虚指针;一个类的虚函数在

2021-08-12 11:39:26 586

原创 数据库的学习

数据库的学习1.单表查询学生表student的结构:查询表中所有学号小于8的男学生的学号和姓名select sid,sname # 需要查询出来的字段from student # 从哪张表中取数where ssex = '男’ and sid < 8 #设置查询条件,两个条件用and(和)/or(或)连接如果你需要对选择出来的结果进行处理,需要使用函数和order by,再看一个例子:查询学号非空,姓“张”的学生的学号和姓名,按照sid升序并取前三条select s

2021-08-10 16:38:47 1385

原创 Git的简单使用教程

Git的使用1. 拉取远端分支打开Git Bash,切换到需要存放代码的文件目录下。例如,执行cd e:/workCode,切换到e盘workCode目录下。执行git lfs clone 项目的ssh地址拉取远程仓库代码到本地。其中,项目的ssh地址可在CodeClub中项目对应页面获取。例如:git clone ssh://git@szv-y.codehub.huawei.com:2222/HERT/V5R12C10/CRSP.git注意:如果出现拉取二进制文件速率为0的情况,可以尝试更新自

2021-07-29 14:47:44 980

原创 用栈模拟数学表达式计算

用栈模拟数学表达式计算这类题包括数字的加减乘除运算,有基本计算器、逆波兰表达式等;150 逆波兰表达式逆波兰表达式解题思路这题的解题思路就是,用一个栈去存储每一个字符串,遇到数字直接入栈,遇到运算符就先做运算。class Solution {public: int to_digit(string s){ int n=s.size(); int sum=0; for(int i=0;i<n;i++){ i

2021-04-01 16:45:46 436

原创 C++标准库(STL)与泛型编程

C++标准库(STL)与泛型编程学习网站:cplusplus.comcppRerference.com学习书籍:《STL源码剖析》STL体系结构基础介绍STL六大部件:容器、分配器、算法、迭代器、适配器、仿函数迭代器:泛化的指针分配器:分配内存仿函数:作用类似函数,加减适配器(变压器):count_if:给出条件之下符合条件的个数;bind2nd:绑定第二参数;not1 :否定,大于等于40;end指向最后一个元素的下一个元素c++11的新特性:range-based

2021-03-31 21:34:56 684 2

原创 面向对象编程下---兼谈对象模型

面向对象编程下—兼谈对象模型转换函数Fraction转换为double,没有return type:将fraction转换为double43=3/1;所以第二个参数可以默认为1;one-argument 一个参数就可以了;上面代码考虑将4转换为Fraction。当有两条路可行之时,会发生歧义二义性;explicit明白的,明确的,不可以将3变为3/1,用在构造函数前面,标准库中转换函数的利用代理,a代表B,一定有一个函数将a转换为b;pointer-like clasa

2021-03-30 20:55:03 199

原创 大整数的加减乘法运算

大整数的加减乘法运算415 字符串相加(10进制或36位加法)-字节高频给定两个字符串string num1和string num2,求两个的加法,其实即为大整数加法//10进制加法 string addStrings(string num1, string num2) { int i = num1.size()-1; int j = num2.size()-1; int carry = 0; string res; w

2021-03-29 12:48:05 214

原创 terminate called after throwing an instance of ‘std::invalid_argument‘ what(): stoi

当stoi函数用于空字符串时,会报这个错误如下面这行代码:string ans="";int res=stoi(ans);这时要判断要转换的字符串是否为空:

2021-03-23 23:51:22 2579

原创 Leetcode 每日一题打卡系列

Leetcode 每日一题打卡系列03.14 设计哈希映射(706)class MyHashMap {public: /** Initialize your data structure here. */ vector<list<pair<int,int>>>data; const static int base=769; static int hash(int key){ return key%base; }

2021-03-18 13:44:20 334

原创 单调栈分析

单调栈解决问题:解决最近邻较小或较大的问题;滑动窗口最大或最小值用途: 可以以 O(1)的时间复杂度得知某个位置左右两侧比他大(或小)的数的位置,当你需要高效率获取某个位置左右两侧比他大(或小)的数的位置的的时候就可以用到单调栈。求解数组中元素右边第一个比它小的元素的下标,从前往后,构造单调递增栈;求解数组中元素右边第一个比它大的元素的下标,从前往后,构造单调递减栈;求解数组中元素左边第一个比它小的元素的下标,从后往前,构造单调递减栈;求解数组中元素左边第一个比它小的元素的下标,从后往前,

2021-03-16 18:55:53 313

原创 数据结构之并查集

并查集更加详细的介绍参见:并查集介绍基础知识Quick-Find算法#include<stdio.h>#include<stdlib.h>typedef struct UnionSet{ int *color; int n;}UnionSet;UnionSet *init(int n){ UnionSet *u=(UnionSet *)malloc(sizeof(UnionSet)); u->color=(int *)mall

2021-01-12 19:32:41 147

原创 2021/01/12打卡

560 和为K的子数组解题思路:最先向想到的是三重暴力循环:如下代码所示:时间复杂度为O(n^3);超时int subarraySum(vector<int>& nums, int k) { int cnt=0; for(int i = 0; i<nums.size();i++){ for(int j=i;j<nums.size();j++){ int sum = 0;

2021-01-12 17:05:55 153

原创 数据结构之队列(循环队列)

循环队列的代码演示由于队列的出队操作是head++,直接向后移动,当队尾达到队列设定的长度时,会出现假溢出的现象(即可能head前面还可以插入),因此可以改为循环队列,而循环队列可能出现真溢出的现象,因此需要扩容操作。#include<stdio.h>#include<stdlib.h>#include<time.h>typedef struct Queue{ int *data; //队首,和队尾,队列的长度 int head,tai

2021-01-09 13:56:45 284

原创 数据结构之链表

#include<stdio.h>#include<stdlib.h>#include<time.h>typedef struct ListNode{ int data; struct ListNode *next;}ListNode;typedef struct List{ ListNode head; //变量,不是指针,方便链表节点的插入和删除,虚拟头节点(没有数据域) int length; //当前链表的长度信息}

2021-01-09 13:29:28 118 1

原创 数据结构之线性表

#include<stdio.h>#include<stdlib.h>#include<time.h>typedef struct Vector{ int *data; int length,size;}Vec;Vec *init(int n){ Vec *v=(Vec *)malloc(sizeof(Vec)); v->data=(int *)malloc(sizeof(int)*n); v->lengt

2021-01-08 23:22:12 130

原创 数据结构之堆(优先队列)

堆和优先队列堆—尾部插入调整,从最后一层插入,自下向上调整,堆–头部弹出调整,删除堆顶的元素,将堆尾的元素放到堆顶,维护完全二叉树,然后调整顺序堆----优先队列堆排序将堆顶元素与堆尾元素交换将此操作看作是堆顶元素的弹出操作按照头部弹出以后的策略调整堆#include<stdio.h>#include<time.h>#include<stdlib.h>#define swap(a,b){\ __typeof(a) __temp=a;\

2021-01-08 19:39:59 194

原创 动态规划问题

对于动态规划问题,如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了!确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组70 爬楼梯class Solution {public: int climbStairs(int n) { if(n<=1) return n; vector<int>dp(n+1); dp[1]=1; dp[2]=2

2021-01-06 21:29:14 249

原创 2020/12/30leetcode刷题

25 K个一组反转链表解题思路:大致过程可以分解为1、找到待翻转的k个节点(注意:若剩余数量小于 k 的话,则不需要反转,因此直接返回待翻转部分的头结点即可)。2、对其进行翻转。并返回翻转后的头结点(注意:翻转为左闭又开区间,所以本轮操作的尾结点其实就是下一轮操作的头结点)。3、对下一轮 k 个节点也进行翻转操作。4、将上一轮翻转后的尾结点指向下一轮翻转后的头节点,即将每一轮翻转的k的节点连接起来。/** * Definition for singly-linked list. *

2020-12-31 11:45:04 106

原创 2020/12/29刷题

209长度最小的子数组解题思路:解答1:暴力解法:两层暴力循环解决问题时间复杂度:O(N2)class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int ret=INT_MAX; for(int i=0;i<nums.size();i++){ int sum=0; for(int j=i;j&

2020-12-30 10:01:28 154

原创 2020/12/27 leetcode打卡

6.Z字型变换leetcode 6 中等解题思路:遍历一遍字符串,从左到右按箭头方向迭代 s ,将每个字符添加到合适的行。之后从上到下遍历行即可。当前行 curRow 为 0 或 n-1 时,箭头发生反向转折。class Solution {public: string convert(string s, int numRows) { if(numRows<2) return s; bool flag=false; int le

2020-12-27 21:09:46 122

官方odb++文件样式

官方odb++文件样式

2025-02-22

ODB++2024年8月官方ODB++文件格式

ODB++2024年8月官方ODB++文件格式

2025-02-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除