vivoy55手撕vivoy55忘记开机密码怎么办码

1.1 锁存器触发器结构

③Q为现在的状态,Q*为下一个状态,Q’为Q反

触发器与锁存器的不同在于,它除了置1置0输人端以外,又加了一个触发信号输入,只有当触发信号到来时,触发器才能按照输人的置1、置0信号置成相应的状态,并保持下去,我们将这个触发信号称为时钟信号,记作CLK。

下面讲讲触发器的几种类型:

  • 建立时间:指输入信号应当先于时钟信号clk到达的时间

在D触发器中,为了保证触发器有效的翻转,在clk改变前FF1中的Q1的状态必须稳定的建立起来,使得Q1 = D;而这个先来的时间就叫做建立时间;至少 tsu = 2 td 。

  • td为触发器的电路延迟时间;
  • 保持时间是指时钟信号clk到达以后,输入信号需要保持不变的时间;至少 th = 2 td
  • 传输延迟时间是指从clk动作沿开始,直到输出新状态稳定建立做需要的时间;至少 tpd = 5td
  • STA——静态时序分析

    ①和建立时间不一样的是,在采集数据时,是以同一时钟触发来采数据的,因此路径上的延时只有Tco 以及Tcmb
    ②那么对于保持时间来说,路径上的延时是越迟越好的,因此有:
    ③当存在时钟偏移Tskew时,考虑悲观的情况,时钟偏移让我的延时减少,有:
  • 时钟树综合:目的就是为了优化Tskew,使得距离较远的两个DFF之间的Tskew做到很小
  • cell延时:信号从低电平(10%)到高电平(90%)转换所要的时间
  • wire延时:金属连线的延时跟单位长度的寄生电容和寄生电阻成正比,布局布线后,要是一根连线很长,延时很大,可以通过插入多个buff来降低单位长度的寄生电容和寄生电阻,从而减小延时
  • 时序违例怎么办?时序违例可以分为两种情况,分别为建立时间违例和保持时间违例
    ①对于建立时间违例,可以采用以下方法:
    1)降低频率,但是频率一般不允许有太大的改动
    2)工艺升级,cell延时会变小
    3)从组合逻辑延时下手,可以采用流水线(pipline)、优化电路设计
    4)调整Tskew,使得Tskew对建立时间有利
    5)mos管阈值越小,其延时越小,因此可以在关键路径采用阈值小的单元

②对于保持时间违例,可以采用以下方法:
1)插buffer,使得组合逻辑延时增大
2)调整Tskew,使得其对保持时间是有利的

  • 同步时钟域是指时钟频率和相位具有一定关系的时钟域,并非一定只有频率和相位相同的时钟才是同步时钟域
  • 异步时钟域的两个时钟则没有任何关系

单bit传输时,同步时钟域因为频率和相位关系都是已知的,可以推导,所以不需要采用额外的硬件电路就可以解决CDC问题,只需要源数据在clk1端保持足够长时间即可。

让其保持足够长时间有两个好处:即便出现亚稳态,也可以在两个clk2时钟周期后数据变得稳定下来,从而采到正确的结果;还可以防止低频采高频时,因为频率跟不上而导致数据丢失。

单bit传输时,异步时钟域的传输就必须使用额外的电路模块(同步器)来保证数据正确的传输。最基本的同步器是双锁存结构的电平同步器,其余的同步器都是由其衍生而来。该同步器的基本原理,也是让数据至少在clk2的时钟下保存两个周期,消除亚稳态。当然同步器能解决异步时钟域的同步问题,自然也可以拿来解决同步时钟域的问题,毕竟同步时钟域更简单一些。

实际的电路设计中,不用管那么多细节,不管是同步时钟域还是异步时钟域,只要是不同的时钟之间传数据,就加上同步器的结构,这当然是一种偷懒的解决办法。脉冲同步器就是这么一种万能的结构,对于单bit跨时钟域传输而言,使用脉冲同步器就够了,不需要区分时钟有没有关系,也不需要区分是高频采低频还是低频采高频,毕竟也很少有人能掌握这么全的细节

对于多bit传输,不能采用单bit传输的方法。原因在于,单bit传输时,不能确定该数据到底经过1个clk2时钟周期之后有效还是两个clk2时钟周期之后才有效。所以对多个bit各自采用单bit的同步机制,会导致输出一些错误的中间状态。对于多bit传输,可以使用握手信号或者异步fifo

异步fifo这里不做多少,手撕代码的时候自然见分晓

握手:保持寄存器+握手信号,也就是先异步暂存,后同步写入。所谓握手,就是通信双方使用了专门控制信号进行状态指示,这些控制信号是双向的。(在边缘检测的综合项目中有用到,用于数据对齐)

多路选择器+触发器实现,MUX相当于触发器的使能信号,当两个时钟域同步时,打开使能接收数据

