-
半导体
-
传感器,变送器
专用传感器 传感器 - 配件 传感器接口 - 接线盒 传感器电缆 - 配件 位置传感器 - 角,线性位置测量 光传感器 - 光电,工业 光学传感器 - 光断续器 - 槽型 - 晶体管输出 光学传感器 - 光断续器 - 槽型 - 逻辑输出 光学传感器 - 光电检测器 - 逻辑输出 光学传感器 - 光电检测器 - 遥控接收器 光学传感器 - 光电检测器 -CdS 单元 光学传感器 - 反射式 - 模拟输出 光学传感器 - 反射式 - 逻辑输出 光学传感器 - 测距 光学传感器 - 环境光,IR,UV 传感器 光学传感器 -光电二极管 光学传感器 -光电晶体管 冲击传感器 力传感器 压力传感器,变送器 图像传感器,相机 多功能 太阳能电池 应变计 接近传感器 接近/占位传感器 - 成品 放大器 气体传感器 浮子,液位传感器 温度传感器 - 模拟和数字输出 温度传感器 - 温控器 - 固态 温度传感器 - 温控器 - 机械式 温度传感器 - 热电偶,温度探头 温度传感器 - NTC 热敏电阻器 温度传感器 - PTC 热敏电阻器 温度传感器 - RTD(电阻温度检测器) 湿度,湿敏传感器 电流传感器 磁性传感器 - 位置,接近,速度(模块) 磁性传感器 - 开关(固态) 磁性传感器 - 线性,罗盘(IC) 磁性传感器 - 罗盘,磁场(模块) 磁性器件 - 传感器匹配式 磁性器件 - 多用途 编码器 触摸传感器 超声波接收器/发射器 运动传感器 - 倾斜开关 运动传感器 - 倾角仪 运动传感器 - 光学 运动传感器 - 加速计 运动传感器 - 振动 运动传感器 - 陀螺仪 运动传感器 - IMU(惯性测量装置) 配件 颗粒、粉尖传感器 颜色传感器 Camera Modules IrDA 收发器模块 LVDT 变送器(线性可变差动变压器) PMIC - 栅极驱动器
-
分立半导体产品
二极管 - 可变电容(变容器,可变电抗器) 二极管 - 射频 二极管 - 整流器 - 单 二极管 - 整流器 - 阵列 二极管 - 桥式整流器 二极管 - 齐纳 - 单 二极管 - 齐纳 - 阵列 功率驱动器模块 晶体管 - 双极 (BJT) - 单 晶体管 - 双极 (BJT) - 单,预偏置 晶体管 - 双极 (BJT) - 射频 晶体管 - 双极 (BJT) - 阵列 晶体管 - 双极 (BJT) - 阵列 - 预偏置 晶体管 - 可编程单结 晶体管 - 特殊用途 晶体管 - FET,MOSFET - 单 晶体管 - FET,MOSFET - 射频 晶体管 - FET,MOSFET - 阵列 晶体管 - IGBT - 模块 晶体管 - IGBT - 阵列 晶体管 - JFET 晶体管 - UGBT,MOSFET - 单 晶闸管 - DIAC,SIDAC 晶闸管 - SCR 晶闸管 - SCR - 模块 晶闸管 - TRIAC
-
射频/IF 和 RFID
射频多路复用器 平衡-不平衡变压器 衰减器 RF 其它 IC 和模块 RF 前端(LNA + PA) RF 功率分配器/分线器 RF 发射器 RF 天线 RF 定向耦合器 RF 屏蔽 RF 开关 RF 接收器 RF 接收器,发射器及收发器的成品装置 RF 收发器 IC RF 收发器模块 RF 放大器 RF 检测器 RF 混频器 RF 电源控制器 IC RF 解调器 RF 评估和开发套件,板 RF 调制器 RF配件 RFI 和 EMI - 屏蔽和吸收材料 RFI 和 EMI - 触头、簧片和衬垫 RFID 发射应答器,标签 RFID 天线 RFID 评估和开发套件及电路板 RFID 读取模块 RFID配件 RFID,RF 接入,监控 IC
- 嵌入式电脑
- 开发板,套件,编程器
- 网络解决方案
- 隔离器
-
集成电路(IC)
专用 IC 存储器 存储器 - 控制器 存储器 - 电池 存储器 -用于 FPGA 的配置 PROM 嵌入式 - 微控制器 - 应用特定 嵌入式 - 带有微控制器的 FPGA(现场可编程门阵列) 嵌入式 - 微处理器 嵌入式 - 微控制器 嵌入式 - 微控制器,微处理器,FPGA 模块 嵌入式 - 片上系统 (SoC) 嵌入式 - CPLD(复杂可编程逻辑器件) 嵌入式 - DSP(数字式信号处理器) 嵌入式 - FPGA(现场可编程门阵列) 嵌入式 - PLD(可编程逻辑器件) 接口 - 专用 接口 - 串行器,解串行器 接口 - 传感器和探测器接口 接口 - 传感器,电容式触摸 接口 - 信号终端器 接口 - 信号缓冲器,中继器,分配器 接口 - 控制器 接口 - 模块 接口 - 模拟开关 - 专用 接口 - 模拟开关,多路复用器,多路分解器 接口 - 滤波器 - 有源 接口 - 电信 接口 - 直接数字合成(DDS) 接口 - 编码器,解码器,转换器 接口 - 编解码器 接口 - 语音录制和重放 接口 - 调制解调器 - IC 和模块 接口 - 驱动器,接收器,收发器 接口 - I/O 扩展器 接口 - UART(通用异步接收器/发送器) 数据采集 - 数字电位器 数据采集 - 数模转换器 数据采集 - 模拟前端(AFE) 数据采集 - 模数转换器 数据采集 - 触摸屏控制器 数据采集 - ADCs/DAC - 专用型 时钟/计时 - 专用 时钟/计时 - 可编程计时器和振荡器 时钟/计时 - 实时时钟 时钟/计时 - 延迟线 时钟/计时 - 时钟发生器,PLL,频率合成器 时钟/计时 - 时钟缓冲器,驱动器 时钟/计时 - IC 电池 线性 - 放大器 - 专用 线性 - 放大器 - 仪表,运算放大器,缓冲器放大器 线性 - 放大器 - 视频放大器和频缓冲器 线性 - 模拟乘法器,除法器 线性 - 比较器 线性 - 视频处理 线性 - 音頻放大器 逻辑 - 专用逻辑 逻辑 - 信号开关,多路复用器,解码器 逻辑 - 多频振荡器 逻辑 - 奇偶校验发生器和校验器 逻辑 - 栅极和逆变器 逻辑 - 栅极和逆变器 - 多功能,可配置 逻辑 - 比较器 逻辑 - 移位寄存器 逻辑 - 缓冲器,驱动器,接收器,收发器 逻辑 - 触发器 逻辑 - 通用总线函数 逻辑 - 锁销 逻辑 - FIFO 存储器 逻辑 -计数器,除法器 逻辑器件 - 转换器,电平移位器 音频专用 PMIC - 以太网供电(PoE) 控制器 PMIC - 全,半桥驱动器 PMIC - 显示器驱动器 PMIC - 栅极驱动器 PMIC - 激光驱动器 PMIC - 热插拔控制器 PMIC - 热管理 PMIC - 照明,镇流器控制器 PMIC - 电压基准 PMIC - 电机驱动器,控制器 PMIC - 电池充电器 PMIC - 电池管理 PMIC - 电源控制器,监视器 PMIC - 电源管理 - 专用 PMIC - 监控器 PMIC - 稳压器 - 专用型 PMIC - 稳压器 - 线性 PMIC - 稳压器 - 线性 + 切换式 PMIC - 稳压器 - 线性稳压器控制器 PMIC - 稳压器 - DC DC 切换控制器 PMIC - 稳压器 - DC DC 开关稳压器 PMIC - 稳流/电流管理 PMIC - 能量测量 PMIC - 配电开关,负载驱动器 PMIC - AC-DC 转换器,离线开关 PMIC - LED 驱动器 PMIC - OR 控制器,理想二极管 PMIC - PFC(功率因数修正) PMIC - RMS 至 DC 转换器 PMIC - V/F 和 F/V 转换器
-
传感器,变送器
-
无源元件
- 晶体,振荡器,谐振器
- 电位计,可变电阻器
- 电容器
- 电感器,线圈,扼流圈
- 电阻器
-
风扇,热管理
散热 - 热导管,均热板 无刷直流风扇(BLDC) 热 - 垫,片 热 - 液体冷却 热 - 热电,Peltier 模块 热 - 热电,Peltier 组件 热敏 - 散热器 热敏 - 配件 热润滑脂,环氧树脂 风扇 - 护手板,滤波器和套管 风扇 - 配件 风扇 - 配件 - 风扇线 AC 风扇 Thermal - Flexible Heaters 散热 - 热导管,均热板 无刷直流风扇(BLDC) 热 - 垫,片 热 - 液体冷却 热 - 热电,Peltier 模块 热 - 热电,Peltier 组件 热敏 - 散热器 热敏 - 配件 热润滑脂,环氧树脂 风扇 - 护手板,滤波器和套管 风扇 - 配件 风扇 - 配件 - 风扇线 AC 风扇 Thermal - Flexible Heaters
-
机电元件
-
电源,电路保护
-
自动化
-
工业自动化与控制
专用 人机接口 (HMI) 人机接口 (HMI) - 配件 保护继电器和系统 凸轮定位器 可叠接塔台照明和元器件 工业设备 延时继电器 控制器 - 处理,温度 控制器 - 机械安全 控制器 - 液体,液面 控制器 - 电缆组件 控制器 - PLC 模块 控制器- 可编程逻辑(PLC) 控制器- 配件 机器安全 - 光幕 机器视觉 - 控制/处理 机器视觉 - 摄像头/传感器 机器视觉 - 照明 机器视觉 - 配件 机器视觉 - 镜头 机械安全 - 激光扫描仪 气动,液压 液体过滤 照明控制 照明控制 - 配件 监视器 - 电流/电压传感器 监视器 - 继电器输出 配件 面板仪表 面板仪表 - 计数器,小时计 面板式仪表 - 配件 Robotics - Accessories Robotics - End Effectors Robotics - Robots
-
工业自动化与控制
-
连接器,互连器件
-
连接器,互连器件
光伏(太阳能板)连接器 光伏(太阳能板)连接器 - 触头 光伏(太阳能板)连接器 - 配件 光纤连接器 光纤连接器 - 外壳 光纤连接器 - 适配器 光纤连接器 - 配件 刀片式电源连接器 刀片式电源连接器 - 触头 刀片式电源连接器 - 配件 刀片式电源连接器 - 外壳 分路器,跳線 卡边缘连接器 - 外壳 卡边缘连接器 - 触头 卡边缘连接器 - 边缘板连接器 卡边缘连接器 - 适配器 卡边缘连接器 - 配件 同轴连接器(RF) 同轴连接器(RF) - 端接器 同轴连接器(RF) - 触头 同轴连接器(RF) - 适配器 同轴连接器(RF) - 配件 固态照明连接器 固态照明连接器 - 触头 固态照明连接器 - 配件 圆形连接器 圆形连接器 - 后壳和电缆夹 圆形连接器 - 外壳 圆形连接器 - 触头 圆形连接器 - 适配器 圆形连接器 - 配件 在系列适配器之间 套管 - 电源连接器 套管 - 配件 套管 - 音频连接器 套管 - 音频适配器 存储器连接器 - 直列式模块插座 存储器连接器 - 配件 存储器连接器 - PC 卡 - 适配器 存储器连接器 - PC 卡插槽 接线 - 触点 接线座 - 接头,插头和插口 接线座 - 配件 接线座 - 配件 - 导线金属环 接线座 - 配件 - 标记条 接线座 - 配件 - 跳线 接线座 - 配电 接线座 - 隔板块 接线座 - Din 轨道,通道 接线条和转动板 接线板 - 专用 接线板 - 接口模块 接线板 - 线至板 接线板 - 适配器 接线板 - 面板安装 插接式连接器 插接式连接器 - 配件 模块化连接器 - 接线块 模块化连接器 - 接线块 - 配件 模块化连接器 - 插头 模块化连接器 - 插头外壳 模块化连接器 - 插孔 模块化连接器 - 磁性插孔 模块化连接器 - 适配器 模块化连接器 - 配件 用于 IC 的插座,晶体管 用于 IC 的插座,晶体管 - 适配器 用于 IC 的插座,晶体管 - 配件 电源接入连接器 - 输入,输出,模块 电源接入连接器 - 配件 矩形连接器 - 外壳 矩形连接器 - 弹簧式 矩形连接器 - 板垫片,叠接器(板对板) 矩形连接器 - 板载,直接线对板 矩形连接器 - 自由悬挂,面板安装 矩形连接器 - 触头 矩形连接器 - 适配器 矩形连接器 - 配件 矩形连接器 - 针座,专用引脚 矩形连接器 - 针座,公插针 矩形连接器 - 针座,插座,母插口 矩形连接器 - 阵列,边缘型,夹层式(板对板) 端子 - 专用连接器 端子 - 刀式连接器 端子 - 外壳,套 端子 - 套管,子弹式连接器 端子 - 快速连接,快速断开连接器 端子 - 焊片连接器 端子 - 环形连接器 端子 - 电线引脚连接器 端子 - 电线接头连接器 端子 - 矩形连接器 端子 - 磁线连接器 端子 - 箔片连接器 端子 - 线对板连接器 端子 - 螺纹连接器 端子 - 转塔连接器 端子 - 适配器 端子 - 配件 端子 - 铲形连接器 端子 - PC 引脚插座,插座连接器 端子 - PC 引脚,单接线柱连接器 端子接线盒系统 背板连接器 - 专用 背板连接器 - 外壳 背板连接器 - 触头 背板连接器 - 配件 背板连接器 - ARINC 背板连接器 - ARINC 插件 背板连接器 - Hard Metric,标准 背板连接器- DIN 41612 触头 - 引线框 触点 - 多用途 连接器,弹簧加载和压力 重载连接器 - 外壳,盖罩,基底 重载连接器 - 插件,模块 重载连接器 - 框架 重载连接器 - 组件 重载连接器 - 触头 重载连接器 - 配件 香蕉和尖头连接器 - 接线柱 香蕉和尖头连接器 - 插孔,插头 香蕉和尖头连接器 - 适配器 香蕉和尖头连接器 - 配件 D 形连接器 - 并口 D-Sub 连接器 D-Sub,D 形连接器 - 后壳,罩 D-Sub,D 形连接器 - 外壳 D-Sub,D 形连接器 - 端接器 D-Sub,D 形连接器 - 触头 D-Sub,D 形连接器 - 适配器 D-Sub,D 形连接器 - 配件 D-Sub,D 形连接器 - 配件 -顶丝 FFC,FPC(扁平柔性)连接器 FFC,FPC(扁平柔性)连接器 - 外壳 FFC,FPC(扁平柔性)连接器 - 触头 FFC,FPC(扁平柔性)连接器 - 配件 Keystone - 插件 Keystone - 配件 Keystone - 面板,框架 LGH 连接器 USB,DVI,HDMI 连接器 USB,DVI,HDMI 连接器 - 适配器 USB,DVI,HDMI 连接器 - 配件
-
连接器,互连器件
-
电缆,电线
-
测试产品
-
工具
-
工具
个人防护装备(PPE) 光纤和配件 六角,螺丝刀 其它工具 冲杆 刀,切割工具 剥线器和配件 化学品,清洁剂 压接器,施用器,压力机 压接器,施用器,压力机 - 配件 各类工具套件 套筒,套筒手柄 扳手 插入,抽取 插口 - 装置 模具組 点胶设备 - 尖头,喷嘴 点胶设备 - 涂胶器,打胶器 点胶设备 - 瓶子,注射器 热风枪喷枪 - 配件 真空 磨料和表面修整产品 穿孔工具,刀片,配件 线束枪和配件 绕接线 老虎钳 螺丝和螺母起子 - 刀头、刀片和手柄 螺线形绕线,伸缩套管 螺钉和螺母驱动器 螺钉和螺母驱动器 - 装置 配件 钢丝钳 钳子 钻孔机、钩、镊子、探针、调节工具 铆固工具 锤子 镊子 闪光灯
-
工具
-
机箱,五金件,办公设备
- 所有分类
刚毕业的时候,我年少轻狂,以为自己已经可以独当一面,庙堂之上所学已经足以应付业界需要。然而在后来的工作过程中,我认识了很多牛人,也从他们身上学到了很多,从中总结了一个IC设计工程师需要具备的知识架构,想跟大家分享一下。
技能清单
作为一个真正合格的数字IC设计工程师,你永远都需要去不断学习更加先进的知识和技术。因此,这里列出来的技能永远都不会是完整的。我尽量每年都对这个列表进行一次更新。如果你觉得这个清单不全面,可以在本文下留言,我会尽可能把它补充完整。
语言类:Verilog-2001/ VHDL ,SystemVerilog/ SystemC,Makefile/ Perl/ Python/ Shell,Tcl
工具类:NCVerilog/ VCS/ ModelSim,SimVision/ DVE/ Verdi,Vim/ Emacs,SVN/ CVS/ Git,Microsoft Office
平台类:Windows,Linux,OS X
其他加分项目:MATLAB,ISE/ Synplify/ Vivado/ Quartus,LEC/Formality,VMM/ UVM,ESL,ZeBu Server,JIRA/ Confluence,C/ Assembly Language,Computer Architecture/ ARM Architecture/ MIPS Architecture
为什么 & 怎么办
A) Verilog-2001/ VHDL
这里之所以强调Verilog-2001而不是Verilog-1995,是因为在Verilog-2001中规定了很多新特性,因此可以产生更好的代码风格。
我曾经在什么是良好的Verilog代码风格一文中对新版的接口语法进行过详细的举例说明。这种新的接口方式修改起来更加简单,例化模块的时候使用也更加方便,不像旧版的接口语法由于一个接口需要分3次描述,无端端增加了代码行数而且阅读和改动都很困难,尤其是当一个模块的接口数目超过一个屏幕的显示范围时Verilog-2001的这种优势更加突出。
学习Verilog最大的问题就是:很多国内的书写得都很不好,书中的很多例子都是为了说明语法特征而存在的,没有任何实用价值,甚至很多代码都是错误的(这里错误的意思并不是说他语法错误,而是说他是不可综合的,无法用数字电路来对等实现的)。
所以,对于学习Verilog,我的建议是,随便找一本类似语法手册的书籍,匆匆把基本语法看过一遍,搞清楚模块定义,接口定义,模块例化,寄存器定义,线定义,always块怎么写这些基本内容后,就开始到OpenCores网站上去下载已经经过FPGA验证的完整开源项目代码进行学习。先做到看懂别人写的代码,然后再尝试自己去模仿,有不懂的问题再有针对性地去网上搜索答案。
Verilog语言与软件语言最大的区别就是,因为它是用于描述电路的,因此它的写法是非常固定的,因为电路的变化是非常有限的。学习Verilog的时候,很多时候我们并不是在学习这门语言本身,而是学习其对应的电路特征,以及如何对这个电路进行描述。
如果心中没有电路,那么你是不可能写好Verilog的。从基础开始,一点点积累类似计时器,译码器这样的小型电路描述方法是非常重要的。Verilog鼓励在电路中进行创新,而不是在描述方法上进行创新。因此,即使是世界上最牛的Verilog高手,他写出来的Verilog代码语法也都是很普通的,而他的创意则在于如何去组合这些基本的小型电路。
VHDL虽然我并不是太了解,但是目前在欧洲很多国家,VHDL还是主流的RTL设计语言。VHDL语言的严谨性比Verilog要好,不像Verilog中一样存在大量符合语法却永远无法综合的语句,容易对新人造成误导(仿真通过的代码却在FPGA综合时报错,或者FPGA实现结果与仿真不一致)。而VHDL和Verilog虽然可以相互转化,但是转化过程中仍然存在很多问题,无法做到完全的自动化。关于这一点我之前写过一篇专题进行探讨:如何将VHDL转化为Verilog。有兴趣的同学可以去看看。
B) SystemVerilog/ SystemC
这两种语言都是为了验证而存在的。作为IC设计工程师,验证知识不是必须的,但是掌握基本的验证方法学有助于提高自己的debug效率和结果。我曾经在如何快速搭建模块验证平台一文中详细介绍过一种我自己总结的验证方法,这种方法就是基于SystemVerilog语法实现的。由于SystemVerilog对Verilog完全兼容,就像C++对C语言的兼容一样,所以SystemVerilog(或SV)学起来其实并不算难。
SystemVerilog是一种面向对象的语言,其设计的本意是用于搭建验证平台,主流的VMM/UVM方法也都是基于SystemVerilog实现的,所以立志成为IC验证工程师的同学,SystemVerilog的深入学习和流行方法论的学习都是必不可少的。
而对于那些只想做IC设计的同学而言,SystemVerilog同样也是值得学习的。且不说本文前面提到的用于提高验证效率的debug方法,即使只是为了做好设计,SystemVerilog也是大有用武之地。在欧美很多发达国家,很多世界顶级的IC设计公司内部都已经开始使用SystemVerilog进行RTL设计了。由于在SystemVerilog中加入了很多类似always_ff、always_comb等用于显式表明综合电路意图的新语法,代码的可读性更高,综合过程中也减少了歧义,尽可能地保证了综合结果与设计意图的一致性。从另一个角度来说,asserTIon的加入也极大地提高了代码的debug效率,非常有助于在大规模的数据交互过程中定位到出错的初始点,没有掌握的同学可以多花一些时间研究一下。
C) Makefile/ Perl/ Python/ Shell
以上四种都是IC设计工程师们常用的脚本语言,看起来似乎它们都跟IC设计的专业能力没有丝毫关系,但是由于本行业的专业工具价格非常昂贵,项目需求差异极大,因此掌握一门得心应手的脚本语言将对你工作效率的提升帮助极大。如果你还没有尝试过编写自己的脚本语言,那么问问你自己,有没有曾经为了完成一批仿真用例熬到深夜?有没有曾经因为要比对几万个数据搞到眼瞎?有没有曾经因为要修改一个全局信号的比特位宽而无比抓狂?要把一个hex类型数据文件转换为memory模型需要的特殊格式怎么办?没错,如果你掌握了脚本语言,以上这些奇奇怪怪的需求都不是事儿,重复而细致的体力劳动就交给计算机来完成吧。我一向信奉的口号就是:但凡做过一次的事情,就没有必要重复第二次。
如果你已经在工作中使用过其它工程师开发的平台或者脚本,那么它很可能是用这4种语言写成的。如果执行脚本的方式是make run,那么很可能你用到的是一个Makefile脚本;如果执行方式是source run,那么这应该是一个Shell语言写成的脚本;如果是其它情况,那么就得看具体这个脚本首行是怎么写的了。Makefile和Shell语言比Perl/Python要更容易上手,写起来也更加简单,比较适合满足一些非常简单的批量任务需求。Perl的强项则在于它强大的文本处理能力和无所不能的CPAN库,随时可以满足你的各种任性需求。Python的优点则是较好的可维护性。
关于脚本语言的重要性,大家可以到这里看看相关讨论:Perl等脚本语言在IC设计中有哪些用处?。
D) Tcl
严格来说,Tcl是一门非常单纯而简单的语言,而它的学习难点在于,只是掌握它的语法是远远不够的。这种情况有点类似javascript,如果你用js来开发网页,那么你必须深入了解DOM和HTML;如果你用js来开发游戏,那么你必须深入了解Unity3D引擎的各种知识;如果你用js来开发Web App,那么你必须会用node.js的各种库和常见的服务端框架。
语言永远只是工具,这句话放在Tcl上再合适不过了。在IC设计这个领域中,Tcl是一门非常常见的语言。他可以用于描述时序和管脚约束文件,UPF信息,也可以用来搭建简单的工作平台。它既是很多IC领域EDA工具默认支持的脚本语言,也是这些工具配置和输出的文件格式。因此,能够读懂Tcl,掌握Tcl语言的基本语法,就可以帮助你更好的使用EDA工具,真可谓是Tcl在手,天下我有!
但是,成也萧何败萧何,正如前文一开始提到的,仅仅掌握了Tcl的语法还远远不是全部。不同的EDA工具对Tcl脚本提供的命令和参数支持都是不一样的,每当你需要为一种新工具编写Tcl脚本时,都必须要熟读官方给出的用户手册,了解这种工具支持的Tcl命令结构,才能确保写出的脚本是可以被正确执行的。
E) NCVerilog/ VCS/ ModelSim/ iVerilog
以上三种都是比较业界比较主流的仿真工具,其中NCVerilog和VCS都只支持Linux平台,而ModelSim貌似是同时支持Linux平台和Windows平台的。但是不管哪一种,我都希望大家能意识到两件事:
第一,仿真器和波形查看器是两回事,本条目介绍的只是仿真器,仿真器的工作原理跟波形查看器是有天差地别的,同时由于IEEE对标准波形文件*.vcd格式的规范,任意仿真器都是可以和任意波形查看器组合使用的。
第二,仿真器通常是没有图形界面的,为了更好地使用仿真器,你要熟读自己常用仿真器的用户手册,了解一些常见需求的命令行参数,至少要做到了解如下内容:如何指定编译的文件类型,如何指定编译文件清单,如何指定索引目录,如何指定仿真精度,如何指定临时的宏变量,如何指定语法检查的严苛等级,如何混合编译由多种语言写成的工程,如何调用不同波形生成工具的pli接口,如何配合SDF反标进行后仿等等。
不同仿真器的功能其实都大同小异,但是是不是只掌握一种仿真器就可以打遍天下无敌手了呢?当然不是。在实际的工程中,我们经常用到第三方IP核,有时候出于保密的需要,第三方IP核会以加密二进制文件的方式提供,加密二进制文件长啥样呢?
它们一般以“*.vp”格式命名,文件的开头部分就是标准的Verilog语法,但是在一行注释之后就全部变成了乱码。通常乱码之前的那行注释会指定该加密二进制文件支持的仿真器类型。所以你看,如果你是一个重度VCS使用者,而有一天项目经理突然塞给你一个只支持NCVerilog的加密文件,你内心一定会有千万只草泥马呼啸而过。
F) SimVision/ DVE/ Verdi/ ModelSim/ gtkWave
与上面的仿真器相对应,以上三种也是业界比较主流的波形查看工具。所有的波形查看器都必须支持标准波形文件*.vcd格式,但是由于*.vcd格式的存储性能并不好,冗余信息过多,所以各家波形查看工具都纷纷推出了自己独家支持的波形文件格式,如DVE的*.vpd,Verdi的*.fsdb,ModelSim的*.wlf, SimVision的*.shm等。通常波形查看工具独家支持的文件格式都具有较高的压缩率。
举例来说的话,通常1G左右的*.vcd格式波形转换为*.vpd格式后只有40MB左右,而转换为*.fsdb后通常会更小,因此将标准波形文件*.vcd转换为其他压缩格式更加有利于数据备份。
如果希望在仿真过程中不生产*.vcd,而是直接生成压缩率更高的其他波形查看器专用格式,则需要调用对应工具提供的pli接口,同时配合测试平台代码中的系统函数调用(如$fsdbDumpOn等)来完成。
G) SVN/ CVS/ Git
以上三种都是目前比较主流的“版本管理”工具。什么是版本管理?
简而言之,就是一种用于记录和查询文件版本改动的工具,通常都会被部署在公共服务器上,以保证数据的安全和可恢复。在项目的开始阶段,首先需要创建好版本管理的根目录,然后由不同的工程师逐一把自己的设计文件首次加入到版本管理的各级子目录下。
在项目执行的过程中,每当有人修改一个文件,都需要通过版本管理工具上传代码并注释改动内容,版本管理工具会自动检查改动内容与服务器上的最新版本是否冲突(冲突的意思即是说,在该工程师改动这个文件的过程中,有其它人也对该文件的同一行代码进行了改动并上传了新版本),如果没有冲突,则会自动将新上传的改动合并到当前最新版本,反之,则将冲突部分进行对比显示,让工程师手工判断应当如何合并冲突行的内容,解决冲突后可以再次重新上传。
H) ISE/ Synplify/ Vivado/ Quartus
ISE和Vivado都是Xilinx旗下的FPGA工具,其中ISE比较老,官方已经停止更新了,目前最新的版本是14.7,而Vivado作为新一代的FPGA工具一直在继续更新。Quartus则是Altera旗下的FPGA工具,功能和ISE/ Vivado大同小异。笔者平日里对FPGA工具的接触并不多,但从有限的接触体会而言,Quartus比ISE/ Vivado更适合用于学习,入门的门槛更低一些,操作界面也更加简单易学(但千万不要使用6.2版本以下Quartus中自带的波形仿真工具,那是垃圾)。
I) Windows/ Linux/ OS X
相信大多数人的个人计算机使用的都是以上系统或类似以上系统的其他系统吧。以上3个系统,对于专业的数字IC前端设计人员而言,工作的方便程度(注意,是专业人员的方便程度,而非学习曲线的陡峭程度,这里是指均已达到熟练掌握的前提下对于工作效率的帮助)由方便到困难分别是:Linux 》 Windows 》 OS X。
在Windows下,你可能需要的工具有Cygwin(模拟Linux shell,带有大部分GNU工具),Modelsim,Debussy(更名Verdi后的版本没有对应的Windows版本), Quartus, ISE等。在Linux下,你可能需要的工具包括Bash/Csh/Tcsh,Modelsim,Quartus,ISE,VCS,Simvision,DVE,NCVerilog,Formality,LEC,Synplify等。而在OS X下(笔者不幸就位于该平台下),你可以使用的工具就只剩下Bash/Csh/Zsh,iVerilog,gtkWave这些选择了。
从以上内容不难看出,在工具的多样性角度而言,Linux完爆其它平台,这也是为什么绝大多数IC开发公司的服务器都选择部署在Linux下的主要原因之一。对于个人电脑而言,大部分同学会选择使用虚拟机来兼顾不同平台的工具选择,个人建议大家最好在熟练掌握Linux平台及其工具的前提下,同时也了解一下其它平台的解决方案。

