前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数字IC基础知识总结(笔试、面试向)-持续更新

数字IC基础知识总结(笔试、面试向)-持续更新

作者头像
月见樽
发布2020-05-26 11:04:25
2K0
发布2020-05-26 11:04:25
举报

该总结生成于找工作准备期,更新做笔试题中常见的题目涉及到的知识点,同时也是对数字IC基础知识的一些总结。列入内容来自:1.笔试题知识点;2.个人觉得需要总结的一些知识。其中verilog语法部分过于庞杂,因此仅总结一些平常可能用到的但是不是特别明确的部分。同时有些知识因为间隔太过久远或疫情期间查不到比较权威的纸质资料可能总结的不正确,欢迎大家留言批评指正。

2020.05.18

  • 填充【2.5.建立时间与保持时间】相关内容
  • 增加并填充【2.6.非理想时钟】相关内容
  • 增加并填充【2.7.跨时钟域】相关内容

数制相关

二进制-十进制转换

  • 十进制->二进制:对于整数,为除2取模,逆序排列,对于小数,为乘2取模,顺序排列,例子如下所示:

例子:14->二进制1110

数字

除2结果

除2取模

14

7

0

7

3

1

3

1

1

1

0

1

例子:0.6875->二进制1011

数字

乘2结果

0.6875

1.375

1

0.375

0.75

0

0.75

1.5

1

0.5

1

1

原码、反码与补码

其区别主要在于负数的表达,具体要求如下:

  • 原码:最高位为符号位,符号位为0表示整数,符号位为1表示负数
  • 反码:同样具有符号位,规则与原码相同,负数较原码非符号为均按位取反
  • 补码:为了消除+0和-0,扩展表达容量,符号位规则与原码相同,负数为原码非符号位按位取反+1

举例:以4bit码为例

十进制

原码

反码

补码

4

0100

0100

0100

-4

1100

1011

1100

-7

1111

1000

1001

-8

-

-

1000

BCD码与余3码

BCD码为使用4个bit表示一个十进制位数,即123的BCD码为0x123,余3码表示BCD码基础上加3(十进制),例子如下,对于26而言:

  • BCD码为0x26即二进制为0010 0110
  • 余3码为BCD码直接加3,二进制为0010 0110 + 0011 = 0010 1001

格雷码

格雷码的优势在于相邻的数之间的二进制表达仅有一个bit发生变化,在跨时钟域中不会产生竞争冒险,格雷码-二进制转换如下所示:

  • 二进制转格雷码:保留最高位,剩余相邻位数异或。例如数据1001,结果为1101,如下:

确定方式

运算

结果

取最高位

1

1

异或

1 xor 0

1

异或

0 xor 0

0

异或

0 xor 1

1

  • 格雷码转二进制:保留最高位,从最高位往低运算,对于第n位为第n位格雷码和第n+1位的异或,例如数据1001,结果为1110,如下:

确定方式

运算

结果

取最高位

1

1

异或

0 xor 1

1

异或

0 xor 1

1

异或

1 xor 1

0

数字逻辑相关

布尔逻辑运算律

名称

运算律

结合律

交换律

分配律

吸收律

幂等律

德摩根律

互补律

零一律

、、

卡诺图

卡诺图的思路为可视化的将电路逻辑转为最小乘积项,再通过合并最小乘积项进行化简,如这一个例子:

Y = AB' + A'C + BC + C'D
Y = AB' + A'C + BC + C'D

对应的卡诺图为:

AB\CD

00

01

11

10

00

1

1

1

01

1

1

1

11

1

1

1

10

1

1

1

1

表中为1表示有这一个乘积项,例如在AB=01、CD=00有一个1,即表示逻辑表达式含有项A'BC'D'。随后绘制框,绘制框的过程即为将最小项进行组合化简的过程:同时包括0和1的乘积项可消去,如下图所示:

框越大,可消去的项越多,根据以上卡诺图,化简结果为:

Y = A + B + CD'
Y = A + B + CD'

除了化简外,卡诺图还可用于判定竞争冒险,当存在相切的框时,存在竞争冒险

竞争冒险

组合竞争冒险即信号在实际电路中的传输存在延迟(Delay),所以由于信号到达同一元件的时间并不一致,到达的时间可能存在延迟。导致组合逻辑电路在某些时刻的结果看上去可能是错误的。竞争冒险的检查方法有:

  • 代数法:当逻辑表达式中出现A+A'或A'A时,会产生竞争冒险
  • 卡诺图法:当存在相切的框时,存在竞争冒险