1.5 亚稳态怎么解决

  • 指触发器无法在某个规定时间段内达到一个可确认的状态,这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去
  • 以上所造成的根本的问题就是触发器的建立保持时间不满足
  • ①首先就是做好CDC,具体可以看上面的CDC章节
    ②使用采样更快的触发器
  • 基于CMOS管的低功耗分析

  • 首先功耗来源于两个大部分:动态和静态

  • 动态:又分为开关功耗和短路功耗

  • 开关功耗:我们知道电容是会被电源充放电的,所以在翻转的过程中会有负载电容充电的功耗,叫做开关功耗

  • 短路功耗:在翻转的过程中,存在一段很短的时间t,使得CMOS正负导通,形成电流,叫做短路功耗,这也就是为什么沿变得快的时钟可以降低功耗的道理

  • 而静态功耗则是MOS管上的漏电功耗,相对于动态功耗来说差了几个数量级

  • ①clock gating 门控时钟 ,在时钟端加一个使能
    ③再非关键的路径用HVT,高阈值电压,使得漏电流更小(这个可以在时序要求比较宽松的时候用)
    ④DVFS,动态电压频率调节

  • 竞争: 两个输入信号同时向相反逻辑电平跳变。通俗的说,就是两个输入,一个从1变0,同时另一个从0变1。
  • 竞争-冒险:由于竞争在电路输出端可能产生尖峰脉冲的现象。
  • 判断准则:只要输出端的逻辑函数在一定条件下能简化成Y=A+A’或Y=A·A’则可判定存在竞争-冒险现象

注意:有竞争不一定产生尖峰脉冲,只有在存在不同步的跳变时,某输入先跳变而另一输入还未跳变时产生尖峰脉冲。

    ①滤波电容:因为尖峰脉冲很窄,用很小的电容就能削弱尖峰到Vth一下,但由于电容会增加电压波形的上升时间和下降时间,会破坏原有波形。
    ②引入选通脉冲:利用选通脉冲,在电路达到稳定后,P的高电平期间的输出信号不会出现尖峰。(就是再加一个区别信号来防止尖峰出现)
    ③修改逻辑设计:防止Y=A+A’或Y=A·A’的出现(并不是万能的,办法有限,但效果很好)
  • 毛刺就是上面我们说的竞争冒险所产生的尖峰脉冲
  • FPGA器件内部,信号通过连线和逻辑单元时,都有一定的延时,延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响
  • 信号的高低电平转换也需要一定的过渡时间,由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为"毛刺"
  • 具体的去毛刺电路可以看手撕代码2.8的题目
  • RTL代码设计:寄存器级描述
  • 功能验证:也叫动态仿真,如用Modelsim / VCS对设计的模块进行验证
  • 逻辑综合:也叫DC,作用是得到综合后的门级网表Netlist
  • STA:静态时序分析,若满足约束,得到最终的Netlist
  • 形式验证:也叫静态验证,保证在逻辑综合过程中没有改变原先RTL电路功能
  • DFT:可测性设计,测试芯片制作有无缺陷,一般是在电路中插入扫描链

1.10 补码、原码、反码

  • 原码 :最高位符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制
  • 反码:正数的反码与原码一致,负数的反码是对原码按位取反,而最高位(符号位)不变
  • 补码:正数的补码与原码一致,负数的补码是该数的反码加1

注意:符号位是不用变的

1.11 格雷码、独热码

  • 格雷码:在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码

  • 独热码:独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效
    如3状态的状态机采用的独热码:

  • 格雷码的优缺:格雷码属于可靠性编码,是一种错误最小化的编码方式;比如十进制的3转换到4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在任意两个相邻的数之间转换时,只有一个数位发生变化;但是格雷码编码使用最少的触发器,消耗较多的组合逻辑

  • 独热码的优缺:独热码编码的最大优势在于状态比较时仅仅需要比较一个位,从而一定程度上简化了译码逻辑;虽然在需要表示同样的状态数时,独热编码占用较多的位,也就是消耗较多的触发器,但这些额外触发器占用的面积可与译码电路省下来的面积相抵消,也就是说组合逻辑用的少了,但是触发器用的多了

  • 格雷码与二进制码的转化
    ①二进制转格雷码:二进制码整体右移一位,然后与二进制码本身进行异或,得到该二进制码对应的格雷码

②格雷码转二进制:最高位相同,二进制码的最高位与格雷码的次高位相异或

  • 一切fifo的深度问题都归咎于一点:最坏条件下所需要存储的数据量
  • 相当于一边发数据,一边收数据,其中有速度差(发 > 收),为了使得数据不丢失则需要引入缓冲器对还没来得及收的数据进行缓存
  • 那么缓存器需要存几个数据就是其深度
  • 就相当于一个水池一边进水一边放水,进水速度快的时候,需要多高的池子才能保证水不会溢出

1.13 二进制小数转换

  • 10进制数101.25,转换为2进制数为?

101转成二进制就不用多说了,短除法,度数从下往上读,看下图:非小数部分则为1100101
而小数部分则是 x2 取整处理,然后小数部分继续x2

  • 上面的题反过来呢?怎么用二进制小数化成10进制?
    -1次方、-2次方的形式

