数字IC基础知识

此博客将会不定时添加新的知识点

(一)阻塞赋值与非阻塞赋值的区别

阻塞赋值:

前面语句执行完,才可执行下一条语句;即前面语句的执行(b=a)阻塞了后面语句的执行(c=b)。即:always块内,2条语句顺序执行。

always @(posedge i_clk)
begin
         b = a;
         c = b;
end

注意注意:a的值赋给b,b更新后的值赋给c,是在同一个时钟上升沿完成,因此只需要一个触发器即可,如下图仿真结果。
阻塞赋值

非阻塞赋值:

always块内,2条语句同时执行。即:前面语句的执行(b=a)不会阻塞后面语句的执行(c=b)。

always @(posedge i_clk)
begin
         b <= a;
         c <= b;
end

注意:第1个clk上升沿a的值赋给b,此时b的值还没有更新;第2个clk上升沿,b的值赋给c,此时c才能获得b更新后的值。所以c获得a的值,需要2个clk完成,需要两个触发器实现。如下图仿真结果。
在这里插入图片描述
总结:组合逻辑,使用阻塞赋值;时序逻辑使用非阻塞赋值;

(二)常用数字电路逻辑符号

在这里插入图片描述

(三)二进制,格雷码,BCD码

二进制:

注意是否添加符号位,二进制转八进制,取三合一;二进制转十六进制,取四合一;负数补码为原码取反加1;

格雷码:

格雷码是一种二值编码,相邻的编码之间只有一位的区别。因此与普通二进制码相比,在递增时出错概率更加小。下表是3bit的格雷码编码:
在这里插入图片描述

BCD码:

BCD码也称二进码十进数,BCD码可分为有权码和无权码两类。其中,常见的有权BCD码有8421码、2421码、5421码,无权BCD码有余3码、余3循环码、格雷码。8421BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。例如,2的二进制位0010,7的二进制位0111,十进制27的8421BCD码为,00100111,二进制码为11011。

(四)奇偶校验位

奇偶校验位是在一串二进制码的最后添加的一位,它使得整个二进制串的1的个数为奇数或者偶数。因此奇偶校验分为两种,奇校验和偶校验。

计算校验位需要对二进制码中的1进行计数。如果1的数量为奇数,并且使用偶校验,则校验位为1,使得整体1的个数为偶数。如果1的数量为偶数,并且使用偶校验,则校验位为0,使得整体1的个数为偶数。奇校验类似。奇偶校验位可以通过对所有的比特位进行异或得到。例如:计算二进制数111001的奇校验位,111001中1的个数为4个,所以校验位为1,带上校验位以后为1110011,1的个数为5,为奇数。

(五)建立时间与保持时间

时序设计的实质: 时序设计的实质就是满足每一个触发器的建立/保持时间的要求。
建立时间 触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的最小时间;
保持时间 触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的最小时间;
时钟偏斜(clock skew) 是时钟信号到达两个FF的时间差;例如下图,虽然是同一个时钟源,但是由于走线的延迟,导致1比2的时钟快;
在这里插入图片描述
为什么触发器要满足建立时间和保持时间
因为触发器内部数据的形成是需要一定的时间的,如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,在0和1之间变化,这时需要经过一个恢复时间,其输出才能稳定,但稳定后的值并不一定是你的输入值。这就是为什么要用两级触发器来同步异步输入信号。这样做可以防止由于异步输入信号对于本级时钟可能不满足建立保持时间而使本级触发器产生的亚稳态传播到后面逻辑中,导致亚稳态的传播。
换个方式理解:需要建立时间是因为触发器的D端像一个锁存器在接受数据,为了稳定的设置前级门的状态需要一段稳定时间;需要保持时间是因为在时钟沿到来之后,触发器要通过反馈来锁存状态,从后级门传到前级门需要时间。

(六)触发器(flip-flop)和锁存器(latch)的区别

触发器和锁存器都是存储信息的基本单元,一个触发器或者一个锁存器能够存储1bit的信息。两者的主要不同点是,触发器只在时钟上升沿或者下降沿根据采样改变输出,而锁存器在enable信号拉高期间都会跟随输入
D触发器:

always @ (posedge clk) begin
    if(reset) begin
        Q <= 0;
        Qbar <= 1;
    end else begin
        Q <= D;
        Qbar <= ~D;
    end
end

锁存器:

always @ (D or Enable) begin
    if(Enable) begin
        Q <= D;
        Qbar <= ~D;
    end
end

电平敏感的存储器件称为锁存器。可分为高电平锁存器和低电平锁存器,用于不同时钟之间的信号同步。
有交叉耦合的门构成的双稳态的存储原件称为触发器。分为上升沿触发和下降沿触发。可以认为是两个不同电平敏感的锁存器串连而成。前一个锁存器决定了触发器的建立时间,后一个锁存器则决定了保持时间。

(七)什么是竞争?什么时候出现?如何避免?

当输出取决于不同信号的顺序或者时序时,被称为竞争。竞争可以分为两种:实际硬件中的竞争和仿真行为中的竞争(时序逻辑使用阻塞赋值就会出现竞争);

(八)mealy型moore型状态机(FSM)的区别

mearly型FSM的输出和当前的状态以及当前的输入有关系;
moore型FSM的输出只和当前的状态有关系;

(九)冯诺依曼和哈佛结构