解决方法有以下几种:

  • 增加冗余项:在卡诺图中增加一个冗余的框,同时与相切的两个框相交即可
  • 增加选通信号:当输出稳定后才输出数据
  • 改用时序逻辑:同步时序逻辑中D触发器对竞争冒险不敏感,添加D触发器可解决竞争冒险问题
  • 改用格雷码:格雷码仅有1bit发生变化
  • 输出端增加滤波电容

同步复位与异步复位

同步复位的优点:

  • 一般能够确保电路是百分之百同步的。
  • 确保复位只发生在有效时钟沿,可以作为过滤掉毛刺的手段。

同步复位的缺点:

  • 复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位。同时还要考虑如:时钟偏移、组合逻辑路径延时、复位延时等因素。
  • 由于大多数的厂商目标库内的触发器都只有异步复位端口,采用同步复位的话,就会耗费较多的逻辑资源。

异步复位优点:

  • 异步复位信号识别方便,而且可以很方便的使用全局复位。
  • 由于大多数的厂商目标库内的触发器都有异步复位端口,可以节约逻辑资源。

异步复位缺点:

  • 复位信号容易受到毛刺的影响。
  • 复位结束时刻恰在亚稳态窗口内时,无法决定现在的复位状态是1还是0,会导致亚稳态。

(以上优缺点内容来自知乎用户Kevin Zhang的回答,如有侵权可联系本人删除)

异步复位电路需要注意以下两点:

  • 输入端需滤除毛刺并做抗干扰处理(使用专用的异步复位IO),放置干扰
  • 需要同步释放,防止亚稳态的出现

异步复位同步释放的代码表达如下所示:

代码语言:javascript
复制
// rst_n_out为处理后的复位信号
always @ (posedge clk or negedge rst_n) begin
    if(~rst_n) begin
        rst_n_buff <= 1'b0;
        rst_n_out  <= 1'b0;
    end else begin
        rst_n_buff <= 1'b1;
        rst_n_out  <= rst_n_buff;
    end
end

建立时间与保持时间

建立时间和保持时间的定义如下所示:

  • 建立时间:输入数据在时钟采样沿前必须有效的时间(时钟沿之前必须稳定的时间)
  • 保持时间:输入数据在时钟采样沿后必须保持稳定的时间(时钟沿后必须稳定的时间)

违反建立时间和保持时间可能产生亚稳态,对于一个一般的时序逻辑模型如下所示:

为了满足后一个寄存器的建立时间要求,需要满足:

T_{clk} > T_{c-q} + T_{comb} + T_{steup}
T_{clk} > T_{c-q} + T_{comb} + T_{steup}

为了满足后一个寄存器的保持时间要求,需要满足:

T_{c-q} + T_{comb} > T_{hold}
T_{c-q} + T_{comb} > T_{hold}

由以上公式,可以推断出理想状态下的:

  • 最小时钟周期:
T_{c-q} + T_{comb} + T_{steup}
T_{c-q} + T_{comb} + T_{steup}
  • 组合逻辑延迟范围:
T_{hold} - T_{c-q} < T_{comb} < T_{clk} - T_{c-q} - T_{setup}
T_{hold} - T_{c-q} < T_{comb} < T_{clk} - T_{c-q} - T_{setup}

非理想时钟

非理想时钟因素包括时钟偏差(skew)和时钟抖动(jitter):

  • clock skew(时钟偏差):集成电路中一个时钟翻转到达时间在空间上的差别(时钟沿到达不同寄存器时钟端口的时间差距)
  • clock jitter(时钟抖动):芯片的某一个给定点(寄存器时钟端口)上时钟周期发生暂时的变化(每个时钟周期之间具有的差异)

偏差和抖动对电路性能均有影响,对于时钟偏差而言:

T_{clk} + \delta > T_{c-q} + T_{comb} + T_{steup} \\ T_{c-q} + T_{comb} > T_{hold} + \delta
T_{clk} + \delta > T_{c-q} + T_{comb} + T_{steup} \\ T_{c-q} + T_{comb} > T_{hold} + \delta