1.14 操作符优先级

  • 两级寄存器之间有复杂的组合逻辑,导致此处的组合逻辑延迟可能超过一个时钟周期
  • 按照两级寄存器的时序分析原理,这里一定会报时序错误
  • 但是有时候我们采集此信号未必需要在发射沿的下一个时钟周期采样,我们可能需要经过多个时钟周期采集数据,这就是multicycle
  • define定义的变量,写在模块名称上面,在整个设计工程都有效,可以跨模块的定义
  • 先讲一下我们需要例化的ram模块
    ①读端:时钟、使能、地址、数据 经典四要素
    ②写端:时钟、使能、地址、数据 经典四要素
    ④意思是生成WIDTH宽度数据的存储单元DEPTH个
    ⑤打个比方reg [7:0] RAM_MEM [0:15]; 表示生成8位宽度数据的存储单元16个,而16就是我们所说的深度
    ⑥这个模块的作用就是给数据和地址就能进行读和写的操作
  • 接着就是异步fifo模块

  • 在其中例化了存储单元ram模块之后,我们还要在内部定义地址,而地址分为:

  • 由fifo的空满决定读写使能
    ①读空判断:读地址和写地址一样时,则为读空
    ②写满判断:因为扩展了一位,所以最高位为1时表示读写地址刚好相差一圈,这时就是写满的时候;见下表,假设深度为8,那么扩展后是4位;从data1再次写到data1时,则为写满,从data2再次写到data2时,也为写满,以此类推;很明显写满的时候,最高位相反,其他位一样,也就是上面说的正好相差一圈,用代码表示就是:

  • 总结:fifo的设计要点就是 存数据的ram + 格雷码打两拍跨时钟 + fifo的空满判断

  • 同步fifo比异步fifo简单,不需要进行跨时钟的处理,直接存数据的ram + fifo的空满判断即可
  • 空满判断需要我们自己来定义地址,详细可见上面的异步fifo,在掌握了异步fifo后同步的就是小菜一碟

2.3 除法器(小米)

  • 这种方法要自己慢慢推算二进制除法
  • temp_a 要延展的位数为c的宽度,因为c就是商且在temp_a 的低16

实现4bit无符号数流水线乘法器设计

  • 思路:将乘法转化为加法
  • 当位数更多的时候,考虑使用generate产生LV信号
  • 由全加器例化4个模块得来
  • 监沿器用来鉴定上升沿或下降沿
  • 具体实现:前一刻时钟与现时刻时钟比较
  • 信号经打一拍处理后存为前一刻信号,即比原信号慢了一个时钟的信号,因此可以根据两者的比较检测出上升沿或者下降沿。当现时刻为1,前时刻为0时,说明从上个时钟的0,变为这个时钟的1,判断出上升沿,同理可以判断出下降沿。具体代码如下:
  • 按键按下的时候会有10ms左右的抖动,因此按键按下的时候需要做输入消抖处理

2.8 去毛刺(大疆)

设计一个电路,使用时序逻辑对一个单bit信号进行毛刺滤除操作,高电平或者低电平宽带小于4个时钟周期的为毛刺

  • 目的:将高低电平时间小于4T的信号滤除
  • 思路:边沿检测加上计数器,上升或者下降沿一旦检测到,计数器清零并开始计数,若是计数到3则为有效信号并停止计数,否则是无效信号

写一个十六进制计数器模块,计数器输出信号递增每次到达0,给出指示信号zero,当置位信号set 有效时,将当前输出置为输入的数值set_num

  • 注意zero和number数据对齐,这里先缓存计数值,再用计数值判断并输出zero和number


②这个电路中存在一个致命的问题,就是切换时存在毛刺,时序如下图:


  • 移位寄存器经常用在并串转换中,可以参考2.14的序列检查
  • 奇数分频比偶数分频要复杂一点,奇数分频的翻转点在0.5个时钟处,上升沿并不能检测到此处,因此我们需要用到上升沿计数以及下降沿计数;

  • 一个时钟,然后两个计数器分别采样上升沿和下降沿,然后利用偶数分频的办法,得到两个中间时钟,这两个时钟周期为2N+1,N个周期的高电平,N+1个周期的低电平,然后利用两个中间时钟进行相或操作得到奇数分频

  • 做法:对于一个2N+1分频,用两个计数器分别采样上升沿和下降沿个数,计数到2N+1(代码中是2N,因为计算机从0开始数),用两个计数器产生两个时钟,在N+1和2N+1计数处翻转,得到的两个时钟相或,得出2N+1分频时钟

  • 偶数分频,是最简单的分频。举个例子,以100分频为例,我们需要用100个原始的时钟周期T,作为我们分频后新的时钟周期T1,也就是T1 =
    100T;那么时钟的占空比都是50%,所以很明显,在50T的时候翻转时钟就行;
  • 利用计数器可以对原始时钟的周期个数的进行计数,在计数到50T,也就是49的时候,新时钟进行反转,得到100分频时钟;
  • 进而得到规律:实现N分频(N为偶数),只需要在计数到N/2-1时翻转新的时钟信号即可;
  • 下面是一个10分频的代码,因此计数到4时时钟翻转:

设计一个序列检测器,将码流中的“10010”序列检测出来:

①三个输入,clk,rst_n,x,其中x是一位的输入,由x传输的多个数据构成码流

②输出z,在检测到完整的10010序列时,z拉高

用移位寄存器的方法比状态机的方法代码要轻简很多,先说一下原理:

对1bit的脉冲信号进行展宽,转为32bit位宽,并产生有效信号

  • 首先题目什么意思呢?就是说给你1T周期宽度的脉冲信号,要你做成32T的宽度,并带上有效信号输出
  • 思路:监沿器鉴定脉冲下降沿,输出有效信号;用计数器将1T延迟到32T
  • T触发器的公式是Q* = TQ’ + T’Q ,相当于一个异或运算
  • 所以采用两级tff即可

对输入的32位数据进行奇偶校验,根据sel输出校验结果,0输出奇校验,1输出偶校验

  • 首先你要明白奇偶校验的原理:通过在编码中增加一位校验位来使编码中1的个数为奇数或者偶数
  • 那么我们怎么求奇偶校验位呢? 答案是异或
    举个栗子,码流101 ,奇校验位是1,偶校验位是0 ,数据直接异或的结果是0,刚好是偶校验,那么这时奇校验取反就行