冯诺依曼结构中,指令和数据存储在同一个存储器中。CPU读取数据和指令使用同一条总线,具有存储数据和指令的统一缓存。
哈佛结构中,数据和指令分开存储的,可以使用两条不同总线同时访问数据和指令,指令和数据都具有单独的缓存。

(十)解释内存中的Little Endian和Big Endian的概念

字节顺序是指字节在内存中的存储顺序,数据在内存中通常是按照字节寻址的,但是大多数计算通常采用32位存储操作数。因此,为了将一个自己存在存储器中,有两种方式:
高字节存在低地址中,称为Big Endian;
低字节存在低地址中,称为Little Endian;

(十一)计算机系统中有哪些存储

register,cache,main memory,secondary

(十二)什么是cache

cache是小型的快速存储,通常在main memory和CPU之间,有时放置于CPU内。
在这里插入图片描述
每当CPU请求存储位置的内容时,都会首先检查cache中是否有此数据,如果cache中存在数据,则CPU直接从cache中获取数据。由于不需要CPU进入该数据的main memory,因此速度更快。如果缓存中不存在数据,则将一块数据从main memory读取到cache中,然后以字块的形式从cache中传输到CPU。
在cache中查找地址时,若缓存中包含该内存位置,称之为cache hit。如果在cache找不到,则称之为cache miss。
在拥有cache的机器上,通过向量进行搜索将比链表进行搜索更快。

(十三)同步复位与异步复位

1)什么是同步逻辑和异步逻辑
同步逻辑是时钟之间有固定的因果关系;(各触发器的时钟端全部连接在一起,并接在系统时钟端,只有当时钟脉冲到来时,电路的状态才能改变。改变后的状态将一直保持到下一个时钟脉冲的到来,此时无论外部输入x有无变化,状态表中的每个状态都是稳定的。)
异步逻辑是各时钟之间没有固定的因果关系;(电路中除可以使用带时钟的触发器外,还可以使用不带时钟的触发器和延迟元件作为存储元件,电路中没有统一的时钟,电路状态的改变由外部输入的变化直接引起。)
2)同步电路和异步电路的区别
同步电路 是由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路,其所有操作都是在严格的时钟控制下完成的。这些时序电路共享同一个时钟CLK,而所有的状态变化都是在时钟的上升沿(或者下降沿)完成的。比如触发器,当上升沿到来时,寄存器把D端的电平传到Q输出端。在同步电路中一般采用D触发器,异步电路中采用锁存器。(存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。
异步电路 主要是组合逻辑电路,用于产生地址译码器,FIFO或RAM的读写控制信号脉冲,但它同时也用在时序电路中,此时它没有统一的时钟,状态变化的时刻是不稳定的,通常输入信号只在电路处于稳定状态时才发生变化。也就是说一个时刻允许一个输入发生变化,以避免输入信号之间造成的竞争冒险。(电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,只有这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步。
3)同步复位与异步复位的比较
上电以后,使用复位进行状态设定为一个确定状态。如果对复位在时钟的边沿进行采样,那么就是同步复位。如果不依赖于时钟边沿进行复位采用,则为异步复位。异步复位对复位信号要求比较高,不能有毛刺,如果其与时钟关系不确定,也可能出现亚稳态。
在这里插入图片描述
同步复位代码:

always  @ (posedge clk) begin
    if (reset) begin
        ABC <=0;
    end
end 

异步复位代码:

always  @ (posedge clk or posedge reset ) begin
    if (reset) begin
        ABC <=0;
    end
end

(十四)亚稳态

亚稳态 是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
解决方法:
1降低系统时钟频率
2用反应更快的FF
3引入同步机制,防止亚稳态传播
4改善时钟质量,用边沿变化快速的时钟信号
关键是器件使用比较好的工艺和时钟周期的裕量要大。亚稳态寄存用d只是一个办法,有时候通过not,buf等都能达到信号过滤的效果

(十五)多时钟域,处理信号跨时钟域

不同的时钟域之间信号通信时需要进行同步处理,这样可以防止新时钟域中第一级触发器的亚稳态信号对下级逻辑造成影响,其中对于单个控制信号可以用两级同步器,如电平、边沿检测和脉冲,对多位信号可以用FIFO,双口RAM,握手信号等。
跨时域的信号要经过同步器同步,防止亚稳态传播。例如:时钟域1中的一个信号,要送到时钟域2,那么在这个信号送到时钟域2之前,要先经过时钟域2的同步器同步后,才能进入时钟域2。这个同步器就是两级d触发器,其时钟为时钟域2的时钟。这样做是怕时钟域1中的这个信号,可能不满足时钟域2中触发器的建立保持时间,而产生亚稳态,因为它们之间没有必然关系,是异步的。这样做只能防止亚稳态传播,但不能保证采进来的数据的正确性。所以通常只同步很少位数的信号。比如控制信号,或地址。当同步的是地址时,一般该地址应采用格雷码,因为格雷码每次只变一位,相当于每次只有一个同步器在起作用,这样可以降低出错概率,象异步FIFO的设计中,比较读写地址的大小时,就是用这种方法。如果两个时钟域之间传送大量的数据,可以用异步FIFO来解决问题。
我们可以在跨越Clock Domain时加上一个低电平使能的LockupLatch以确保Timing能正确无误。

  • 5
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值