ASIC设计
总结介绍ASIC设计中常见的知识和设计方法。
re_call
这个作者很懒,什么都没留下…
展开
-
SV宏定义中反斜杠(\),反引号(`),双反引号(``)的作用
反斜杠(\)当一个宏定义有多行时,非末行的结尾要加上反斜杆,告知编译器,该宏还有下一行。在行尾的反斜杠之不能加空格或者字符,否则编译会报错。反引号+双引号(`")该符号的作用时把字符串中的宏都展开。举例说明:`define def_A string1`define def_B string2`define def_C `"def_Adef_B`"那把def_C展开就是string1 string2双反引号(``)它可以帮助编译器区分宏定义的字符,其分隔符标记作用。下.原创 2021-10-25 17:34:25 · 4905 阅读 · 0 评论 -
AXI3和AXI4的接口信号区别
axi3协议和axi4协议在信号接口上是有变动的,下面列出了axi4独有的信号。一.写通道1.axi4的AWLEN位宽更大。axi3的AWLEN是4bit,axi4的AWLEN是8bit。因此AXI4可以产生比AXI3更长的写burst。2.axi4的AWLOCK缩减到1bit了。这样可以兼容exclusive传输,但是不支持locked传输。3.axi4增加了AWQOS信号。这个信号支持quality of service。4.axi4增加了AWREGION信号。这支持通过一个物理sl原创 2021-10-14 17:26:25 · 3452 阅读 · 0 评论 -
Verilog保存波形和Verdi打开波形方式
在testbench中常用的保存波形命令如下:initial begin$fsdbDumpfile("tb.fsdb");$fsdbDumpvars();#1000 $finish;end$fsdbDumpvars(depth,instance,options);其中各个选项的意思:depth0:all signals in all scopes.1:all signals in current scope.2:all signals in the curren.原创 2021-09-06 17:44:48 · 4790 阅读 · 0 评论 -
Verilog中的任务和函数
任务和函数的共同点1.任务和函数必须在模块内定义,其作用范围仅适用于该模块,可以在模块内多次调用。2.任务和函数中可以声明局部变量,如寄存器,时间,整数,实数和事件,但是不能声明线网类型的变量。3.任务和函数中只能使用行为级语句,但是不能包含always和initial块,设计者可以在always和initial块中调用任务和函数。任务和函数的不同点函数能调用另一个函数,但是不能调用任务 任务可以调用另一个任务,也可以调用函数函数总是在仿真时刻0开始 任务可以在非零时刻开始执行函数一定不能包含任转载 2021-08-17 13:51:18 · 2593 阅读 · 0 评论 -
The Ultimate Guide to Static Timing Analysis (STA)
Static Timing Analysisis defined as: a timing verification that ensures whether the various circuit timing are meeting the various timing requirements.One of the most important and challenging aspect in the ASIC/FPGA design flow is timing closure. Timin.转载 2021-08-06 10:02:18 · 309 阅读 · 0 评论 -
什么时静态时序分析
定义静态时序分析是一种通过检查所有可能的路径是否违例来验证设计的时序性能。STA把设计分解成时序路径,计算这这些路径的传播时延,并且检查设计内部和输入/输出接口的时序约束的违例情况。另外一种时序分析的方法是动态仿真,这是通过给定一组输入激励矢量,然后检查电路的全部行为。和动态仿真相比,静态时序分析由于不用激励电路的逻辑运算,所以更快。由于分析了所有可能的时序路径而不只是检查对输入矢量逻辑敏感的路径,所以STA也更理想。然后,STA仅仅做时序检查,不检查电路的功能。STA怎么工作?当开始执行时原创 2021-08-04 21:46:29 · 889 阅读 · 0 评论 -
Verilog中$random的使用
$random是产生随机数函数,产生的随机数是有符号的。产生有符号随机数dt = $random%10;会产生介于-9到9的数。产生无符号随机数dt = {$random}%10;会产生介于0~9的数。产生min到max的数dt = min + {$random}%(max-min);会产生介于min到max的数。...原创 2021-05-11 09:02:12 · 6189 阅读 · 1 评论 -
定点量化和无损量化
硬件电路里面数据位宽都是一定的。在处理数据流是,数据的位宽也是一定的。所以浮点数需要先转变成定点数进行运算。举例说明。12.918,定点量化时对整数部分和小数部分分别量化。(1)整数部分12,最少使用4位量化,4-bit表示范围0~15;(2)小数部分0.918,假设12.918整体使用12位量化,整数已使用4-bit,则小数部分还能使用8-bit量化,能够表示2的8次方共计256个刻度,每个刻度的间隔是1/256 = 0.00390625,这个值也就是量化精度。小数0.918需要多少个刻度原创 2021-03-19 16:38:38 · 3150 阅读 · 0 评论 -
vcs仿真中一个简单的makefile
VCS(Verilog Compiled Simulator)是常用的RTL仿真工具。下面介绍一个简单的makefile,可以完成RTL编译,仿真和erdi启动。comp: $(VCS) +incdir+catalog\ -f file.frun: $(SIMV)VCS = vcs -full64+nospecify +nottimingcheck -sverilog -timescale=1ns/1ns +lint=TFIPC-L\ +warn=noM原创 2021-03-19 15:11:34 · 606 阅读 · 0 评论 -
异步FIFO的深度一定要是2的整次幂吗?
在芯片设计中,遇到多比特数据跨时钟操作时,我们通常使用异步FIFO。在使用FIFO之前,我们要计算FIFO的深度,有事后计算出的FIFO深度不一定是2的整数幂,这时候我们需要向上取整到2的整次幂。因为异步FIFO里面读写地址做跨时钟之前把地址做了格雷编码,然后使用格雷编码的地址做跨时钟处理。格雷码的特点是相临(十进制表示)数字只有1bit变化,这样做跨时钟时,可以降低亚稳态的概率。如果FIFO深度不是2的整次幂,那么地址从最大跳变到0时,相应的格雷码地址变化就不止1bit了,这样会增加亚原创 2021-03-16 10:30:20 · 4985 阅读 · 0 评论 -
异步FIFO控制代码
在芯片设计中,遇到跨时钟操作时,经常用的哦啊异步FIFO,下面整理了异步FIFO控制代码。module async_fifo #( parameter DT_WID =8, parameter ADR_WID =9)(//write portinput wr_rst_n,input wr_clk,input wr_en,input [DT_WID-1:0] w原创 2021-03-15 16:34:26 · 251 阅读 · 0 评论 -
异步RAM模型
异步ram长用于异步FIFO中。其模型如下:module async_ram #(parameter DT_WID= 8, parameter ADR_WID= 9)(input wr_clk,input wr_en,input [ADR_WID-1:0] wr_addr,input [DT_WID-1:0] wr_dt,input rd_cl原创 2021-03-15 15:44:40 · 313 阅读 · 0 评论 -
ASIC中的同步复位和异步复位
芯片设计中需要复位操作使电路进入稳定状态。复位操作分为同步复位和异步复位。同步复位同步复位指在时钟上升沿时复位信号才起作用,复位时需要时钟。always @(posedge clk) begin if(!rst_n) dout <= 0; else dout <= din;end如上,当rst_n为0时,只有clk上升沿时,dout才为0,dout被同步复位。同步复位优点:1.电路都是同步复位;2.可以过滤毛刺。同步复位缺点:1.复位原创 2021-03-15 15:20:56 · 931 阅读 · 0 评论 -
数字芯片设计中FIFO问题总结
在数字芯片设计中FIFO是经常遇到的,但是如果但把FIFO相关问题拿出来提问别人,有时候不一定能块速解答,下面总结经常遇到的一些问题。1.一个读写时钟相同的FIFO,每100个时钟周期会写入10个数据,写入的时间是随机的。每10个时钟周期会读1个数据,输出没有反压,计算FIFO最小深度。既然是计算FIFO最小深度,那么我们就要考虑极端情况,保证在极端情况下FIFO可以满足需求。基本要求就是来的数据都能存下,不能丢。那么当在第一个100时钟周期后的10个cycle和第二个100时钟周期的前10个cyc原创 2021-03-15 12:09:00 · 1654 阅读 · 0 评论 -
Verilog中的逻辑移位和算术移位仿真
逻辑移位逻辑移位的操作符为右移(>>)高位不够的bit位补0。左移(<<),低位补0。算术移位算术以为呃的操作符为右移动(>>>)高位用呼号位补。左移(<<<),低位补0。实例仿真结果结论对于无符号数,逻辑移位和算术移位结果是一样的。对于有符号数,逻辑右移和算术右移是不一样的。算术右移时,高位需要用符号位补。...原创 2021-02-03 11:07:42 · 1895 阅读 · 1 评论 -
数字电路中锁存器,触发器和寄存器的区别
锁存器(Latch)锁存器是电平敏感,即在电平有效时,被赋值的数跟赋值数变化而变化。触发器(Flip-flop)对脉冲的边沿敏感,被赋值的数只在时钟脉冲的上升沿或者下降沿的瞬间改变。寄存器能够寄存数据的单元的统称。从名字来看,不管是锁存器还是触发器都是寄存器。寄存器是最小的存储单元。在一般设计中要避免Latch的产生。因为1.Latch对输入电平敏感,受布线延时影响比较大,容易产生毛刺。2.时序分析难。...原创 2020-12-16 19:59:36 · 717 阅读 · 1 评论 -
简单理解Verilog中的阻塞赋值和非阻塞赋值
在做芯片设计写硬件描述语言时,对于初学者必然面对的一个问题是,该如何使用阻塞赋值和非阻塞赋值。对于个问题,首先要理解什么是阻塞赋值?什么是非阻塞赋值?阻塞赋值从形式上来看,阻塞赋值用等号(=)表示。从字面意思上来看,赋值时被阻塞了。比如a=b,意思是把b值赋给a,从表达上来看a永远和b的值是相等的。但是如果b是一个表达式,比如b=c+d+e,或者其他复杂表达形式,那么要想让b值赋到a上,那么b必须完成c+d+e计算。那么这样a被赋值是有一个阻塞的过程。非阻塞赋值从形式上来看,非阻塞赋值用小于原创 2020-12-16 09:50:30 · 2247 阅读 · 0 评论 -
AHB总线技能提升版
简介不管是什么总线,都是为了模块之间通信,传输数据。既然是两个模块之间通信,那么就必须有一种两个模块都遵守的规则,这个规则就是协议。不同的协议有不同的规则。用不同的规则是服务于不同的应用,不同的模块的。AHB是Advanced Peripheral Bus的首字母缩写,它是AMBA总线规范的一部分。AHB具有高性能特点,常用在ARM核与系统内部的高速RAM,NAND FLASH,DMA和Bridge的连接。与APB相比,APB主要用于连接外部设备,而且对性能要求不高但是在意功耗的系统。AHB主要原创 2020-10-08 19:12:14 · 375 阅读 · 0 评论 -
浅析芯片中握手设计
握手,我们熟悉的动作了,虽然动作简单,但是握手里面有好多学问和细节。今天我们看的不是日常交往中的握手,而是说这芯片设计中的握手处理。在芯片中模块之间会经常用到握手处理,这样各自模块可以处理自己的事,提高整体的效率。一般握手用两个信号线,比如A模块和B模块握手。A发出一个valid信号,B模块有ready信号。A准备好了valid会有效,B准备好了B的ready会有效。在A的valid和B的ready同时有效时,完成握手。在设计中要特别注意A的valid不能依赖B的ready,同样B的ready不能依原创 2020-09-25 08:13:50 · 848 阅读 · 0 评论 -
I2C接口简介和时序
简介I2C,Inter-Integrated Circuit,是两根线,SDA(数据)和SCL(时钟),也是一种同步传输协议。主机在发送开始信号之后,先发送7个比特的地址位和1个比特的读写位,每个从机有自己的I2C地址,当发现该条指令是发给自己的时候,拉低SDA线(即回复ACK信号),然后主机发送或接收数据,完成传输。传输完成之后,主机发送停止位,完成该次传输。时序(1) master发起始信号后,总线上所有的slave开始等待主机紧接下来的地址广播。总线上每个设备的地址都是唯一的,..原创 2020-09-11 09:29:02 · 1706 阅读 · 0 评论 -
python读取文件句柄的两种方法
方法一:使用fid = open("./file.txt","r")这样打开文件在读取文件操作后,在 程序的后面需要加上fid.close()方法二:使用with open("./file.txt","r") as fid: xxxxx(具体文件操作)这样打开文件后不用再关闭文件句柄了,使用起来比较方便。...原创 2020-09-10 07:55:18 · 1622 阅读 · 0 评论 -
I2C slave的两种设计思路
I2C slave设计思路有两种:1.直接使用SCL作为时钟信号,采集SDL;2.使用快速时钟采样SDA和SCL信号。第一种方法设计比较简洁,但是没有第二种设计方法可靠。原创 2020-09-09 08:56:11 · 1730 阅读 · 4 评论 -
快速理解APB接口特点和使用方式
APB简介APB(Advanced Peripheral Bus),外围总线,是一种常见的总线协议。APB属于AMBA 3 协议系列,它提供了一个低功耗的接口, 并降低了接口的复杂性。 APB接口用在低带宽和不需要高性能总线的外围设备上。 APB是非流水线结构,所有的信号仅与时钟上升沿相关,这样就可以简化APB外围设备的设计流程,每个传输至少耗用两个周期。APB可以与AMBA高级高性能总线(AHB-Lite) 和AMBA 高级可扩展接口 (AXI)连接。APB主要用于低带宽的周边外设之间的连接,它原创 2020-09-07 15:03:22 · 9787 阅读 · 0 评论 -
MIPI RFFE接口实战分享
简介RFFE是RF Front-End Control Interface的简写。具体介绍可以RFFE的标准协议。本文主要介绍一些关键点,为初次设计该接口的同学一些启发或者指导。如果做过串行接口的,对于RFFE的理解是有帮助的,因为RFFE也是一个串行接口。即使没有做过,把RFFE的关键点理解了,RFFE也是不复杂的。两个模块有信息交换,(我们称行动的发起方为master,信息的接收方为slave),那肯定有约定,不然它们是不知道谁跟谁在交流。那对于RFFE,它采用的沟通方式从大的方面来说就两种原创 2020-07-24 09:17:45 · 5427 阅读 · 0 评论 -
Verilog中条件编译`define,`ifdef,`else和`endif的使用
对于`define,`ifdef,`else和`endif首先要注意的是加在字母前面的是一个反向单引号。具体用法和matlab语法比较相似。他们的作用是条件编译。条件编译的意思就是,在编译工程中只编译满足条件的部分,不满足条件的,就意味没有用。`define这个关键词的作用是定义一些参数,比如:`define TEST test_u.moulde_a就把TEST定义为test_u.module_a了,注意TEST和test_u.moulde_a中间只有空格连接,后面没有任何字符。在引用TES原创 2020-07-03 11:28:49 · 22452 阅读 · 0 评论 -
testbench自动读取文本中的参数方法
在做Verilog验证时,如果设计的规模不大,那我们可以搭建一个testbench来验证设计。如果验证的模块有很多参数,那么我每验证一个case,都需要改一些参数,这样效率会很低,而且很容易出错。很容易出现debug半天发现自己的某一个参数和reference的参数设置的不一样。下面提出了自动从reference生成的文本中读取参数,保证了reference和dut的参数一样,可以减少错误,提高验证效率。该方法的思想是把文本中的参数读到一个数组中,然后去索引,实现中用了一些system Verilog的原创 2020-06-22 09:05:27 · 593 阅读 · 0 评论 -
Verilog使用 $sformatf实现字符串拼接
在验证过程中会遇到字符串拼接问题,下面示例使用$sformatf做字符串拼接:以上示例中,st_a就变成了“./file/dti.txt”。原创 2020-05-15 10:07:48 · 10036 阅读 · 1 评论 -
Verilog文件的读取(fscanf)和写入(fwrite)方法
在写testbench时,经常会用到文件的读取,下面示例了文件读取和写入的方法:文件读取图中第一行定义一个文件句柄。由于打开的文件中一行中有两个10bit的十进制数据,所以定义了2个reg变量。第6行到12行就是文件的读取过程。使用的系统函数$fopen打开文件;使用$feof判断文件是否读完;使用$fscanf读取文件内容。在实际验证中,仿真一段时间后,仿真会结束,注意在仿真结束时,要使用$fclose(dti_fid)关闭文件。文件写入...原创 2020-05-15 09:09:26 · 19685 阅读 · 3 评论 -
只读(OR),只写(WO),读写(RW)和写清(WC)寄存器的含义
我们知道硬件要想工作必须有软件的配合,最基础的是需要软件根据不同场景给硬件配置不同参数,所以向寄存器中配置参数是很常见也是必须的一种配合。WO寄存器硬件设计时候需要考虑哪些参数是可以需要配置,当然这也需要和软件一起沟通,看看那些参数软件配置比较合理,这其实是软硬件划分的一部分。当确定了哪些参数软件配置后,硬件就得留出相应的寄存器给软件。那这个时候,我们就出现了一种寄存器叫可写寄存器,如果该...原创 2020-04-29 07:21:13 · 19694 阅读 · 8 评论 -
数字图像信号水平消隐,垂直消隐,前肩,后肩等基本概念
在做数字图像处理时,必然要接触比如水平消隐,垂直消隐,前肩,后肩等基本概念,下面图示了水平前肩,水平后肩,垂直前肩和垂直后肩。数字视频的基本概念源自于模拟视频,因为先有模拟显示器后有数字显示器的。对于模拟视频我们可以这样理解:视频可以分解为帧,每帧分为为若干个基本视点(像素),每个像素都有独立的色彩信息,在屏幕上依次将这些点用电子枪按照行和列打出来,就形成了一幅完整画面,连续的打出画面,利用人...原创 2020-04-25 20:52:34 · 12591 阅读 · 1 评论 -
直观理解线性插值(linear interpolation)和双线性插值(Bilinear interpolation)
线性插值(linear interpolation)如下图有A,B两点,A(x0,y0),B(x1,y1)。在A和B之间线性插入一点C,这个是一维的,只要画个图,就可以直观的看出来。这个比较简单,按照求斜率来算,可以求出。Yc=Ya+(Xc-Xa)*(Yb-Ya)/(Xb-Xa)。双线性插值(Bilinear interpolation)双线性插值跟线性插值比,复杂一点,因为...原创 2020-04-11 19:19:19 · 4986 阅读 · 0 评论 -
ASIC设计中串行、并行和流水设计
在做ASIC设计方案的时候,当设计规格比如时延、吞吐率和面积定下来后,我们就得考虑逻辑采用串行还是并行方案。整体模块是否采用流水设计。1.串行还是并行串行设计的好处是可以复用逻辑,节省逻辑资源。缺点是,控制复杂,时延大。处理模型如下。我们可以看到如果data_in0~n都要做PROCSEE处理,那么我们在输入PROCESS前要做一个控制逻辑,把data_in0~n一个一个的送入PROCES...原创 2020-04-04 17:21:59 · 1011 阅读 · 0 评论 -
SPRAM, TPRAM和DPRAM的区别
在设计中常用的RAM有单口RAM:SPRAM(single-port RAM)。双口RAM:TPRAM(two-port RAM)和真双口RAM:(dual-port RAM)。SPRAM该RAM只有一套读写线,读写时分复用,读的时候不能写,写的时候不能读。RAM模型如下:clk:时钟信号;cs:片选信号,在读写的时候为高电平;rw_en:读写使能信号。高电平的时候为读,低电...原创 2020-03-31 18:36:28 · 17878 阅读 · 7 评论 -
matlab和Verilog之截位,四舍五入和饱和处理
在数字芯片设计中,遇到数据流处理时,经常会遇到饱和,截位和四舍五入处理。下面就在这里做个总结。数字设计时需要有相应的算法。matlab是算法人员常用的仿真工具。首先看一下再matlab中几个取整的函数。(1)floor,朝负无穷方向取整,也即向下取整。比如floor(-1.01) =-2;floor(1.9) =1。(2)ceil,朝正无穷方向取整,也即向上取整。比如ceil(-1.0...原创 2020-03-27 19:36:31 · 5382 阅读 · 1 评论 -
python实现十六进制补码的加减乘计算
脚本介绍:(1)实现十六进制补码加减乘计算;(2)使用方法。把本脚本命名为calc.py。在terminal中输入python calc.py string。即可根据输入个string做计算。如,输入python calc.py 50x10*50x0f,既可以得到100x310。这里的输入数据和输入都是用补码形式计算的。0x表示116进制,0x前的数表示该数的位宽,0x后面的数是产业运算...原创 2020-03-22 23:33:39 · 2790 阅读 · 0 评论