已知d为一个8位数,在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号表示此时刻输入d有效

  • 关键在于什么时候读进来数据
  • 什么时候进行什么样的计算
  • 那么引入一个计数器就可以完美解决,图中一共4周期一个循环,第一个周期上升沿取得数据,那么数据在第二个周期有效,第2-4周期可以直接用第一周期取到的进行计算
  • 移位不消耗乘法除法器的那么多资源

用generata…for语句编写代码,替代下面语句,

  • 先定义生成块的变量genvar i ,声明的此变量i只用于生成块的循环计算,在电路里面并不存在

2.20 子模块法做大小比较

编写一个子模块,将输入两个8bit位宽的变量a,b,并输出ab之中较小的数;并在主模块中例化,实现输出三个8bit输入信号的最小值的功能

  • 再在top上例化3个子模块进行比较即可

用函数实现一个4bit数据大小端转换的功能。实现对两个不同的输入分别转换并输出。
程序的接口信号图如下:

  • 所谓的大小端转换就是高低位互换

2.22 超前进位加法算法的实现

根据该功能表,用Verilog实现该优先编码器

2.25 脉冲同步(大疆)

signal_a是clka(300M)时钟域的一个单时钟脉冲信号,如何将其同步到时钟域clkb(100M)中,并产生出signal_b同步脉冲信号。请用Verilog代码描述,并画出对应的时序波形图说明图

  • 像这种单bit信号的跨时钟,我们立马想到打两拍处理,但是这里明显不行
  • 因为clka快时钟域发送的信号signal_a,慢时钟域的时钟clkb根本采集不到
  • 思路:在clka时钟域将singal_a脉冲展宽为3个周期,再在clkb时钟域进行边沿检测
  • 在vcs上的仿真如下:

2.26 读状态转移表

实现下图的状态转换并输出

  • 状态一共有两位,而转态跳转由A来决定
  • 输出Y只有在11状态才输出1,其他为0

实现一个深度为8,位宽为4bit的ROM,数据初始化为0,2,4,6,8,10,12,14。可以通过输入地址addr,输出相应的数据data

  • 然后根据地址给输出就行

请描述如下代码,实现加法;
保证正确得到一个不溢出的有符号数C;

  • 明确一点:只要参与运算的式子里,有一个数是无符号的,整个式子就会按照无符号计算
  • 所以,需要对A做强制转换,而C的位数最高到22bit,符号位再加1bit所以是23bit

编写一个信号发生器模块,根据波形选择信号wave_choise发出相应的波形:wave_choice=0时,发出方波信号;

2.30 自动贩卖机(经典)

设计一个自动贩售机,输入货币有三种,为0.5/1/2元,饮料价格是1.5元,要求进行找零

  • 这里注意out1和out是在不同的时钟上升沿触发的,并不是同一时钟,我在做这题的时候没仔细看被坑了

2.31 格雷码计数器

实现一个4位的格雷码计数器

  • 思路:将格雷码转成二进制再加1,再转成格雷码输出

将A时钟下的多bit数据同步到B时钟下,已知data_in端数据变化频率很低,相邻两个数据间的变化,至少间隔10个B时钟周期

  • 数据变化的很慢,也就是说传输的速率不高,而且还间隔10个B时钟周期才变化,这说明我们有足够的时间来把A时钟的使能信号同步到B时钟来,数据也不会因为采漏而丢失
  • 思路:输入的数据先通过B时钟打一拍寄存起来,再等待A的使能同步完成,进行数据同步

数据发送模块循环发送0-7,在每个数据传输完成之后,间隔5个时钟,发送下一个数据。请在两个模块之间添加必要的握手信号,保证数据传输不丢失

  • 握手可以用在跨时钟传输上
  • 握手信号就是加入一些指示信号,在两个模块间确认数据已经被接受之后再进行下一个数据的传输
  • ①对于发送模块:每五个时钟发一个req和data,收到返回的ack命令后,req拉低等待5个时钟重新发送,data+1也等待再次发送
    ②而对于接收模块:成功收到数据后输出ack信号
    ③当然不同时钟需要进行cdc处理

3.1 最小最大项及卡诺图

  • N个乘积项的表达(与项),如两变量AB的最小项为A’B’、A’B,、AB’、AB

    ①在输入变量任一取值下,有且仅有一个最小项的值为1; ②全体最小项之和为1 ; ③任何两个最小项之积为0 ; ④两个相邻的最小项之和可以合并,消去一对因子,只留下公共因子;(卡诺图重要原理) 相邻:仅一个因子不同的最小项,如:A'BC'与A'BC;
  • N个项和的表达(或项),如两变量AB的最大项为A’+B’、A’+B,、A+B’、A+B

    ①在输入变量任一取值下,有且仅有一个最大项的值为0 ; ②全体最大项之积为0 ; ③任何两个最大项之和为1 ; ④两个相邻的最大项之积可以合并,消去一对因子,只留下公共因子。
  •  ①将函数化为最小项之和的形式
     ②画出卡诺图(00、01、11、10 格雷码),在最小项位置填1
    


