- 博客(19)
- 收藏
- 关注
原创 关于仿真工具questasim中命令“run 0”
assign赋值右端的信号变化都会立刻引起左端信号的变化,而always块中的赋值必须在对应事件(例如时钟有效沿跳变)发生变化才会赋值。指令“run 0”并不是不跑仿真,而是运行了一个时间片,一个时间片中又包含了无数个delta_cycle。仿真执行“run 0”后:仿真跑了一个时间片(time slot),对于assign会立即发生赋值,而always则不会立即发生赋值。仿真未开始前:二值逻辑初始默认为X,二值逻辑初始默认为0。
2023-08-09 21:20:27 1175 1
原创 时序分析例题
时序约束可以规定时钟信号的周期、占空比、时钟上升沿和下降沿的时刻等,同时也可以规定数据的延时、保持时间、建立时间等等。SDF文件(Standard Delay Format)是一种包含时序信息的文件格式,可以描述设计中各个时序路径的延迟信息。(1)分析的时序路径为reg到reg型,分析的是最大路径,即是对建立时间的分析,建立时间为0.0701ns。首先确定分析路径,分析路径类型为clk2D,所以具体路径为CLK-Q/OUT-INV_2-D。已知建立时间检查与时钟周期T有关,保持时间检查与时钟周期T无关。
2023-08-02 10:11:01 2439
原创 静态时序分析STA基础
通过库文件可以读出单元的相关信息,如下图所示:静态时序分析(STA)—— 标准单元库要定义时钟,我们需要提供以下信息:时钟源(Clock source)、周期(Period)、占空比(Duty cycle)边沿时间(Edge times)。
2023-07-26 20:36:48 2060 1
原创 跨时钟域传输总结(包含verilog代码|Testbench|仿真结果)
采样中“快到慢”与“慢到快”在考虑问题时有什么区别?只需要考虑亚稳态问题除亚稳态问题外,还需考虑慢时钟的采样速率问题。因为根据采样定理,采样频率低于信号最高频率2倍的时候,是无法完整采样的。CDC传输方法总结:慢到快只考虑亚稳态问题,采用延迟打拍法;快到慢还需要考虑慢时钟采样速度,但是只要延长信号长度即可。常用方法为电平同步器、脉冲同步器、握手协议。其中,握手协议限制较为灵活,但握手信号需要在两个时钟域来回传递导致延时很大,所以握手协议是以牺牲效率为代价保证信号传递质量。
2023-06-08 10:20:57 7009 1
原创 异步FIFO设计原理与设计方法以及重要问题汇总(包含verilog代码|Testbench|仿真结果)
异步FIFO主要由五部分组成:RAM、写控制端、读控制端、两个时钟同步端双端口RAM:此处为伪双端口RAM进行数据存储与读出,有两组数据线、地址线、时钟线。写控制端:写指针与满信号产生器,用于判断是否可以写入数据,写操作时,写使能有效且FIFO未满。读控制端:读指针与空信号产生器,用于判断是否可以读取数据,读操作时,读使能有效且FIFO未空。两个时钟同步端:读指针同步到写指针域进行“写满”判断,写指针同步到读指针域进行“读空”判断。下文将会从双口RAM模块、读写指针(格雷码)转换与跨时钟
2023-06-05 11:19:11 7438 3
原创 如何实现三种不同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)。那么什么是单端口和双端口?又该如何区分真双端口和伪双端口?输入只有一组数据线和一组地址线,读写共用地址线,输出只有一个端口。
2023-06-02 16:54:12 6574 9
原创 毛刺消除与输入消抖(单边毛刺滤除、双边毛刺滤除、输入防抖|verilog代码|Testbench|仿真结果)
核心思想为“打拍子 + 逻辑运算”。毛刺宽度介于N和N+1个周期,则需要N+2级触发器采样。消除高电平采用“与”逻辑运算,消除低电平采用“或”逻辑运算核心思想为“双边沿检测 + 计数器”。通过双边沿检测得到信号变化的位置,用计数器则得到信号变化的周期,若变化周期大于要求的宽度(即非毛刺)则赋值,相反则是维持信号不变。
2023-06-02 16:45:02 7346
原创 边沿检测(上升沿检测、下降沿检测、双边沿检测|verilog代码|Testbench|RTL电路图|仿真结果)
打拍子:通过寄存器寄存延迟一拍输出,因为寄存器的特性,当信号发生改变时,下一级寄存器输出不会立刻改变而会在下一个时钟周期改变。Tips:有时候为避免亚稳态的影响而加入多级寄存器,相当于打多拍。逻辑运算:逻辑的实现部分为,可以将din_r与din理解为状态的前一刻和后一刻。
2023-06-02 16:34:33 8311 1
原创 异步复位同步释放(verilog代码|Testbench|仿真结果|综合电路)
电路的任何一个寄存器、存储器结构和其他时序单元都必须附加复位逻辑电路,以保证电路能够从错误状态中恢复、可靠地工作。对于综合实现的真实电路,通过复位使电路进入初始状态或者其他预知状态。复位在数字IC设计中是不可缺少的一部分,故一定要清楚掌握深入理解复位的作用。复位信号可以分为同步复位和异步复位两大类。同步复位指的是当复位信号发生变化时,并不立即生效,而是等到有效时钟沿采集到复位信号的变化后,才会对寄存器进行复位操作;而异步复位则不依赖于系统时钟,一旦信号发生变化,就会立即对寄存器进行复位操作。
2023-06-02 16:21:05 3519 2
原创 七种计数器总结(格雷码计数器、环形计数器、约翰逊计数器、FLSR、简易时分秒数字秒表|verilog代码|Testbench|仿真结果)
普通二进制计数器:大致包括可复位/置数计数器、双向(可加可减)计数器等,这类计数器代码逻辑简单,直观易懂。格雷码计数器:格雷码因翻转的次数少,因此具有减少数据传输错误的作用。格雷码广泛应用在FIFO、跨时钟域的通信(CDC)、RAM地址寻址计数器、数据纠错等电路设计中。产生格雷码有状态机法、自然二进制转格雷码、组合逻辑产生这三种方法。移位寄存器类计数器:包括环形计数器、扭环形计数器(又称约翰逊计数器)、LFSR计数器,三种都可归结于由寄存器与一个反馈回路组成,只不过对于环形计数器,没有反馈回路;
2023-06-02 15:37:23 6328
原创 串并转换(串入并出、并入串出、移位寄存器法和计数器法|verilog代码|Testbench|仿真结果)
数字电路中的串并转换主要设计思想来源于用面积换速度,对数据流进行管理。实现串并转换的主要方式有双口RAM,FIFO,移位寄存器等,对于数据量较大的一般使用双口RAM或者FIFO实现,数据量较小的使用移位寄存器实现。在设计的时候主要包括以下两个模块核心模块:对于移位寄存器法,每个时钟周期将1bit数据缓存在寄存器上,选择不同的转换优先方式数据缓存的方式不同。选择msb优先的情况下,数据将会从高位向低位依次缓存,相当于数据不断地右移,lsb优先则相反。对于计数器法,相比于移位寄存器逐次移位进行拼接,计数
2023-06-02 15:12:45 11303
原创 四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)
移位寄存器有哪些分类呢?按移位方向分类:①单向移位寄存器(包括左移、右移)②双向移位寄存器按循环方式分类:①循环移位寄存器②非循环移位寄存器按部位的不同分类:①逻辑移位寄存器②算术移位寄存器按输入输出方式分类:①串入串出②串入并出③并入串出④并入并出
2023-05-15 12:03:46 10752 3
原创 线性反馈移位寄存器LFSR(斐波那契LFSR(多到一型)和伽罗瓦LFSR(一到多型)|verilog代码|Testbench|仿真结果)
LFSR广泛应用于伪随机数生成、伪噪声序列生成、计数器、数据的加密和CRC校验、扰码器/解码器、信号生成和测试等领域,是一种非常有用的数字电路设计技术。LFSR主要分为斐波那契LFSR(多到一型)和伽罗瓦LFSR(一到多型)。对于斐波那契LFSR(多到一型)多个触发器输出进行异或运算,输出结果进入一个寄存器,对于伽罗瓦LFSR(一到多型),一个触发器的输出进入异或函数,计算结果驱动多个触发器。LFSR具有速度快,消耗逻辑门少的特点。
2023-05-09 14:00:00 6464
原创 自然二进制数与格雷码的相互转换
自然二进制数与格雷码两者优势:自然二进制数的编码方式简单明了,容易理解,在加减运算中能够直接进行,同时十分方便进行一些位运算操作(如移位、取反等)。格雷码计数时只有一位变化,可有效减少计数器状态的冗余转换,同时在传输数据时能够减小传输错误的概率,此外带权重编码处理更加方便。在一定程度上自然二进制数与格雷码优缺点基本相反,综上所述,自然二进制数和格雷码各有优劣之处,需要根据具体应用场景选择合适的编码方式。简单来说,在计数器和编码器中,倾向于使用格雷码;而在进行加减运算时,则倾向于使用自然二进制数。
2023-05-07 16:01:09 5426
原创 奇偶校验器设计(奇偶校验与奇偶检测,XOR法和计数器法|verilog代码|Testbench|仿真结果)
奇偶校验器设计主要思路是通过弄清一组数据中“1”和“0”的数目。若是奇校验则原始码流+校验位总共有奇数个“1”;若是偶校验则原始码流+校验位总共有偶数个“1”。 设计方法主要有XOR法和计数器法。XOR法最简单,只需要对数据使用按位异或,输出为“0”代表数据中“1”位偶数个;计数器法最直观,计数器中数值的奇偶性表示对应数据中“1”个数的奇偶。Tips:判断计数器是奇数还是偶数主要有判断data_out[0]和取余数两种方法,前者综合后耗损的资源太多不推荐前者。
2023-05-06 16:54:19 6820
原创 序列模三检测器(状态机法设计原理|verilog代码|Testbench|仿真结果)
对于模三检测器有三种余数分别是0、1、2。当序列每次新增1bit数据时,其实相当于逻辑左移运算,就是在原来的数据上×2,再根据新增的1bit数据与之相加确定下一个状态的余数。例如,即100到1001的过程(即十进制数4到9的过程):当前数据模三余数为1,在数据右端新增1bit数据1,最后会发现下一状态的余数变为0!
2023-04-29 17:46:19 3790 3
原创 序列发生器(两类序列、三种设计方法和两种发生模式|verilog代码|Testbench|仿真结果)
常见的序列发生器有固定序列和伪随机序列发生器,固定序列发生器的设计思路同序列检测器相似,常用简单序列发生器设计有如下三种设计思路:(1)状态机法;(2)移位寄存器法;(3)计数器法。对于设计出来的序列有两种选择,一是设计不可重叠的序列,二是设计可重叠的序列。在设计的时往往在考虑电路面积后采取最优的方法,所以必须考虑采用哪种方法借用的触发器数量最少!一般情况下,可重叠额的序列需要的触发器更少。总的来说,在对序列无特殊要求情况下,若是想减少触发器的数目,可使用状态机格雷码编译状态,且产生的序列是可重叠的。
2023-04-27 10:51:38 6666 3
原创 序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)
状态机法序列检测器:一句话概括就是设计复杂、不易扩展但是检测模式灵活。相比使用移位寄存器来说的话,状态机稍稍复杂些,主要体现在不易扩展(重新检测不同序列需重新设计状态转移)和状态机的状态转移判断上;但是这样也给状态机带来了优点 ,就是灵活性好,可以灵活处理输入和输出,因为状态机具有可编程性。同时可以处理较为复杂的序列检测任务,因为状态机可以支持多个状态和转换。移位寄存器法:一句话概括就是设计简单、易于扩展但是检测模式呆板。相比于使用状态机来说的话,只能处理简单的序列检测任务,因为它没有状态机的多状态和转换
2023-04-22 15:54:12 12601 5
原创 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|verilog代码|Testbench|仿真结果)
偶数分频:无论是通过D触发器还是计数器实现,这类分频都是最容易得到的,并且占空比容易控制在50%。对于D触发器实现偶数分频来说,分频数只能得2^n,其余分频数只能由计数器法等其他方法实现。除此以外,随着分频的数目不断增大,通过D触发器实现触发器数目会增多,在电路设计的过程中应当考虑面积因素。对于计数器实现偶数分频,占空比和分频数都可以得到极大的控制,是实现偶数分频最灵活的一种方式。
2023-04-19 10:12:23 13737 3
异步FIFO设计原理与设计方法以及重要问题汇总(包含verilog代码-Testbench-仿真结果)
2023-06-05
如何实现一个RAM?(单端口RAM、伪双端口RAM、真双端口RAM-verilog代码-Testbench-仿真结果)
2023-06-02
毛刺消除与输入消抖(单边毛刺滤除、双边毛刺滤除、输入防抖-verilog代码-Testbench-仿真结果)
2023-06-02
边沿检测(上升沿检测、下降沿检测、双边沿检测-verilog代码-Testbench-RTL电路图-仿真结果)
2023-06-02
数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频-verilog代码-Testbench-仿真结果)
2023-06-02
七种计数器总结(格雷码计数器、环形计数器、约翰逊计数器、FLSR、简易数字秒表-verilog代码-Testbench-仿真)
2023-06-02
串并转换(串入并出、并入串出、移位寄存器法和计数器法-verilog代码-Testbench-仿真结果)
2023-06-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人