Verilog和 C 语言有点像,容易混淆,注意区分。
先有电路,再写代码;写完代码,打开电路。
(RTL && Schematic)。
Do 文件为自动化仿真。(do sim.do)。
Sublime Text和Vim是最专业的Verilog代码编辑器。
Git和TortoiseSVN是最专业的版本管理和版本控制,可以自动备份。
Beyond Compare是一个多功能文件、目录、数据比较器。
脚本语言推荐Shell/Python/Perl/TCL/Makefile。
推荐画时序图的软件Timegen 和 Wavedrom Editor。
大部分芯片设计公司都是基于购买的来开发的,IP 核不是万能的,依旧要学会写 HDL,万一闭源 IP 核出现问题之后可能会导致产品难产,进而导致公司破产。
VHDL 在军工领域(欧洲)比较多。
SystemVerilog是未来的趋势。
如今 IC 设计和 IC 验证的比例常理上是1:3,不过现实可不是这样,至少在国内不是这样的。
Sublime 和 Vim/GVim是程序员的倚天剑和屠龙刀。
集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器、
GUI等工具。如Quartus(Altera)和 Vivado(Xilinx)。
独热编码指的是每一个状态都用一个触发器来表示,它能够避免输出端的一些潜在的问题,因为每一个状态都有其独立的触发器,这样在任何一个时刻,都只有一个触发器被激活,即 FSM 此刻所对应的状态。
查找表的case里面不要有运算,包括 +/-/*/<< 等等,只能直接赋值,即使只是 A<=A+B、A<=A+0 也都是不允许的。
case的数值要写成二进制。
迭代、递归只能用时序。
真值表可以用ROM模块最好。
Xilinx:真值表,case。Altera:多路选择器。
实时指的是当前的输入实时影响当前的输出,而无限插入 D 触发器将会导致不实时,使得关键路径毫无意义。
流水气泡指的是当流水线运用于数据的非连续输入的情况,导致输出的错误。
如今,功耗 > 速度 > 面积。
计算机体系架构以及 IP 化是一个趋势。
存储器接口工作在三种不同频率的时钟,内部总线上的信号是与总线时钟同步的,图像控制单元的命令是同步到像素时钟上的,而本身对 SRAM 的读写又是使用的存储器时钟。所以,应当有握手信号来保证数据传输的准确性。
当判决树有特权编码时应该利用if - else结构。
设计并行的结构应该利用 case 语句编码,去除不需要的特权编码,展平逻辑结构,减少路径延时。
case 语句速度快但面积大(并行结构),if - else 语句反之。
把所有的寄存器赋值保持在单个控制结构内是好的设计实践。
在每个模块中只利用一个时钟和只是一类复位是好的设计实践。
数据通道和控制结构应该分割成不同的模块。
分割指的是依据模块、层次和其它功能约束组织设计。这里是因为数据通道常常是设计的关键路径(设计的流量是与流水线的时序有关的),它可能要求为这个通道达到最大性能设计布图,另一方面,控制逻辑常常有较慢的时序要求安排给它,因为它不是主要的数据通道的一部分。
从不把阻塞和非阻塞赋值混合在一个 always 模块中。
乘法和移位的方法是执行除法的方便方式,但是只可以在除数按照规定的形式表示时利用。
速度有三种基本的定义:流量(Throughput)、时滞(Latency)、时序(Timing)。流量是每个时钟周期处理的数据流(bit/s)。时滞是数据输入与处理的数据输出之间的时间差(t or T)。时序是时序元件之间的逻辑延时(T or F)。
高流量对应流水线:拆开一个迭代环路会增加流量,代价是成比例地增加面积。
低时滞对应并行度:移除一个流水线寄存器会减少时滞,代价是增加寄存器之间的组合延时。
时序:添加寄存器层次、并行、展开、重排等等。
面积优化通常需要一个递归的数据流。折叠、复用、共享。
不正确地置位和复位一个RAM可能对面积有惊人的影响。当面积是考虑的关键时,尽可能避免利用置位和复位。
对于高速的逻辑操作(如:判断,取反等),为了保证逻辑正确和结果的稳定(不抖动),需要用 always 的 case 语句来实现,而不要使用 if - else,或者 assign 语句的()?… :…形式。也即,对于高速数据的判断选择性操作,用 case 比用 if - else 可以满足更高的时钟要求,但占用较多的 slice。同一种逻辑操作,用同步赋值语句 always 比用 assign 可以满足更高的时钟要求,所需要的代价就是需要多增加一些触发器,因为只有触发器可以用 always赋值。
时钟周期约束是使用最多的一种约束,增加时钟约束可以提高芯片的时钟速率。
对于加减操作,最好使用 IP Core 的加法器。相比直接使用符号 ”+” 或 “-”,IP Core 可以在资源相同的情况下,达到更高的速率用RAM
(Block RAM 或 Distributed RAM)存储比用触发器存储节约 Slice 资源。
后仿真时,为了观察程序模块中的内部信号(内部模块的输入和输出),需要将内部信号也通过模块的输出引出。当引出的内部信号过多时(FPGA 的输入输出管脚数量是有限的),约束将更加难以满足,后仿真可能会出现一些不可预料的问题。所以不要引出过多的内部信号。
采用流水线操作可以大大提高系统时钟,也即将复杂的操作分成许多简单操作级联的形式,这样每级简单操作都可以达到较高速率。代价就是用资源去换速度(每级流水线都需要额外的 reg 型变量),同时有一个固定的初始时延。
一般不要同时使用上升沿触发和下降沿触发,这样会降低系统稳定工作的时钟速率。
不可以在一个 always 模块的敏感变量区同时使用沿触发和电平触发。
在FPGA设计电路时,尽量不要使用多维数组这种数据,要么写成带地址的RAM,或者使用寄存器,都比这种数组要好的多。
FPGA 之所以可编程,是因为可以通过特殊的 01 代码制作成一张张 “真值表”,并将这些“真值表”组合起来以实现大规模的逻辑功能。
面积是指一个设计消耗的 FPGA 内部逻辑资源的数量,可以用消耗的触发器和查找表的个数或等效的逻辑门数来衡量。
速度是指一个设计在FPGA上稳定运行时所能达到的最高频率,由设计时序状态决定。
为什么低电平有效呢,那是基于低电平时,环路阻抗比较低,抗干扰能力比较强。
使用同步电路以后,亚稳态仍然有发生的可能。
速度等级一般反映一款芯片的性能,速度等级越高,说明芯片内的逻辑延时和布线延时越小,设计的性能要求也越容易达到,随之付出的成本也越大。
对Xilinx FPGA,速度等级一般有 “1”、“2”、“3” 等,数字越大,速度等级越高,芯片价钱也越贵。
PS 端一般写最后一层全连接层,PL 端写卷积层。
FPGA 在 4K 和高级控制领域必然展示身手。
一个 always 里面对同一个信号不能同时有上升沿和下降沿,一个 module 才可以。
找工作项目不要求多,而要是你精通不,做了多少功夫,负责了多少。
有老板说,IC 设计前景好,而 IC 验证 25K 月薪就到头了(设计要求高,搞算法,技能树要广)。
综合就是逻辑综合器根据约束条件把Verilog或 VHDL 描述的 RTL(Register Transfer Level,寄存器传输级)设计,转换为可与FPGA/CPLD的门阵列基本结构相映射的门级网表文件。门级(Gate - Level)指的是网表描述的电路综合级别,顾名思义,门级网表中,描述的电路元件基本是门或与此同级别的元件。
网表文件包含使用工艺库的标准逻辑单元构建系统的硬件电路的信息,决定了系统的功能、性能、时序特性等。
时序是设计出来的。
FPGA 算法的实现方式有哪些呢:Verilog/VHDL + System Generator for DSP+ Xilinx Vivado HLS。
AI芯片的要素:算力(计算能力)、功耗、成本、通用性、研发速度。数据搬运速度、数据搬运能耗。近存计算和存算一体。趋势是通用设计到定制设计。
CPU为通用处理器,GPU为图像,DSP为数字信号处理,FPGA为神经网络算法加速、可定制,ASIC 为专用 IC。
学习数字 IC 比FPGA考虑得更多,且数字 IC 并没有像 FPGA 那样有 IP,而是需要买。
博士更加前沿发散、硕士更加实际收敛。
脚本语言其实 Python 就够了,不需要 Perl 和 TCL,比如 Python 可以做文本、IC 测试、验证、SoC集成等等。
IC 设计和 IC 验证其实在小公司中是自己承包的,二者需要配合。
AI算法可以自学,自己研究探讨就够了。
GPU主要应用于云端、图计算、神经网络训练,神经网络推理 GPU 和 FPGA 都可以,专用场景 FPGA 更加合适(成本效率)。
AI芯片设计问题主要有存储带宽问题、数据搬运速度问题等等。
对于数字 IC 工程师,其实学的越多是越好的,可以学SoC、架构、芯片、系统、IP、验证、IO、存储、CPU不同设计方法不同模块之类的。都了解的话,遇到问题就可以合理分解以合理的方式。工作之后,学习能力不同,对以后发展道路的影响是巨大的,好的工程师,应该学得多学得精。
为什么一个标准的反相器中 P 管的宽长比要比 N 管的大呢?和载流子有关。P 管是空穴导电,而 N 管是电子导电,电子的迁移率大于空穴。所以在同样的电场下,N 管的电流要大于 P 管,因此要增大 P 管的宽长比,使之对称,这样才能使得两者上升下降时间相等、高低电平的噪声容限一样、充放电时间一致。
为什么数字信号处理相比于模拟信号处理具有高信噪比高精确度的特点呢?从理论上讲,数字信号只有高低(1 或 0)两种不同的信号状态,在传输过程中是比较难被干扰的(受干扰程度与其噪声容限相关),且可以采用奇偶检验技术来校验与采用纠错技术来纠错,在保证信号强度的情况下,可以说数字信号是绝对“纯净”的。而模拟信号本身是连续的电信号,本身就是和无用的干扰信息混合在一起的,在传输过程中,外界的干扰随时都有可能使其受到影响而发生变化,一般经过几次放大后,干扰信号的叠加会引起很多失真和噪声,信噪比会严重下降,传输的过程越远,信号会越差(例如录音,一个接着上一个的录音,经过几次之后就会发现噪声非常大听不清楚了,纵使具有无穷大的分辨率)。这就是为什么数字信号处理相比于模拟信号处理具有高信噪比高精确度的特点的原因。
分子、原子构成了世间万物,那么,0 和 1 便构成了数据时代。0 和 1,除了可以通过 N 进制之间的转换从而表示任何一个数之外,还可以表示一件事情的是与非,真与伪、有与无、好与坏、通与断、亮与暗、开与关等等,这种只有两种对立状态的逻辑关系称为二值逻辑。二值逻辑分为正逻辑和负逻辑。正逻辑用高电平表示逻辑 1,用低电平表示逻辑 0,负逻辑反之。总而言之,只有形成二值逻辑思维,才能学好数字电路与
FPGA。
在集成电路领域,特征尺寸是指半导体器件中的最小尺寸。在CMOS工艺中,特征尺寸典型代表为“栅”的宽度,即MOS器件的沟道长度。一般来说,特征尺寸越小,芯片的集成度越高,性能越好,功耗越低。
IC 行业主要分为设计 Fabless、制造Foundry、封装、测试。其中 IC 设计以人为主,脑力密集型,属高回报产业。
在深亚微米工艺中,因为电路连线延迟大于单元延迟,通常预布局布线反复较多,要多次调整布局方案,对布局布线有指导意义。
在版图设计完成以后,非常重要的一步工作是版图验证。主要包括设计规则检查(DRC)、版图的电路提取(NE)、电气规则检查(ERC)和寄生参数提取(PE)。使用 Formality 工具,进行 RTL 级和综合后门级网表的 Formal Verification。版图布局布线之前,使用 PrimeTime 工具进行整个设计的静态时序分析。
什么是设计验证?验证的目是为了保证设计实现提供的功能特性是正确的,是与设计规格书中定义的功能特性保持一致。验证的目标在于证明设计没有错误。然而事实上验证只能证明某些设计错误存在或不存在,验证是一个穷举设计中可能存在的错误的过程,检查设计中的错误是需要时间和资源做代价的,也就是说验证的充分性是一个利益权衡的问题。实际工作中,设计错误发现越早,设计花费的代价越小。一般来说,在 VLSI 设计中,设计验证需要占用整个设计过程大约一半或更多的时间。
验证与测试的区分:从概念和过程上,验证与测试是不同的两个环节,其操作对象和目的都不相同。测试的对象是硅晶片,测试它的主要目的是为了保证硅晶片中信号的物理特性正确,例如,保证触发器能够正常翻转,逻辑单元的连接正确等。所以,验证和测试是专用集成电路设计过程中不同的两个阶段,在意义上要严格区分。
全局时钟与局部时钟的区分:这里,全局时钟与局部时钟占据的资源不一样,全局时钟要靠 BUFG 驱动,将时钟信号放在时钟树上,保证到整个芯片的任意一个触发器的延时是等长的,局部时钟靠 BUFR 驱动,只在一个 Bank 内用。如果你所有的或者大部分模块都用的是这个时钟,那么此时钟为全局钟,专用布线资源。如果仅仅一个或者少部分几个模块用的是这个时钟,那么此时钟为局部钟,长线资源。
异步时序电路中状态的改变不受统一时钟的控制,其状态变化的时刻是不稳定的。
时序约束:T - 时钟(正)偏差 >= Tc-q + Tsu + Tlogic。约束时钟的周期/频率,来使得其可行性设计。
流水线技术用于斩断有效关键路径(也就是缩短关键路径),从而提高系统运行的频率,吞吐率也得到相应的提高。而并行处理技术通过构造多份“相同”的硬件电路,以同时处理多个输入样本点(提高并行程度),来提高吞吐率。
使用状态机控制外部硬件分系统。系统设计过程中,经常需要外接一些模块,例如计时器/计数器、模-数转换器(ADC)、存储单元等,并使用握手信号来与这些器件进行通信。
看门狗电路是一个保护电路,防止微控制器在使用过程中由于临时的电源系统故障而导致程序跑飞。
同步 FSM 是指它们依靠时钟驱动系统,从一个状态转换到下一个状态,使用时钟来控制状态之间的同步切换,使得 FSM 的硬件电路在下一个转换到来之前,有足够的时间趋于稳定,避免了逻辑门之间的延迟现象对系统造成影响。
异步 FSM 不用时钟触发状态转换,不需要等待固定的时钟脉冲到来,而是由事件触发的。只有在输入信号发生变化时才切换状态,即事件触发的本质。
某些情况下,即使没有输入信号变化也需要切换状态,此时就是时钟驱动系统的原理了。事件触发的 FSM 处于稳定状态时(此时可能在等待下一个触发事件),CMOS电路的功耗是非常小的,因为此时系统里没有时钟在运行,几乎不产生能耗。
FIFO读写可同时进行,可以看作是双口。FIFO 也是一个端口只读,另一个端口只写。FIFO 与伪双口RAM的区别在于,FIFO 为先入先出,没有地址线,不能对存储单元寻址,而伪双口 RAM 两个端口都有地址线,可以对存储单元寻址。异步时钟域的缓存只要是双口器件都可以完成,但 FIFO 不需对地址进行控制,是最方便的。
最低温度、最高电压时,振荡最强、频率最高。
复位是任何单片机必须的一个过程,通过复位可以让单片机以一种特定的状态开始运行。
CPU流水是能够使得一条指令在被执行的同时,可以读取下一条指令,也就是多条指令同时操作。
理解CPU,即使不做X86、ARM、RISCV 的话,做AI芯片的话,也是十分需要的!!!
大多数的芯片设计人员的工作,就是理解C++、Matlab编写的 IP 算法,评估性能,然后进行 RTL 设计;目前 IP 算法、业务方向比较火爆的就是 5G、AI、ISP(图像处理)、视频编解码、CPU、GPU。
触发器的保持时间不满足的话,是不可以通过降低时钟频率来解决的(与时钟频率无关)。通过降低时钟频率也无法增加触发器的建立时间(固定的)。
在电压高(CVVF)、温度高(静态功耗)的情况下,功耗最大。
&4'b1011 = 1 & 0 &1 & 1 = 0
。
文章评论(0条评论)
登录后参与讨论