总的就是说:在DS两极加电压,DS不导通;在GS加电压,DS间形成沟道使得DS导通
①当Vgs < Vgs(th) 时,也就是小于启动电压时,这部分区域成为截至区
②当Vgs > Vgs(th) 时,如上图所示,虚线左边成为可变电阻区,其等效电阻的大小与Vgs有关
③虚线右边是恒流区,此时电流基本上由Vgs决定

    ①静态功耗:是指电路输出没有状态转换时的功耗
    静态时,CMOS电路的电流非常小,使得静态功耗非常低。CMOS反相器在静态时,P、N管只有一个导通。由于没有Vdd到GND的直流通路,所以CMOS的静态功耗应该等于零。但实际上,由于扩散区和衬底的PN结上存在反向漏电流,所以会产生静态功耗。
    ②CMOS电路在输出发生状态转换时的功耗称为动态功耗
    主要由两部分组成。一部分是电路输出状态转换瞬间MOS管的导通功耗。当输出电压由高到低或由低到高变化过程中,在短时间内,NMOS管和PMOS管均导通,从而导致有较大的电流从电源经导通的NMOS管和PMOS管流入地。
    动态功耗的另一部分是因为CMOS管的负载通常是电容性的,当输出由高电平到低电平,或者由低电平到高电平转换时,会对电容进行充、放电,这一过程将增加电路的损耗。

前面1.1已经说过了,这里不在阐述

  • 多谐振荡电路是一种自激振荡电路
  • 在接通电源以后,不需要外加触发信号,便能自动地产生矩形脉冲
  • 由于矩形波中含有丰富的高次谐波分量,习惯上又将矩形波振荡电路称为多谐振荡电路

①对称式多谐振荡器:两个反相器与两个电容耦合起来的正反馈振荡电路。

②非对称式多谐振荡器:在对称式的基础上简化。

③施密特多谐振荡器:用施密特触发电路的反相输出经RC积分接回输入。

④环形振荡器:利用延迟负反馈产生振荡。

⑤石英晶体多谐振荡器:石英晶体 + 对称式(接入石英晶体稳频)

单稳态电路中的工作特性具有下的显著特点:

  • 第一,它有稳态和暂稳态两个不同的工作状态
  • 第二,在外界触发脉冲作用下,能从稳态翻转到暂稳态,在暂稳态维持一段时间以后,再自动返回稳态
  • 第三,暂稳态维持时间的长短取决于电路本身的参数,与触发脉冲的宽幅度无关

例子: 声控灯,灭的时候是稳态、而亮则是暂稳态


②当vi接脉冲时,在cd和rd之间会产生窄脉冲vd,当vd = vth后,发生如下正反馈
④由于电容电压不会发生迅速的跳变,因此进入暂稳态
⑤当vdd给电容充电完毕后,又进入稳态

  • 单稳态有两种类型的电路:
    ①微分型:可以用窄脉冲触发、输出脉冲下降沿较差
    ②积分型:抗干扰能力强、输出边沿比较差

3.7 施密特触发电路

①输入信号在上升和下降过程中,电路状态转换的输入电平不同

②电路状态转换时有正反馈过程,使输出波形边沿变陡

②而vi从0升到vth,CMOS管G1导通,引起如下正反馈
③此时vo迅速上高到vdd,而此时vi的值就是我们所说的vt+
④同理vi从vdd下降到vt-,vo从voh变成vol,也是正反馈过程

  • 线与说白了就是物理上连接、电器上选择连接
  • 线与在ttl管中是通过两个OC与非门(集电极开路门)来实现的
  • 线与在mos管中是通过两个OD与非门(漏级开路门)来实现的
  • 他们大致的图都如下所示,只有当Y1Y2都是1,Y才输出1
    那么为什么需要用OD/OC门来做线与呢?可以看看OD门的特点:
    ①可以利用外部电路的驱动能力,减少IC内部的驱动,或者驱动比芯片电源电压高的负载
    ②可以将多个开漏输出的Pin,连接到一条线上,这也就是一些总线的占用原理
    ③可以利用改变上拉电源的电压,改变传输电平;如加上上拉电阻就可以提供TTL/CMOS电平输出
    ④正常的CMOS输出级是上、下两个管子,把上面的管子去掉就是OPEN-DRAIN(OD)
    ⑤缺点:OD门提供了灵活的输出方式,但也带来了上升沿的延时
  • Bi-CMOS技术是一种将CMOS器件和双极型器件集成在同一芯片上的技术
  • 双极型(ttl)器件速度高,驱动能力强,模拟精度高,但是功耗大,集成度低,无法在超大规模集成电路中实现
  • CMOS器件功耗低,集成度高,抗干扰能力强,但是速度低、驱动能力差
  • Bi-CMOS技术综合了双极型器件高跨导和强负载驱动能力及CMOS器件高集成度和低功耗的优点,取长补短,发挥各自优点,是高速、高集成度、高性能超大规模集成电路又一可取的技术路线。目前,在某些专用集成电路和高速SRAM产品中已经使用了Bi-CMOS工艺技术
  • Bi-CMOS技术可能不会成为主流的微电子工艺技术,但是在高性能数字与模拟集成电路领域,这种技术将是一种强有力的解决方案之一
  • 高速缓冲存储器 :一种特殊的存储器子系统
  • 其中复制了频繁使用的数据以利于快速访问
  • 存储器的高速缓冲存储器存储了频繁访问的 RAM 位置的内容及这些数据项的存储地址
  • 当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址,如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问
  • 主存和Cache主要有三种地址映射方式,分别为全相联映射、直接相联映射和组相联映射

4.1 晶体管用于放大作用,工作在什么区?

4.2 CMOS管用于开关作用,工作在什么区?

