自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 单口RAM、伪双口RAM、真双口RAM、单口ROM、双口ROM的区别

单口RAM与伪双口RAM、真双口RAM的区别在于:单口RAM只有一个时钟(clka)(时钟上升沿到来时对数据进行写入或读出)、一组输入输出数据线(dina&douta)、一组地址线(addra)、一个使能端(ena)(ena==1时可以进行读或写的操作,ena == 0时无法进行读或写的操作)、一个写使能端(wea)(在ena == 1的情况下,wea == 1时只写不读,wea == 0时,只读不写)。单口RAM,读写无法同时进行,只能或读或写。伪双口RAM有两个时钟(clka&clk

2021-06-15 21:00:41 3308

原创 FPGA杂记(四)

1、clk中为什么用posedge而不用negedge?(1)、一般情况下,系统中统一用posedge避免用negedge,降低设计的复杂度,可减少出错。(2)、在modelsim仿真中,时钟是很严格的,但是在真实的晶振所产生的clock却是不严格的,比如高电平和低电平的时间跨度就不一样,甚至非周期性的微小波动。如果只是用posedge,则整个系统的节拍都按照clock上升沿对齐,如果用到了n...

2021-06-15 20:47:00 1525

原创 数字IC手撕代码(九)

问题:枕头检测,frame_head来脉冲的同时din会来数据,连续三次数据都是8‘h23的话就输出一个脉冲。比较懵的点是(frame_head)是一个单bit的标志脉冲(标志数据开始有效)?还是类似于数据的有效信号?假定为类似数据的有效信号。这个题目让我来做的话,我先会这样写(不考虑资源消耗)module frame( input clk, input rst_n, input frame_head, input [7:0] din, output detect);reg [23:

2020-08-13 15:40:49 1494 1

原创 数字IC手撕代码(八)

这次打算写异步FIFO和同步FIFO吧异步FIFO设计中四个部分:(1)Memory,存储数据(2)写逻辑,主要产生写信号和写地址(3)读逻辑,主要产生读信号和读地址(4)跨时钟域地址比较,产生FIFO的空、满标志技术关键点:(1)读写地址信号跨时钟域同步(2)读写地址的比较(3)将空和将满的产生module afifo #( parameter DATASIZE = 8, parameter ADDRSIZE = 4, parameter ALMOST_GAP = 3)(

2020-08-13 08:11:52 1011

原创 数字IC手撕代码(七)

问题:输入一个16bit的数,现在要求它除以3得到的商和余数?如何优化?看到这个题目,第一个想到的方法就是最传统的减3,商加1,判断余数,然后一直减、一直加,直到最后的余数小于3,这个方法最蠢最直观。先用这个方法实现一下。module divid( input clk, input rst_n, input [15:0] din, output reg [1:0] y_dout, output reg [15:0] s_dout);reg [15:0] temp_data;reg en

2020-08-11 10:43:03 1129 2

原创 数字IC手撕代码(六)

之前看到过一个题目是说让做一个序列发生器:产生序列信号11010111**第一种方法:**利用移位寄存器实现module seq_gen( input clk, input rst_n, output dout);reg [7:0] seq_out;always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin seq_out <= 8'b1101_0111; end else begin seq_out &

2020-08-10 16:34:53 933 2

原创 数字IC手撕代码(五)

之前在群里看到别人说这样一个题目:在一串8bit数据流中,求去掉最大数据和最小数据的和。module add_data( input clk, input rst_n, input [7:0] din, input din_vld, output reg [7:0] max_data, output reg [7:0] min_data, output reg [15:0] sum_data);reg [7:0] temp_data_max;reg [7:0] temp_data_m

2020-08-10 14:45:52 932 4

原创 数字IC面试手撕代码(四)

在某个群看到某个大佬,面试海康数字IC实习的时候让手撕代码。现在也把这个题目复现一下。题目正常情况下数据包由起始码(16bit)、数据段(n bytes n < 256 )、结束码(16bit)三部分组成。起始码为0xFF00、结束码为0xFF01。在一个完整的数据包中,数据段部分不会出现起始码和结束码。请设计一个电路在码流中检测完整且有效的数据包,并输出当前数据包的有效长度n。输入接口in:clk、rst_n、din[7:0]、din_vld输出接口out:data_cnt[7:0]、data_

2020-08-10 09:54:44 1991 1

原创 SRAM与DRAM之存储原理

      静态随机存储器(Static Random-Access Memory,SRAM)是随机存取存储器的一种。“静态”是指这种存储器只要保持通电,里面储存的数据就可以保持住。      SRAM的存储原理是靠双稳态电路存储器中最小的存储单元就是一个双稳态半导体电路或一个CMOS晶体管或磁性材料的存储单元,可以存储一个二进制代码。由若干个存储元组成一个存储单元,然后再由许多存储单元

2020-08-06 09:29:07 6159 1

原创 任意偶数长度Gray码序列及其在异步FIFO设计中的应用

任意偶数长度Gray码序列及其在异步FIFO设计中的应用任意偶数长度的Gray码序列,在异步FIFO设计中,只需要对控制逻辑做少量的改动即可得到任意偶数深度的异步FIFO。在保持性能不变的前提下,改进后的异步FIFO能明显减少电路面积。1、任意偶长度Gray码序列的存在性及构造方法(1)首先证明对于任意奇数N,不存在长度为N的Gray序列。不失一般性,假设存在任意长度为奇数N的Gray码序列,且以全0为起点。序列中N个编码映射到立方体的N个顶点;有Gray码的定义可知N个点之间可以建立一条哈密尔

2020-08-02 21:42:09 903

原创 21届联发科提前批面试(IC)

一面面试官上来就先让自我介绍,在介绍的时候顺便说了自己在研究生期间做过的比赛和项目。然后面试官就让说了其中最熟悉的项目介绍一遍。还让我把项目的框图发给他(或者画出来)。因为项目中涉及到了MPU(疯狂被问,但是不是自己做的,说的很差),但是好点的就是其他自己做的部分说的还行(能够自圆其说)。然后就是问了项目的性能指标。最后看我简历上写了uart、IIC、spi,问这些是自己实际工程中做过还是自己学的。我就说uart、spi是自己实际项目中用到的,大概就顺便把自己的另一个项目介绍了一下。问到我uart时候

2020-07-23 17:11:40 3843 6

原创 DDR3的配置及仿真教程

具体的DDR的内部工作情况以及一些情况,在之前的博客写过了。这系列博客主要是调用MIG(Memory Interface Solution) IP对DDR的控制使用,MIG由三部分组成User Interface Block 、Memory controller 和Physical Layer。IP的一边是连接DDR3的接口(Physical interface)。另一半是用户逻辑控制接口(User FPGA Logic)。想要正确的控制DDR3的读写,需要正确的设置MIG和正确的用户逻辑控制接口逻辑。

2020-07-20 21:41:22 7427 1

原创 数字集成电路静态时序分析基础(四)

on- chip Variations对于setup的path,让其变得更大。对于接收变得小。set_timing_derate -cell_delay -early 0.9set_timing_derate -cell_delay -late 1.0set_timing_derate -early 0.9set_timing_derate -late 1.2set_timing_derate -late 1.1 -cell_check考虑OCV会让时钟变得更严苛。公共

2020-07-19 11:20:27 898

原创 数字集成电路静态时序分析基础(三)

一、时序检查建立时间检查建立时间指的是采样的D触发器在时钟上升沿之前数据需要稳定的时间。reg-reg数据在传输的过程中延迟值必须小于建立时间卡的那个时间点。input to regcreat_clock -name VIRTUALCLK -period 10 -waveform {0 5}set_input_delay -clock VIRTUALCLK -max 2.55 [get_ports INA]reg to outputset_output_delay -clo

2020-07-19 09:53:25 1075

原创 数字集成电路静态时序分析基础(二)

一、静态时序分析的概述时序弧时序弧:用来描述两个节点延时信息的数据时序弧通常又分为连线的延时和单元的延时连线的延时指的是单元的输出端口和扇出的网络负载之间的延时信息。单元的延时指的是单元的输入端口到单元的输出端口的延迟信息。一条的完整的时序路径信息是由连线的延时加上单元的延时构成一个时序弧。信号翻转的时候要注意时间的点卡的位置逻辑的延时cell由输入端口都输出端口的延迟。建立时间:时钟上升沿之前数据要保持稳定不变的时间数据如果在建立时间之间进行变化,触发器就会亚稳态,通过建立时

2020-07-18 19:30:38 2992

原创 数字集成电路静态时序分析基础(一)

视频网址https://www.iccollege.cn/study/unit/2389.mooc一、 TCL语言入门置换TCL解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换。TCL的置换分为三类:(1)变量置换$(2)命令置换[](3)反斜杠置换\变量置换用$表示变量置换,TCL解释器会认为 $后面的为变量名,将变量置换置换成它的值。命令置换用[]表示命令置换,[]内是一个独立的TCL语句expr指的是求值。这条命令的意思就是给a变量赋值,结果就是3+4反斜杠

2020-07-17 09:09:09 1748

原创 数据流处理之乒乓操作

1.乒乓操作原理乒乓操作主要是用于数据流控制的处理技巧。外部输入数据流通过“输入数据选择控制器模块”送入两个数据缓冲区,数据缓冲区为存储模块。在第一个缓冲周期,将输入的数据流缓存到“数据缓冲1”模块,在第二个缓冲周期,“输入数据选择控制模块”将数据流缓存到“数据缓冲2”模块的同时,“输出数据选择控制模块”将“数据缓冲1”模块的第一个周期缓存的数据送到”后续处理”,模块进行后续的数据处理,在...

2020-07-16 16:20:37 2762 1

原创 分频器设计

一、偶数分频(等占空比)偶数分频:假设为N分频,由待分频的时钟触发计数器进行计数,计数器从0计数到N/2-1,输出时钟进行翻转并给计数器一个复位信号,使其从下一个时钟从零开始计数。依次循环。另外有一种方法适合对2^n分频。就是使用触发器进行分频,先利用第一个触发器的输出Q取反给输入D,这样完成2分频。然后将2分频后的时钟作为下一级触发器的时钟,用同样的方法完成4分频,依次类推,3个触发器完成8分频,4个触发器完成16分频…//8分频moudle fenpin_even( input clk,

2020-07-16 09:04:43 7019

原创 CMOS反相器之功耗分析

CMOS反相器的传播延时取决于它分别通过PMOS和NMOS管充电和放电负载电容CL所需要的时间。说明使CL尽可能小是实现高性能CMOS电路的关键。可以用以下方式减小一个门的传播延时:(1)减小CL:该负载电容由三个主要部分组成:门本身的内部扩散电容、互联线电容和扇出电容。(2)增加晶体管的W/L比(3)提高VDD反相器的延时只取决于它的外部负载电容与输入电容之间的比值。动态功耗由充放电电容引起的动态功耗当电容CL通过PMOS管充电时,它的电压从0v升至VDD,此时从电源吸取了一定数量的能量。

2020-07-15 15:16:58 10616 1

原创 专用集成电路设计实用教程(学习笔记二)

第五章 综合库和静态时序分析当DC映射线路图的时候,使用target_library变量指定的综合库(Synthesis Library,简称库)。综合库是由半导体厂商提供,包含工艺技术参数和单元的功能。DC使用库里的单元构成电路。综合库不仅包括单元的功能和延时,还包括了引脚的电容和设计规则等。5.1 综合库和设计规则综合时,DC要检查所构成的电路是否满足设计规则和其他约束的要求。5.1.1 综合库半导体厂商提供的综合库如下信息:(1)单元功能时间(包括时序器件的约束,如建立和保持时间)

2020-07-15 11:38:38 1500

原创 专用集成电路设计实用教程(学习笔记一)

第一章 集成电路设计概论IP模块包括软IP,固化IP和硬IP三种类型。其中软IP用HDL描述;固化IP用门级网表描述;硬IP是指实现到物理版图的硅块(Silicon Block)。1.2 集成电路系统的组成一个常见的集成电路系统,有如下模块:(1)数字电路模块(2)模拟电路模块(3)知识产权IP核(4)边界扫描模块(5)输入/输出PAD(6)内存数字电路大致可以分为数据通路(Data Path)和控制通路(Control Path)。数据通路主要指加减乘除的运算器。控制通路是控制管理数据

2020-07-14 18:20:43 5272 1

原创 笔试总结(七)

下面代码,b和c的值是多少?a = 10;b = a++;c = ++a;b=10,c=12。后置自增运算符仅在赋值后才进行自增,因此b得到的是自增前的值。前置增量运算符将首先进行自增,因此a将从11增加到12。根据输入的n计算斐波那契数列斐波那切数列是一种数列,每一项是通过将前两项相加得到的。从0和1开始,顺序为0,1,1,2,3,5,8,13…依次类推。通常,表达式为xn=xn-1 + xn-2。假设n的最大值为n=256,以下代码将生成第n个斐波拉契数。值n作为输入传递给模块。mod.

2020-07-13 17:42:53 2176

原创 vcs的一些简单使用教程命令

2020-07-11 09:21:52 658

原创 仲裁器

Round-Robin Arbiter思路思路源于网络,细致计算下来发现,这真的是一个万能公式。假设上一次的Arbiter结果为0000 0001,则下一次的结果应该为1~7位中的最低请求位。比如:以表格最后一行为例:请求A = 0000 0110,上一次的Round-Robin结果为 B = 0000 0001,需要求本次的Round-Robin结果C。计算过程解:A = 0000 0110 , B = 0000 0001AA = 0000 0110 0000 0110AA&

2020-07-06 15:14:22 5530 1

原创 时钟信号

1、同步电路与异步电路1.对于比较严格的定义:一个电路是同步电路,需要满足以下条件:(1)每一个电路元件是寄存器或者组合电路(2)至少有一个电路元件是寄存器(3)所有寄存器接收同一个时钟电路(4)若有环路,则环路至少包含一个寄存器2、对于不算很严格的同步电路定义有:(1)所有时钟的时钟来自同一个时钟源:比如下面的(分频电路)CLKA、CLKC、CLKD、CLKE都是由300M这个时钟源分频而来,因此这个系统属于同步电路系统。(2)当不是来自同一个时钟源时,只要CLOCK的周期有倍数关系并

2020-07-06 11:42:35 11187

转载 SOC电源管理系统

随着SOC越来越复杂,包含的IP越来越多,单个SOC上实现了CPU、射频模块、DDR控制模块、外设等等功能。各种功能,多种IP也带来了多档电源的需求。同时为了满足低功耗的要求,SOC通常被分为多个电源域,不同的电源域可以独立的上下电。为了满足SOC对电源的需求,SOC内部一般会集成一个专门的电源管理单元(Power Management Unit,PMU)。典型的SOC芯片供电系统和内部电源管理单元如下图所示:PMIC(Power management IC):电源管理集成电路,主要特点是高集成度,将

2020-07-05 14:46:29 2938

原创 CMOS级时序分析

1、COMS静态管简介金属-氧化物-半导体(Meatl-Oxide-Semiconductor)结构的晶体管简称MOS晶体管,有P型MOS管和N型MOS管之分。由MOS管构成的集成电路称MOS集成电路,而由PMOS管和NMOS管共同构成的互补型MOS集成电路即为CMOS-IC(Complementary MOS Integrated Circuit)。MOS管就相当于一个开关,如下图所示。NMOS需要输入高电压(逻辑1)才能导通,PMOS要输入低电压(逻辑0)才能导通。可以这样认为NMOS是“正开关

2020-07-05 11:52:20 2785

原创 跨时钟域之全面解析

跨时钟域(Clock Domain Crossing,CDC)信号处理问题,首先要考虑的就是亚稳态。1.亚稳态亚稳态是指在设计的正常运行过程中,信号在一定时间内不能到达稳定的0或者1的现象。在多时钟设计中,亚稳态是不可避免的,可以减少亚稳态的发生和传播,消除亚稳态的有害影响。上图中在信号adat传输到bclk中采样,由于采样时间靠近第二个时钟的上升沿,发生同步失败。同步失败是由于输处bdat变为亚稳态,而在bdat再次被采样时没有收敛到合法的稳定状态。为什么会产生亚稳态?存储元件,如交叉耦合反

2020-07-04 17:33:47 18974 6

原创 21届中兴IC提前批面经

面试过程中,面试官是两个,上来就说让简单自我介绍下,从本科开始。我就巴拉介绍了下。然后让说下,都做过哪些项目,我就说了自己做的几个,都只是简单说了下。然后让讲一下自己最熟悉的,重点来了一定要把项目看透彻,框架弄懂,最好仔细提前写个文档,整理好语句多看几遍自己就比较大意,然后感觉说的不是很好,逻辑性不好。然后面试官问,项目过程中遇到什么问题,最好怎么解决的。然后还有就是一点简单的STA。最好就是看简历上面写了解AXI,问了下这个,这个说的比较扯,因为自己还只是想学,只了解一点。最后面试官问用过哪些EDA工

2020-07-03 15:50:36 1659 1

原创 蒙哥马利模乘

Montgomery乘法的数学表达式是A * B * R ^ (-1)mod M。A、B是同位长大数,R是2的M(位长)的次方,R ^ (-1)是指R相对于M的模逆,即R ^ (-1)满足以下条件的数:R * R ^ (-1) mod M = 1;这个条件成立的充要条件是R与M互素,这一点只需要M为奇数即可。使用蒙哥马利乘法可以做大量的并行运算,而A * B mod M则必须先将A * B 计算出来再计算除法。所以当使用硬件实现蒙哥马利乘法会有很高的效率。如何使用A * B * R ^ (-1) mod

2020-06-30 18:02:54 4962

原创 数字IC面试手撕代码(三)

输入in,输出out,对输入in维持的周期进行计数N;如果N<4,则out为0,如果N>4,则将out拉高,并保持N/4个周期数。使用状态机:c_state == 0 : IDLEc_state 1 : 计数c_state2:计算out高电平持续时间c_state==3:拉高out对于这个题目我有点疑惑的就是in的维持时间会不会累加(就是持续一段时间高,又一会低,再继续高),还有个疑惑是N/4这应该是取整吧。如果不是取整,我觉得就有点难了,涉及到分数了。module c_j (

2020-06-29 19:37:14 1296 3

原创 数字IC面试手撕代码(二)

1、如何将单bit信号完成从快时钟域到慢时钟域的传输?这个题目是比较常见的,我知道的一般处理方法有两种:一是:脉冲扩展(一般扩展到慢时钟域的1.5倍脉冲宽度左右),另一种是:进行握手信号处理。进行握手信号处理的时候由简到繁又分为以下几种情况:(1)只考虑单比特信号的跨时钟域module handshake_pulse_sync( input src_clk, input src_rst_n, input src_pulse, input dst_clk, input dst_rst_n

2020-06-29 17:34:20 2476 5

原创 数字IC面试手撕代码(一)

1、最近看别人有面试说遇到这样一个问题。用状态机实现类似序列检测的题目:生成01011011101111…依次类推。针对这个问题,我设计如下的三段式状态机代码,用了4个状态,2个计数器。设计之初,本来是没有START这个状态的,在第三段时候,用c_state作为判断量。但是会出现011011101111…这样的情况,而且done信号是不符合自己设计之初的思路。所以改成用n_state去做判断量,但是又会由于IDLE不会进入,导致出错,所以加了一个START,即赋初值的状态。module data( i

2020-06-28 15:33:56 4101 10

原创 乘法器

一、乘累加乘法器对于n比特数,其二进制数转换为有符号十进制数的公式如下:当B>=0,B的第n-1比特为0,则B可用下式表示:设n=4,“5”的二进制为0101,则5=1 * 4 + 1 * 1当B<0时,B的第n-1bit为1,B已为补码表示。所以-|B|表示如下:综上所述,有符号数与无符号数与十进制的转换表示可统一为如下格式:对于正数或0,Bn-1=0;对于负数,Bn-1=1对于n比特无符号数:最小数是: 0最大数是2^n - 1对于n比特有符号数:最小数:-

2020-06-25 21:45:53 6592 3

转载 减法器

减法器可以由基础的半减器和全减器模块组成,或者基于加法器和控制信号搭建。定义Nbit被减数x,减数Y,差为D(difference);来自低bit的借位Bi,想高bit借位Bi+1,i为bit序号。一、半减器半减器用于计算两bitXi和Yi的减法,输出结果Di和向高位的借位Bo(Borrow output)。其真值表、逻辑表达式、verilog描述和门电路图如下:module half_sub( input xi, input yi, output di, output bi);

2020-06-23 14:01:15 14574 1

转载 加法器的设计

一、半加器半加器是用于计算2个一个bit的二进制数a与b的和,输出结果是sum(s)和进位carry(c)。在多bit数的计算中,进位c将作为下一相邻bit的加法运算中。单个半加器的计算结果是2c+s。真值表:逻辑表达式:Verilog描述为:module half_adder( input a, input b, output c, output s);assign c = a&b;assign s = a^b;endmodule电路图如下:二、全加器全加器

2020-06-23 13:06:41 9485 1

原创 实现FPGA与ESP8266的连接与调试

1、在调试之前先要通过串口调试助手与网络调试助手对ESP8266进行配置,但是根据AT指令集对其进行配置调试的时候,发现串口调试助手传输不了配置的指令集。对此,选择对ESP8266先进行固件烧入。再将上述的ESP8266模块和USB转串口模块相互连接,进行烧录固件。注意 VCC接USB转串口上的3.3v,将IO_0接地,将RST也要连接,在烧录过程中,将RST接地复位一下,然后断开,这样才能烧录成功。(具体也可能不需要复位也可以烧入成功)。在烧入成功后就可以通过串口调试助手对ESP8266进行配置

2020-06-22 15:05:17 4132 5

原创 低功耗设计

COMS电路中功耗分为两部分:静态功耗和动态功耗。静态功耗是漏电流引起的功耗;动态功耗分为翻转功耗和短路功耗,翻转功耗也就是0与1翻转所引发的功耗,而短路功耗则是由于PMOS和NMOS都导通时所引起的功耗。低功耗设计方法对于系统是在低功耗下提高性能,还是高性能下降低功耗,这对采样什么样的低功耗技术很关键。下图是基于低功耗反馈的前向设计法,如图,可以看出五个层次下对系统的功耗进行优化,自顶向下分别对应系统级、行为级、RTL级、逻辑级和物理级。下图说明了各层次的具体优化方法和优化效果,可以看到层次

2020-06-19 14:46:23 6014

原创 数字IC笔试/面试题

1、什么是同步逻辑和异步逻辑?同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。同步时序逻辑的特点:各触发器的时钟端全部连接在一起,并接在系统的时钟端,只有当时钟脉冲到来时,电路的状态才能改变。改变后的状态将一直保持到下一个时钟脉冲的到来,此时无论外部输入x有无变化,状态表中的每个状态都是稳定的。异步时序逻辑电路的特点:电路中除可以使用带时钟的触发器外,还可以使用不带时钟的触发器和延迟元件作为存储元件,电路中没有统一的时钟,电路状态的改变由外部输入的变化直接引起。2、同步电

2020-06-19 09:08:44 20075

原创 CRC冗余校验简介

简介在数据通信中,接收端通常需要检测传输过程中是否发生差错,常用的方法包括: 奇偶校验(Parity Check)、校验和(Check Sum)和CRC(Cyclic Redundancy Check) 等。相应的检测方式是:①发送端按照某种算法对发送消息进行计算,得到校验码,然后将校验码和消息码一起发生到接收端;②接收端对接收到的消息按照相同算法计算,得到本地校验码;③将本地校验码与接收到校验码进行比较,如果两者一致,则证明接受到的消息是正确的,否则则存在传输错误。奇偶校验通过计算传输数据二进制表

2020-06-13 09:55:28 798

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除