- 博客(35)
- 收藏
- 关注
原创 流水线除法器verilog实现
除法器思路都是一样的,都是根据下述这个图实现如果全用组合逻辑实现,那么时序肯定很差,另外一方面如果用时序逻辑实现就要考虑到实际使用时候出发的除数和被除数是流水进来的,所以结果上肯定是要一个周期输出一个数据。所以我的思路就很简单,就是加寄存器,一拍走一个,如果是N位的我这里用到了N+1个寄存器,当然还可缩减一个。我分别对除数被除数还有有效信号做了寄存器,然后一拍一拍往下传,用时序逻辑实现除法器移位后的判断,用组合逻辑实现移位操作。代码如下`timescale 1ns / 1ps//
2022-05-12 21:33:39 2379 3
原创 FIFO专题之单口RAM实现FIFO(同步)
使用单口RAM实现FIFO,其实很简单,其中的重点就是区分出读写,读写如果同时启动,你肯定会思考单口RAM肯定会出问题,毕竟单口RAM只有一个口,肯定不能实现同时读写,那么怎么解决这个问题呢。有两种办法:第一种办法就是采用两个单口RAM,这样就可以了,两个单口RAM分开奇偶,相当于乒乓的意思,然后再加一个REG,这就相当于把读写分开了那么就可能分为以下几种情况:①同时读写:读写同时为奇,这种情况就是在当前一拍,将写数据存入REG中,并将REG_VALID拉高告诉FIFO我下一拍要写数据,
2022-05-11 21:51:07 6286 11
转载 握手信号出现时序违例怎么办
如果你参加过IC校招面试,自然会被问到“setup/hold的概念,以及setup/hold违例怎么办?”这时候,你肯定会立马在脑海中从打拍或者插buffer两个答案中选一个。但是在实际项目中,往往没有这么简单。举一个实际的场景:AXI master和AXI slave这一簇信号出现setup时序违例怎么办?1、从AXI master 到AXI slave 出现setup违例;2、从AXI slave 到AXI master出现setup违例;3、两者都出现setup时序违例。.
2022-05-10 14:55:03 864
原创 流水线设计艺术(一)
由于对ASIC速度要求的不断提高,推动了在每个时钟周期计算方面电路数据吞吐量的要求,故而采用流水线的方法对数据处理进程进行流水切割,提高时钟频率增加处理速度,但是这样处理的代价就是系统的延迟和面积的增加。 流水线切割就是通过在长组合逻辑中加入寄存器,减少整体的组合延迟,从而提高时钟频率提高性能。 由上述可知,增加流水线切割就是加入寄存器,但是新加入的寄存器除了增添了整体的系统延迟之外也添加了额外资源消耗。 下图即为加入寄存器流水切割前的电...
2022-04-05 20:04:09 198
原创 Serdes数据流
图中蓝色背景子模块为PCS层,是标准的可综合CMOS数字逻辑,可以硬逻辑实现,也可以使用FPGA软逻辑实现,相对比较容易被理解。褐色背景的子模块是PMA层,是数模混合CML/CMOS电路,是理解SerDes去别于并行接口的关键。发送方向(Tx)信号的流向: FPGA软逻辑(fabric)送过来的并行信号,通过接口FIFO(Interface FIFO), 送给8B/10B编码器(8B/10B encoder)或扰码器(scambler),以避免数据含有过长连零或者连1。之后送给串行器(Serial...
2022-03-17 16:26:07 356
转载 FPGA的IBUG原语使用
目前,大型设计一般推荐使用同步时序电路。同步时序电路基于时钟触发沿设计,对时钟的周期、占空比、延时和抖动提出了更高的要求。为了满足同步时序设计的要求,一般在FPGA设计中采用全局时钟资源驱动设计的主时钟,以达到最低的时钟抖动和延迟。FPGA全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元(CLB)、I/O单元(IOB)和选择性块RAM(Block Select RAM)的时延和抖动都为最小。为了适应复杂设计的需要,Xilinx的FPGA中...
2022-01-04 09:30:17 1843
原创 低功耗设计(三)
晶体管级的功率降低优化 工艺进步会引起功耗降低这是必然的1.布局优化直连的模块,或者说数据输入输出比较复杂的模块应该处于硅上非常接近的位置,因为走线的长度会引起不必要的功耗,甚至是时序上的不可靠性,走线延时会明显影响时序性能,甚至出书Slack。2.衬底偏压泄露电流是Vth的函数,适当的提高反向偏置电压或者提高晶体管的阈值就会减少泄漏电流,从而降低静态功耗。设计Vth动态变换的电压模式,在比较活跃的状态下,反向偏置较小,而在待机状态下反向偏置较高,这就涉及到低功耗一...
2021-12-19 22:34:51 349
原创 低功耗设计(二)
实际上对ASIC设计而言,在架构和RTL基本上完成的时候,功耗已经决定了80%,后端或者EDA工具对功耗的影响也只是在上述预留的功耗中修修补补,但是最终占大头的也是那80%,而且对于现在的IC设计工程师而言,必须学会一些低功耗的编码技术。 1.状态机的编码与分解 就是使用格雷码编码状态机,减少翻转率。而且状态机的状态大部分也是先使用组合逻辑实现N_state的变换,然后再到时钟有效沿进行state的转变,而使用格雷码编码会减小使用组合逻...
2021-12-19 22:00:16 1055
原创 低功耗设计(一)
要进行低功耗设计,首先就要清楚设备的低功耗出现在哪里,都有什么形式的低功耗,这方面看过一些论文或者一些博文的已经非常清楚了,首次启动的驱动电流,静态功耗,动态功耗三种。 首次启动的驱动电流就是大型设备第一次上电时那股巨大的浪涌电流,这会造成很大的功耗,但是对于数字的IC设计而言,这部分我们是难以解决的,一般是这个做这个设备的底层解决的。 静态功耗就是因为MOS管由于泄露电流造成的功耗,这方面的功耗随着工艺的进步越来越大。动态功耗或者开关功率是门输出切换时由...
2021-12-18 11:09:06 1952
原创 ASIC设计中的分频时钟
通常在一个SOC设计当中,或者任何一个工程项目当中,一般是很少用到单频时钟的,经常会用到分频时钟处理,经典的面试题中也有占比50%的三分频时钟设计;奇数分频时钟,50%占空比时钟处理方法:对使用奇数分频整除得到50%占空比的波形图如下图所示:其步骤就是:1.创建一个计数器,计数器从0到N-1,并且时钟在时钟的上升沿计时。2.采用两个切换触发器,按如下方式启动:tff_1en:使能在当计数器为0时;tff_2en:使能在当计数器为(N+1)/2,比如在3的时候就是...
2021-12-17 15:25:41 944
原创 多时钟处理问题
在具体的工程项目中,使用单个时钟固然能够减少违例情况的存在,但是基本上很少存在一种时钟存在的情况。 面对多时钟处理问题时遵循两个指导原则,时钟命名法和设计分区; 时钟命名是对不同处理区域的时钟进行不同区域的命名,比如系统时钟命名为SYS_clk; 发送时钟命名为Tx_clk,接收时钟命名为Rx_clk;某一个时钟域下的信号明明也就遵循这种原则,比如系统时钟下的信号:sys_rom_addr;sys_rom_data,这样一看就知道......
2021-12-16 17:22:04 894
原创 门控时钟与复位问题
门控时钟是降低功耗的一个有效技术,它能够在寄存器不工作时,直接让寄存器休眠,从而降低动态功耗及静态功耗,在时钟被门控时,时钟网络和及驱动的寄存器都停止工作,但是门控时钟也会导致时钟产生偏差,毕竟过了一个组合逻辑,如果时钟特别紧的话,可能会导致设计失败; 传统设计中,系统时钟连接到DFF的时钟引脚,这也就导致了功耗的三个主要组成部分: 1.组合逻辑消耗的功耗,组合逻辑的值在每个时钟边缘上都在变化,从而产生功耗; 2.触发器产生功耗,即使触发...
2021-12-14 16:37:59 3498
转载 AHB总线协议
AHB总线常用来构建 SOC,其总线矩阵可以将CPU,片上RAM,外设接口,DMA,以及各种控制器连接,构成一个独立的SOC系统,另外AHB总线矩阵也可以假设AHB2APB_bridge和AHB2AXI_bridge来间接,AXI和APB总线;
2021-11-20 21:05:34 2211
转载 七层协议OSI
OSI并不是一个协议,也不是一项技术,是一个参考模型。OSI(Open SystemInterconnect),即开放式系统互联。一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。它把我们使用的网络架构划分成了7个层次。图8‑1 OSI参考模型所以对于OSI参考模型只需要理解即可,不需要进行很深的研究。至于为什么选择这个模型进行网络互连,下面举一个简单例子:假设甲公司经理要寄一份文件给乙公司的经理。A.甲公司经理老板喊他秘书过来,说把这...
2021-11-17 16:23:43 341
原创 NCO设计感悟
影响NCO杂散度的一般就是两个条件一个是输入的位宽,一个是输出的量化位宽,输出在8位的情况下,随着输入位宽的加大,杂散度最后处于50dbc左右就保持不变了,输出量化位宽在16位的情况下,随着输入位宽的加大,杂散度最后处于100dbc左右就保持不变了。 一般设计的时候尽量使用查找表的模式,使用Cordic算法虽然也能算出,但是保不准最后综合成啥样,主要是移位用的太多,加减法也用的太多而且又比较复杂,尽量还是使用查找表来的舒服些。 查找表的使用最简单压缩ROM...
2021-11-13 22:03:37 478
原创 信号调制与解调
zai 在信号传输过程中,不同的传输介质对信号的频率等要求不同,也就是说不能直接将原始信号放到传输介质上进行传输,需要先将信号频率调制到固定的范围上适应于信号传输,而等信号传输到目标后,需要将调制后的信号进行解调,也就是将信号从载波上恢复到原始信号,然后进行信号处理,信号处理后再通过将处理的信号搬移到载波上,进行下一次传输; 一般信号调制也叫上变频,将信号变为中频信号,直接将原始信号与载波信号作频域卷积或者在时域进行乘积,将原始信号搬移到特定载波上。而在信...
2021-11-13 21:53:00 7727
原创 IC之无毛刺时钟切换
最近看秋招面试题,这玩意儿考了很多次,所以单独拿出来写一下: 题目的含义很简单就是一个时钟切换电路,但是在时钟切换时容易出现以下几种情况:第一种:切换前的时钟为高电平,切换后为低电平,切换后过一段时间切换后电平拉高,就造成了时钟输出电路上一个凸起的毛刺;如下图:第二种:切换前的时钟为低电平,切换后为高电平,过一段时间后高电平拉低,这也造成了在时钟输出的波形上,电路有一个凹下的毛刺;如下图所示:这看起来很简单但是在时钟切换时存在的毛刺很可能会引...
2021-11-13 21:21:07 1269 1
原创 边沿检测电路的多种实现
在数字IC设计中经常需要用到边沿检测电路,比如在雷达的信息处理流程中,数据进入时通常会跟着进入一路包络信号,包络信号可以看成时数据的有效位,即包络为高电平时,数据有效才会进行下面的信息处理流程,当包络无效即为低电平时,数据无效不会进入下面的信息处理流程。也就是非连续脉冲处理的机制中,这种边沿检测思想用到了,但是不止脉冲处理机制,基本上IC或者FPGA大一点的工程中都会用到边缘检测思想,下面针对边缘检测电路提供几版的verilog实现: 思路就是直接加一个寄存器,对有效信号打一拍处...
2021-11-13 10:56:02 858
原创 db,dbc,dbm
db db即分贝,是用来计算衡量信号相对值的单位,一贝尔=10分贝,db其实也就是两个量比值的大小,倍数越大db也就越大,dB是功率增益的单位db,表示一个相对值。当计算A的功率相比于B大或小多少个dB时,可按公式10lgA/B计算。例如:A功率比B功率大一倍,那么10lgA/B=10lg2=3dB。也就是说,A的功率比B的功率大3dB;如果A的功率为46dBm,B的功率为40dBm,则可以说,A比B大6dB;如果A天线为12dBd,B天线为14dBd,...
2021-11-08 16:46:35 5098
转载 Serdes 高速串行接口
一、SERDES的作用1.1并行总线接口 在SerDes流行之前,芯片之间的互联通过系统同步或者源同步的并行接口传输数据,图1.1演示了系统和源同步并行接口。 随着接口频率的提高,在系统同步接口方式中,有几个因素限制了有效数据窗口宽度的继续增加。a)、时钟到达两个芯片的传播延时不相等(clock skew)b)、并行数据各个bit的传播延时不相等(data skew)c)、时钟的传播延时和数据的传播延时不一致(skew between data and clock) ...
2021-11-08 15:49:27 9613 1
原创 高速Serdes串行接口
在以往的IC之间的源同步当中,发送的信号包括数据流信号,以及随着数据流信号同步的时钟信号,时钟信号在低速传输的情况下:1G以下传输,外部的扰动以及时钟抖动不会太影响数据流的恢复,但是如果时钟信号突破了1G甚至更高的情况下,外界环境中比如EMI的各种影响会引起时钟发生抖动,在高速采样恢复的过程中,这就没办法使用该时钟信号恢复数据,这里就用到了高速Serdes串行接口的恢复办法,将数据和时钟都通过高速线上传输,然后接受端通过PLL从数据流中恢复时钟,即使在传输的线上有轻微抖动,但是时钟和数据同时...
2021-11-08 15:44:43 3160
原创 多个IC之间的同步问题及串并转换问题
系统同步两个IC之间的通信,但是两个IC之间通信的时钟由同一个时钟源发出,要考虑的信号的建立时间与保持时间延迟,时钟上也要考虑到两个时钟的时钟抖动和时钟偏斜。源同步两个IC之间的通信,前一个IC不仅给后一个IC数据信号也给后一个IC时钟信号,后一个IC的接受数据就是以接受到的时钟信号为同步进行接受,要调整转发时钟的输出时间,数据线长度一定要和走线长度相匹配,两者走线延迟相同时序模型如下:自同步两个IC之间通信,数据和时钟信息都在一个信息流中发出,后一个IC要根据接受到的数据流对数
2021-11-07 21:39:11 824
原创 FPGA,ASIC中的port,net,pin
从这幅图中看,FPGA或这ASIC中和外部连接的端口叫做Port,在SDC中或者在ASIC的设计例化端口中加入的是port的例化,port分GPIO和LVDS差分,而硬件电路内部的cell中间的连接时net,cell的输入输出引脚叫pin,换句话说,port永远是指在顶层的端口向外部连接的输入输出port,而pin相对指的都是cell而言,只有模块上才会有pin,模块的输入输出端口都叫pin,pin之间都是通过net连接。 具体可以看大佬的写的非常详细。TCL中P...
2021-11-07 17:23:51 2202
原创 异步复位问题
复位中的同步复位和异步复位问题:恢复时间是指异步复位信号释放和时钟上升沿的最小距离,在“下个时钟沿”来临之前变无效的最小时间长度。这个时间的意义是,如果保证不了这个最小恢复时间,也就是说这个异步控制信号的解除与“下个时钟沿”离得太近(但在这个时钟沿之前),没有给寄存器留有足够时间来恢复至正常状态,那么就不能保证“下个时钟沿”能正常作用,也就是说这个“时钟沿”可能会失效。消除时间是指时钟上升沿之后变无效的最小时间长度。这个时间的意义是,如果保证不了这个去除时间,也就是说这个异步控制信号的解除与“有效时
2021-11-07 16:47:30 984
原创 AHB、AXI、APB分类
AMBA(Advanced Microcontroller Bus Architecture,高级微控制器总线结构)定义了嵌入式微处理器的通信标准,可以将RISC系列处理器集成在FPGA,ASIC的集成环境当中用于构建SOC系统,是ARM公司提出的开放性的片上总线标准,它是用来连接芯片内核和集成环境当中其他元件的连接线,并非芯片或者SOC与外部连接的接口,其具有高速度低功耗等特点。 根据AMBA总线的发展主要分为以下总线协议:AHB ASB APB A...
2021-11-02 17:36:44 3531
原创 Cordic角度旋转算法高位宽输入实现DDS的一些思考
Cordic角度旋转算法简介: 在DDS内,Cordic算法相当于替代Rom的一种相幅映射算法,算法通过计算单位圆上点的X坐标和Y坐标,得到角度θ的正弦和余弦值,从一个正弦和余弦已知的初始角度开始,通过多次旋转一系列固定角度来获得所需点的坐标。其公式如下所示:硬件内架构如下所示:通过多次流水迭代即可实现相幅映射关系。具体迭代的算法详解这里就不再解释,详情可以看一休哥的Cordic算法详解,里面的算法解释及硬件实现代码解释...
2021-10-30 17:04:37 1300 1
原创 Vivado DDS IP协议的一些思考。
由于项目需求,需要一个高精度的DDS/NCO模块,现在的DDS基本上都是基于查找表形成的,在高精度的要求下,比如频率控制字高达32位甚至48位的情况下,ROM的开销是远远不能接受的比如在32位幅度在10位的情况下,ROM的开销高达2^(32+10),其开销太大。之后又根据文献索引到了使用迭代的Cordic算法替代查找表,Cordic算法是一种迭代旋转算法,通过输入相位,算法内部通过迭代得到对应相位的正弦值和余弦值,其结果就等效于基于查找表输入相位得到对应的幅度值,也就是相...
2021-10-30 11:29:32 463
原创 JESD204B寄存器配置
JESD204B接受协议中通过AXI总线配置寄存器,寄存器地址及位数代表如下表所示:JESD204寄存器配置 addr Description 备注 0x008 ILA support [31:1]保留,最低位为有效位,1代表启用ILA,0代表禁止ILA,默认值为1 0x00c Scrambling [31:1]保留,最低位为有效位,1代表启用加扰,0代表禁止加扰,默认值为0。 0x010 SYS...
2021-10-25 14:59:14 1436
原创 JESD204B 系统复位与同步选项
CGS,代码组同步,ILA,初始化多帧序列帧同步,然后进行数据传输 。 系统复位 在系统复位上:JESD204中提供了一个全局的异步时钟复位,rx_reset用来复位整个系统,AXI4-Lite系统总线复位不受此影响,AXI4-Lite线中带有单独的重置信号,s_axi_aresetn,用来复位和AXI4总线相关的配置寄存器。 在软件复位上:在AXI4-Lite总线中提供了一个寄存器,该寄存器用来复位和软件配置相关的寄存器,用来触发软件相关的逻辑数据路径上...
2021-10-25 10:25:05 5207 1
原创 JESD204B(RX)协议接口说明。
首先解释一下Vivado IP协议中的Shared Logic in Example 与Shared Logic in Core首先,什么是Shared Logic?字面意思很好理解,就是共享逻辑,主要包括时钟、复位等逻辑。当选择Shared Logic in core时,这些共享的逻辑就会被集成到IP的内部,也就是说这些逻辑是不能被修改的。当选择Shared Logic in example design时,这些共享逻辑就会出现在IP的接口上,我们可以根据自己的需求进行控制,那为什么叫in exam.
2021-10-23 21:27:53 5420
转载 AXI,AXI_Lite,AXI_Stream
AXI 总线协议根据不同的场景,又更加的细分为了三种类型:AXIAXI-LiteAXI-Stream (也叫AXIS)完整的 AXI 总线协议涉及的内容较多,适合高速内部互联(通过 AXI Interconnet),独立的读写数据总线和独立的读写地址总线,加上 burst based 传输,使得其吞吐可以达到很高水准;之所以将 AXI 总线协议标准分为了 3 类,主要是为了针对不同的场景;AXI4:完整AXI4传输总线适合高速内部互联,结构复杂,消耗的资源多;AXI4-Lite
2021-10-23 16:15:18 3443
原创 JESD204B协议,时钟模块:
由于项目需要用到JESD204B协议,这里只用到了接受的协议,并没有用到传输协议,接受传输,外部AD采用AD9680,JESD每条lane线速率12.5Gb/s,项目要求实现多路JESD接受AD采集,并需要完成同步工作,前期开展对JESD的学习仿真。Jesd的时钟如下:Device_clock 设备时钟,Jesd协议规定,在Jesd连接的每个设备上允许每个设备有不同的时钟,但是频率上必须相关,Deviece_clock连接到每个设备上,保证每个设备上的时钟都是...
2021-10-23 15:36:27 1124 1
原创 STA 静态时序分析
时钟抖动(jitter):时钟抖动是相对于理想时钟沿实际时钟存在不随时间积累的,时而超前,时而滞后的偏移称为时钟抖动,时钟在两个时钟周期之间存在的差值,这个误差是发生在时钟产生器的内部的,一般会和物理结构有关,布局布线对其没有影响;JITTER = T2 -T1时钟的抖动可以分为随机抖动(random jitter,简称rj)和固有抖动(deterministic jitter),随机抖动的来源为热噪声、shot noise和flick noise,与电子器件和半导体器件的电子...
2021-06-09 15:22:00 1014
原创 VCS仿真VHDL VERILOG混合脚本
#!/bin/csh #虚拟路径.PHONY: com sim cov clean debug#DEFINEALL_DEFINE = +define+DUMP_VPD #预编译宏定义,本例程没有用到宏定义#OUTPUHTOUTPUT = simv #输出文件的文件名# Code coverage command #覆盖率检查CM = -cm line+cond+fsm+branch+tgl #收集的代码覆盖率类型CM_NAME = -c..
2021-06-09 09:50:23 10016 11
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人