单个MOS管时,看下图;
输入为低电平时,MOS管处于截止区,输出高电平1;
输入为高电平时,MOS管导通(个人觉得时工作在可变电阻区),输出低电平0
当为CMOS管时,看下图;
无论输入是高电平还是低电平,两个MOS管总是一个截至一个导通,即为所谓的互补关系;
而CMOS中的C就是互补的意思;

4.3 设计一个序列发生器,以CLK为控制信号,输出序列为

4.4 共阳数码管(如图示)的显示译码器,当输入A3A2A1A0为0101时,输出为多少

输入为0101即要显示数字5,因此afgcd亮灯,置0,其他置1 ,所以输出是0100100

4.5 5个具有计数功能的T触发器链接,输入脉冲频率为256KHZ, 则此计数器最高位触发器的输出脉冲频率为多少

每输入一个时钟脉冲,触发器状态便翻转一次,实现一次分频,因此5个就是除以 2^5,最后为8KHZ

4.6 什么是BCD码计数器?在4个触发器构成的 8421BCD码计数器中,具有几个无关状态?

BCD码就是用4位二进制数来表示1位十进制数中的0~9这10个数码,因此BCD码计数器就是0-9的计数器,4位触发器共有16种状态,所以多出了6种无关状态

4.7 若传感器的输出分辨率为1mV,ADC的电源为5V,基准电压为2.5V,为保证ADC的采样精度,ADC的位数至少为多少?

传感器的输出电压为模拟信号,它作为ADC的输入信号,其分辨率为1mV,为保证ADC采样精度,n位ADC可以分辨的最小模拟电压就是1mV;分辨率的公式如下,Vref是基准电压2.5
所以算的n最小为12位

4.8 分析下图所示电路,设各触发器初始状态为0,算出Q2n+1的方程


4.9 测量高压电路电流时,应将电流表接到接近哪一端?

处于零电位一端,电流表上承受的共模电压小。

4.10 对一个异步fifo,列出你能想到的所有测试点?

对着信号一个一个列出来感觉不会有什么问题

  • 写端口时序行为与描述一致,检查数据在wr被采样时刻正确写入
  • 读端口时序行为与描述一致,检查数据在rd被采样时刻正确读出
  • 写满读空之后是否有做读写保护防止数据覆盖
  • 写满读空之后是否有做读写保护防止空满信号错乱
  • 是否能被正常复位,解复位后各输出信号初始状态(复位值)是否正常
  • 格雷码转换逻辑的正确性

4.11 只使用(2选1MUX)完成异或门逻辑,最少需要多少个MUX

4.12 时序检查中对于异步复位电路的时序分析分别是?

撤销复位时,恢复到解复位状态的电平必须在时钟有效沿来临之前的一段时间到来,才能保证时钟能有效恢复到解复位状态,此段时间为recovery time。

复位时,在时钟有效沿来临之后复位信号还需要保持的时间为移除时间removal time

4.13 关于于网表仿真描述正确的是?

A.网表仿真不能发现实现约束的问题
B.仿真速度比RTL仿真速度更快
C.网表仿真可以发现电路设计中的异步问题
D.为了保证芯片正常工作,即使在时间和资源紧张情况下,也需要将所有的RTL仿真用例都进行网表仿真并且确保通过

网表仿真通过网表反标sdf进行仿真,仿真速度较RTL仿真慢,由于sdf通过sdc约束和单元逻辑延时和线网延时而来,可以发现约束问题。设计大的话,网表仿真太耗时,常用采用形式验证手段来保证门级网表在功能上与RTL设计保持一致,配合静态时序分析工具保证门级网表的时序

4.14 N位触发器构成的扭环形计数器,其无关状态数有几个?

扭环形计数器,亦称约翰逊计数器,每次状态变化时仅有一个触发器发生翻转,译码不存在竞争冒险,在n(n≥3)位计数器中,可使用2n个状态,有2^n-2n个状态未使用

Verilog代码:右移,[0]位取反补高位

4.15 什么结构化描述?行为描述?数据流描述?

数据流描述:采用assign 连续赋值语录。
行为描述:使用always 语句或initial 语句块中的过程赋值语录
结构化描述:实例化已有的功能模块或原语

4.16 为实现D触发器转换成T触发器,图示的虚线框内应是什么电路?


4.17 有一个FIFO设计,输入时钟100Mhz,输出时钟80Mhz,输入数据模式是固定的,其中1000个时钟中有800个时钟传输连续数据,另外200个空闲,请问为了避免FIFO下溢/上溢,最小深度是多少

  • 首先一边是100M发数据,一边是80M收数据
  • 那么肯定需要一个缓冲器来存来不及收的数据
  • 这个缓冲器的深度计算的思路:最坏的情况下需要存储的数量
  • 那么对于上述的情况,最坏就是两个800连着发,也就是一次发1600个数据
  • 那么题目就变成了发1600个数据,100M发80M收需要多深的fifo
  • 我们把100M看成一次发100个,80M看成1次收80个
  • 因此还需对其余的 320 个进行缓冲
  • 所以fifo的最小深度应该是320


趁热打铁继续做4.27!!

4.18 在四变量卡诺图中,逻辑上不相邻的一组最小项为:( )

首先要知道什么是相邻:仅一个因子不同的最小项,如:A’BC’与A’BC

所以最后检验选项 选D

4.19 3个D触发器构成的电路图如下,Q2端的输出是什么?


4.20 一个8进3出的优先编码器,如果1、3、4、5输入端为有效电平,其二进制输出为?

优先编码器首先输出最高顺序的输入,根据优先编码器的优先级别,5的级别最高,则其二进制输出为101

