关于仿真工具questasim中命令“run 0” assign赋值右端的信号变化都会立刻引起左端信号的变化,而always块中的赋值必须在对应事件(例如时钟有效沿跳变)发生变化才会赋值。指令“run 0”并不是不跑仿真,而是运行了一个时间片,一个时间片中又包含了无数个delta_cycle。仿真执行“run 0”后:仿真跑了一个时间片(time slot),对于assign会立即发生赋值,而always则不会立即发生赋值。仿真未开始前:二值逻辑初始默认为X,二值逻辑初始默认为0。
时序分析例题 时序约束可以规定时钟信号的周期、占空比、时钟上升沿和下降沿的时刻等,同时也可以规定数据的延时、保持时间、建立时间等等。SDF文件(Standard Delay Format)是一种包含时序信息的文件格式,可以描述设计中各个时序路径的延迟信息。(1)分析的时序路径为reg到reg型,分析的是最大路径,即是对建立时间的分析,建立时间为0.0701ns。首先确定分析路径,分析路径类型为clk2D,所以具体路径为CLK-Q/OUT-INV_2-D。已知建立时间检查与时钟周期T有关,保持时间检查与时钟周期T无关。
静态时序分析STA基础 通过库文件可以读出单元的相关信息,如下图所示:静态时序分析(STA)—— 标准单元库要定义时钟,我们需要提供以下信息:时钟源(Clock source)、周期(Period)、占空比(Duty cycle)边沿时间(Edge times)。
跨时钟域传输总结(包含verilog代码|Testbench|仿真结果) 采样中“快到慢”与“慢到快”在考虑问题时有什么区别?只需要考虑亚稳态问题除亚稳态问题外,还需考虑慢时钟的采样速率问题。因为根据采样定理,采样频率低于信号最高频率2倍的时候,是无法完整采样的。CDC传输方法总结:慢到快只考虑亚稳态问题,采用延迟打拍法;快到慢还需要考虑慢时钟采样速度,但是只要延长信号长度即可。常用方法为电平同步器、脉冲同步器、握手协议。其中,握手协议限制较为灵活,但握手信号需要在两个时钟域来回传递导致延时很大,所以握手协议是以牺牲效率为代价保证信号传递质量。
异步FIFO设计原理与设计方法以及重要问题汇总(包含verilog代码|Testbench|仿真结果) 异步FIFO主要由五部分组成:RAM、写控制端、读控制端、两个时钟同步端双端口RAM:此处为伪双端口RAM进行数据存储与读出,有两组数据线、地址线、时钟线。写控制端:写指针与满信号产生器,用于判断是否可以写入数据,写操作时,写使能有效且FIFO未满。读控制端:读指针与空信号产生器,用于判断是否可以读取数据,读操作时,读使能有效且FIFO未空。两个时钟同步端:读指针同步到写指针域进行“写满”判断,写指针同步到读指针域进行“读空”判断。下文将会从双口RAM模块、读写指针(格雷码)转换与跨时钟
如何实现三种不同RAM?(单端口RAM、伪双端口RAM、真双端口RAM|verilog代码|Testbench|仿真结果) RAM(随机存取存储器)是计算机系统中的一种主要存储器件,用于存储和读取数据。在RAM中,单端口RAM(Single-port RAM)和双端口RAM(Dual-port RAM)是两种常见的类型,双端口RAM又分为真双端口(True dual-port RAM)和伪双端口RAM(Simple dual-port RAM)。那么什么是单端口和双端口?又该如何区分真双端口和伪双端口?输入只有一组数据线和一组地址线,读写共用地址线,输出只有一个端口。
毛刺消除与输入消抖(单边毛刺滤除、双边毛刺滤除、输入防抖|verilog代码|Testbench|仿真结果) 核心思想为“打拍子 + 逻辑运算”。毛刺宽度介于N和N+1个周期,则需要N+2级触发器采样。消除高电平采用“与”逻辑运算,消除低电平采用“或”逻辑运算核心思想为“双边沿检测 + 计数器”。通过双边沿检测得到信号变化的位置,用计数器则得到信号变化的周期,若变化周期大于要求的宽度(即非毛刺)则赋值,相反则是维持信号不变。
边沿检测(上升沿检测、下降沿检测、双边沿检测|verilog代码|Testbench|RTL电路图|仿真结果) 打拍子:通过寄存器寄存延迟一拍输出,因为寄存器的特性,当信号发生改变时,下一级寄存器输出不会立刻改变而会在下一个时钟周期改变。Tips:有时候为避免亚稳态的影响而加入多级寄存器,相当于打多拍。逻辑运算:逻辑的实现部分为,可以将din_r与din理解为状态的前一刻和后一刻。
异步复位同步释放(verilog代码|Testbench|仿真结果|综合电路) 电路的任何一个寄存器、存储器结构和其他时序单元都必须附加复位逻辑电路,以保证电路能够从错误状态中恢复、可靠地工作。对于综合实现的真实电路,通过复位使电路进入初始状态或者其他预知状态。复位在数字IC设计中是不可缺少的一部分,故一定要清楚掌握深入理解复位的作用。复位信号可以分为同步复位和异步复位两大类。同步复位指的是当复位信号发生变化时,并不立即生效,而是等到有效时钟沿采集到复位信号的变化后,才会对寄存器进行复位操作;而异步复位则不依赖于系统时钟,一旦信号发生变化,就会立即对寄存器进行复位操作。
七种计数器总结(格雷码计数器、环形计数器、约翰逊计数器、FLSR、简易时分秒数字秒表|verilog代码|Testbench|仿真结果) 普通二进制计数器:大致包括可复位/置数计数器、双向(可加可减)计数器等,这类计数器代码逻辑简单,直观易懂。格雷码计数器:格雷码因翻转的次数少,因此具有减少数据传输错误的作用。格雷码广泛应用在FIFO、跨时钟域的通信(CDC)、RAM地址寻址计数器、数据纠错等电路设计中。产生格雷码有状态机法、自然二进制转格雷码、组合逻辑产生这三种方法。移位寄存器类计数器:包括环形计数器、扭环形计数器(又称约翰逊计数器)、LFSR计数器,三种都可归结于由寄存器与一个反馈回路组成,只不过对于环形计数器,没有反馈回路;
串并转换(串入并出、并入串出、移位寄存器法和计数器法|verilog代码|Testbench|仿真结果) 数字电路中的串并转换主要设计思想来源于用面积换速度,对数据流进行管理。实现串并转换的主要方式有双口RAM,FIFO,移位寄存器等,对于数据量较大的一般使用双口RAM或者FIFO实现,数据量较小的使用移位寄存器实现。在设计的时候主要包括以下两个模块核心模块:对于移位寄存器法,每个时钟周期将1bit数据缓存在寄存器上,选择不同的转换优先方式数据缓存的方式不同。选择msb优先的情况下,数据将会从高位向低位依次缓存,相当于数据不断地右移,lsb优先则相反。对于计数器法,相比于移位寄存器逐次移位进行拼接,计数
四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果) 移位寄存器有哪些分类呢?按移位方向分类:①单向移位寄存器(包括左移、右移)②双向移位寄存器按循环方式分类:①循环移位寄存器②非循环移位寄存器按部位的不同分类:①逻辑移位寄存器②算术移位寄存器按输入输出方式分类:①串入串出②串入并出③并入串出④并入并出