T_{clk} - 2t_j > T_{c-q} + T_{comb} + T_{steup} \\ T_{c-q} + T_{comb} > T_{hold} + 2t_j
T_{clk} - 2t_j > T_{c-q} + T_{comb} + T_{steup} \\ T_{c-q} + T_{comb} > T_{hold} + 2t_j

T_{clk} + \delta -2t_j > T_{c-q} + T_{comb} + T_{steup} \\ T_{c-q} + T_{comb} > T_{hold} + \delta + 2t_j
T_{clk} + \delta -2t_j > T_{c-q} + T_{comb} + T_{steup} \\ T_{c-q} + T_{comb} > T_{hold} + \delta + 2t_j

产生非理想时钟的原因可能包括:

  • 时钟信号产生:偏上时钟发生器可能产生时钟jitter
  • 器件制造:由于工艺偏差不同路径上的缓冲器参数不同,引起时钟skew
  • 互联偏差:互联线的形态参数偏差,引起时钟skew
  • 环境:温度和电源,温度变化可以引起时钟skew,用反馈电路校准温度补偿可以缓解;供电一般产生jitter,在时钟驱动器周围加去耦电容缓解

跨时钟域

在跨时钟域过程中,可能会产生以下问题:

  • 数据丢失:常出现在高频时钟域到低频时钟域中,由于采样时钟过慢导致数据丢失
  • 数据重复:常出现在低频时钟域到高频时钟域中,由于采样时钟过快导致数据重复
  • 亚稳态:数据建立时间和保持时间不符合

解决方法有:

  • 同步器:多个(一般为两个)接收域寄存器串联,不能解决亚稳态问题,仅能缓解。同时需要注意连接到同步器上的输入必须是无组合逻辑的寄存器输出信号,否则可能产生毛刺问题。多bit信号一般不用同步器,可能产生毛刺传递错误的数据。
  • 握手信号:通过多次握手
  • 异步FIFO:用于多bit数据的跨时钟域传输(使用格雷码传递地址指针,仅有1bit发生跳变不会产生毛刺)

根据时钟频率区别,在跨时钟域传输时还需要以下操作:

  • 从低频时钟域到高频时钟域:在高频时钟域需要进行间隔采样,否则会产生数据重复
  • 从高频时钟域到低频时钟域:在高频时钟域需要进行数据保持,否则会产生数据丢失

另外,还有一种脉冲同步器需要注意,这种脉冲同步器的方法为在发送时钟域中,每接收到一次脉冲,传递信号的电平发生一次跳变,传递信号通过同步器传递到接收时钟域后使用边沿检测还源出脉冲。

Verilog语法

位宽推断

verilog的位宽推断的基本准则为:中间值的位宽=整个表达式中所有操作数(包括结果,即等号左边的数字),例如:

代码语言:javascript
复制
a[7:0] = b[9:0] + c[4:0]

该表达式b+c的结果为10bit,赋值给a的时候舍去最高2bit,再例如:

代码语言:javascript
复制
a[7:0] = b[7:0] + c[7:0]

该表达式b+c的结果为8bit,因此很容易产生数据溢出的问题(255+255->254)

宏定义

宏定义的方式为使用``define A B进行,声明一个宏定义A,内容是B,使用时需要使用\A表示这是一个宏定义。宏定义的使用可以理解为“字符串呼唤”,即在代码中使用`A从字符串角度等效于B,如下例子:

代码语言:javascript
复制
`define SUM A+B+C
assign a = `SUM;   // 使用宏定义
assign a = A+B+C;  // 宏定义等效

注意宏定义不需要使用;结尾,否则;也会被替换,如下:

代码语言:javascript
复制
`define SUM A+B+C;
assign a = `SUM;   // 使用宏定义
assign a = A+B+C;; // 宏定义等效

数字信号处理相关

香农公式

香农公式描述了信噪比-带宽-信道容量之间的关系,公式如下所示:

C = B \times log_2(1 + \frac{S}{N})
C = B \times log_2(1 + \frac{S}{N})

FPGA相关

SOC设计常识

功耗公式

低功耗相关

DFT相关

设计流程

常见硬件编程

异步FIFO

待编写

常见协议

I2C

UART

SPI

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数制相关
  • 数字逻辑相关
  • Verilog语法
  • 数字信号处理相关
  • FPGA相关
  • SOC设计常识
  • 常见硬件编程
  • 常见协议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档