Verilog 里的取模运算,即求余数运算,先把各自符号位去掉运算,然后取第一个运算数的符号位,答案为1。

  • 在运算中,只要是有无符号数参与,就按无符号数运算;

(1)输入的 a 和 b 都是无符号数,所以进行无符号数的乘法,11 和 10 也在输入的表示范围内,执行 11*10 =110;
(4)将其赋值给 z 后,由于 z 是有符号数,且 c 的最高位符号位为 1,所以进行符号位的扩展,得到 ,该数表示 -2。

(1)该数目前是补码表示,去掉最高位的符号位为 111_1110;
(4)符号位为 1,表示负数,所以是 -2;

4.23 三目运算有x和z态怎么判断

  • 如果条件为x或z,结果将按位操作的值表示:0与0得0,1与1得1,其余情况为x

①用2048x12的ROM芯片,最多能实现()个输入 ()个 输出的组合逻辑的数?

  • 首先你要明白2048*12是什么意思
  • 2048也就是深度,12是数据线
  • 而rom是只读的,输出就是12根线的输出
  • 因此输入就是11个,因为2^11是2048,一个地址对应一个深度,2048个深度就需要11根地址线输入
  • 一个byte就是8位数据
  • 32根线,一根只能传一个数据,也就是4byte
  • 用2^20除以上面的数得出结果:64片
  • NOR的特点是芯片内执行,这样应用程序可以直接在flash 闪存内运行,不必再把代码读到系统RAM中
  • NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能
  • NAND内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案
  • NAND存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如数码相机、MP3记忆卡、U盘等

1、NOR的读速度比NAND稍快一些
2、NAND的写入速度比NOR快很多
4、NAND的擦除单元更小,相应的擦除电路更少

如下电路实现的逻辑功能为多少进制计数器?

问:最小的fifo深度?

  • fifo深度问题的核心就是最坏的情况下需要存储的数据
  • 因为B需要初始化10us,因此这个时候A可能已经传了10us数据了,也就是传了2次,那么最大的情况就是初始化的10us传了两次数据+第11us也传了一次数据,也就是3次数据,而我读数据再第11us读了一次

4.28 浮点数的无损计算(大疆)

对12.918做无损定点化,需要的最小位宽是多少?位宽为11时量化误差是多少?

  • 整数部分不用说都知道,4位就能表示
  • ①当小数取1位精度,也就是x.1 或者x.0 相当于把1分成了两份,.1占一份,.0占一份,所以精度就是0.5
    ②当小数取2位精度,就有4种组合,每种占0.25,精度就是0.25,以此类推
    ③所以小数位数越多,表示的精度越高,若小数点后有n位,则其表示的最大精度为1/(2^n)
  • 无损的要求:量化误差小于精度的一半,就可以认为是无损的
    ②刚才算出来的量化误差为0.,明显小于精度的一半,因此是无损的

4.29 FIFO对前后级的握手信号如何产生?

  • 只要FIFO没满,就可以一直收数据,即对上级的应答信号ready一直拉高
  • FIFO不为空,就可以一直向下级发送数据,即数据发送信号valid一直拉高

4.30 为什么异步fifo可以进行跨时钟域处理?

  • 异步fifo中使用了存储器RAM能将两个时钟域的时序路径隔开。
  • 在异步fifo的读写控制中,引入了格雷码同步;由于格雷码相邻两个码之间只有一位发生变化,因此在指针跨时钟域传递时如果发生亚稳态,指针要么是变化后的地址,要么是与同步前的指针保持一致,因此这不会引起fifo的功能紊乱,只是影响了其读写效率
  • 两者都是对外部器件与芯片之间时序路径的约束
  • input delay是指从上游器件的时钟边沿到输入端口之间的延迟,包括触发器的输出延迟Tco、PCB的走线延迟Tpcb;
  • output delay 是指从端口输出数据到下游器件时钟沿之间的延迟,包括pcb走线延迟与下游器件第一级寄存器的建立时间。

4.32 如果芯片已经生产出来,发现setup time或者hold time有违例,怎么办?能补救吗?

  • 由于建立时间的时序路径与时钟周期有关,因此若是出现setup违例可通过降低时钟频率来增大时序裕量
  • 而对于hold违例,首先在需要保证再经过处理后setup不能为例,因此首先先降频保证满足建立时间,然后对芯片进行升温,增大器件延迟比如Tcq,从而增大保持时间时序裕量

4.33 FIFO会不会存在假空假满的情况呢?

  • 会,异步FIFO会存在虚空虚满的情况
  • 判空信号是在读时钟域中产生的,需要将写时钟的写指针转换成格雷码并同步到读时钟域来,从而导致被同步过来的写地址是慢于或者等于真实的写地址的值
  • 此时读地址的格雷码的值是真实的值,所以,此时判断出来的空状态是一个假空状态,同理,可得到写时钟域判断出来的满状态是一个虚满状态
  • 这不影响异步FIFO的功能使用, 只是会较低其工作效率

4.34 时序路径的终点和起点?

  • 时序路径的起点有触发器输入端口
  • 终点有触发器输出端口
  • 起点和终点进行排列组合,共有4中时序路径的类型
  • FPGA的端口被划分为多个bank,每个bank的独立供电,相同bank中的IO电气标准相同
  • 每个bank的标准接口电压由VCCO决定,不同bank的接口电压不同,只有相同接口电压VCCO的IO才能直接相连

4.35 如果有一段突发数据,需要将其转为稳定的数据流,怎么做?

  • 可以先用存储将这部分数据缓存下来,等待全部数据缓存完成后再以一个稳定的速率将数据从存储器中读出
  • 在同一时钟域可以使用同步fifo对数据进行缓存,在读使能有效时将数据读出
  • 在不同时钟域,可以采用异步fifo

4.36 除了人肉看波形外,还有什么验证正确性的办法?

  • 可能和验证更相关了,可以将dut中需要检查的节点添加打印信息,在 scoreboard内添加对比文件信息,比较两者的一致性,输出两者的比较结果

4.37 AHB仲裁是怎么工作的?sel信号怎么产生?

    ①设备向仲裁模块通过发送HBuSREQx信号请求访问总线
    ②仲裁器置位该设备的HGRATx信号,表示申请已成功,并在当前传输完成时获得总线访问权
    ③设备获得地址、数据总线
  • 授予总线是有优先级的,仲裁器通过HGRANT信号表示总线中哪个master的优先级最高,并且在当前HREADY为高(数据读写完成)时将总线授予优先权最高的master
  • 存在一些仲裁的算法如固定优先级仲裁,循环式优先级仲裁,随机性仲裁和竞争优先级仲裁
  • 当设备得到总线权力后,那么就可以由HADDR根据译码电路来给出不同的sel来选择从机
    ①VALID 信号先到达,也就是Ready迟来,这时候VALID 是一直拉高的,直到本次传输完成;题目中的Ready信号有延迟就会导致数据收的慢一点,如果对功能产生影响,则需要在Ready信号所在模块进行优化,具体问题要具体分析,分析为什么延迟了,改怎么优化
    ②READY 信号先到达,会等待VALID,直到传输结束,之后只要VALID没有置起,READY 可以自由发挥
    ③同时到达,会在下一时钟沿完成握手
  • 可以通过二进制的地址进行判断
    ①读空判断:读地址和写地址一样时,则为读空
    ②写满判断:因为扩展了一位,所以最高位为1时表示读写地址刚好相差一圈,这时就是写满的时候;见下表,假设深度为8,那么扩展后是4位;从data1再次写到data1时,则为写满,从data2再次写到data2时,也为写满,以此类推;很明显写满的时候,最高位相反,其他位一样,也就是上面说的正好相差一圈,用代码表示就是:
  • 也可以通过格雷码的地址进行判断
    ①读空判断:读地址和写地址一样时,则为读空
    ②写满判断:因为扩展了一位,所以最高位为1时表示读写地址刚好相差一圈,这时就是写满的时候;而格雷码相差一圈的表达式为:
    前两位相反,后面的位相同

4.40 多个乘法运算会出现时序问题?怎么解决?

  • 在FPGA中乘法运算常常是通过DSP处理的处理
  • 多个乘法运算需要大量的时间,在一个时钟周期内常常是算不完的,所以会出现时序问题
  • 可以通过增加流水线的方式解决这个问题,将计算的中间结果寄存一拍,在进行后续计算

4.41 什么是伪路径?

  • 伪路径就是存在,但是不起作用的路径,不需要对它进行时序分析
  • 排除伪路径可以移除无效的时序路径
  • 跳过路径优化,可以节省时间和资源

4.42 一个always块中能否用同时用阻塞和非阻塞赋值?

4.43 在rtl设计中哪项工作需要手工进行门级设计?

  • 在设计后期,根据静态时序分析和后仿真中所暴露出来的问题,对电路和标准单元布局进行小范围调整

4.44 STA是在哪个级进行的?

  • 检验门级电路的最大最小延迟,保证在指定的频率下,能够满足保持时间的要求

4.45 CMOS管的原理?PMOS的衬底连接的是什么?

  • 首先我们要了解什么是N\P型半导体
  • 以N型半导体为例,在gs之间接入正向电压,沟道会有负电荷被吸引进来从来形成N沟道

  • 生成N沟道则为NMOS,符号箭头指向栅极,反之则为PMOS

  • P上N下,上正下负,因此PMOS的衬底连接的是VDD
  • 数据通信中最常用的一种查错校验码
  • 假设crc的生成多项式如下
  • 那么其二进制序列为,第7、3、0位为1
  • 在数据后面添加二进制序列位数-1个0
  • 用新的数据除以,得到的余数为crc码
  • 将crc码接在原数据的后面送出
  • 接收端收到数据后,除以,余数为0,则数据没有错误

以上是正常的crc检验的流程,但verilog代码中一般通过异或来实现:

  • 在0、3、7处进行异或得到下一位

4.48 Verilog与其他编程语言有哪几种接口机制?

  • 直接编程接口(DPI,Direct Programming Interface),它能更加简单地连接C、C++或其他非Verilog编程语言;DPI经常被用来调用C代码读取激励、包含一个参考模型或扩展SV的功能。
  • UPF(unified Power Format),是广泛用于低功耗设计和验证的标准功耗格式,由类似TCL的命令组成,用于描述低功耗意图;这样整个flow的低功耗意图都来自一个文件,降低设计风险。便于多个flow的低功耗验证
}

大屏办公、沉浸观影、畅快游戏,看什么
都一目了然,干什么都得心应手。

大屏办公、沉浸观影、畅快游戏,看什么
都一目了然,干什么都得心应手。

  • 根据场景智能调节刷新率

  • 高动态范围,画面更绚丽

}

我要回帖

更多关于 vivoy55忘记开机密码怎么办 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信