该总结生成于找工作准备期,更新做笔试题中常见的题目涉及到的知识点,同时也是对数字IC基础知识的一些总结。列入内容来自:1.笔试题知识点;2.个人觉得需要总结的一些知识。其中verilog语法部分过于庞杂,因此仅总结一些平常可能用到的但是不是特别明确的部分。同时有些知识因为间隔太过久远或疫情期间查不到比较权威的纸质资料可能总结的不正确,欢迎大家留言批评指正。
2020.05.18
二进制-十进制转换
例子: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 |
原码、反码与补码
其区别主要在于负数的表达,具体要求如下:
举例:以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而言:
格雷码
格雷码的优势在于相邻的数之间的二进制表达仅有一个bit发生变化,在跨时钟域中不会产生竞争冒险,格雷码-二进制转换如下所示:
确定方式 | 运算 | 结果 |
---|---|---|
取最高位 | 1 | 1 |
异或 | 1 xor 0 | 1 |
异或 | 0 xor 0 | 0 |
异或 | 0 xor 1 | 1 |
确定方式 | 运算 | 结果 |
---|---|---|
取最高位 | 1 | 1 |
异或 | 0 xor 1 | 1 |
异或 | 0 xor 1 | 1 |
异或 | 1 xor 1 | 0 |
布尔逻辑运算律
名称 | 运算律 |
---|---|
结合律 | 、 |
交换律 | 、 |
分配律 | |
吸收律 | |
幂等律 | 、 |
德摩根律 | 、 |
互补律 | 、 |
零一律 | 、、 |
卡诺图
卡诺图的思路为可视化的将电路逻辑转为最小乘积项,再通过合并最小乘积项进行化简,如这一个例子:
对应的卡诺图为:
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的乘积项可消去,如下图所示:
框越大,可消去的项越多,根据以上卡诺图,化简结果为:
除了化简外,卡诺图还可用于判定竞争冒险,当存在相切的框时,存在竞争冒险
竞争冒险
组合竞争冒险即信号在实际电路中的传输存在延迟(Delay),所以由于信号到达同一元件的时间并不一致,到达的时间可能存在延迟。导致组合逻辑电路在某些时刻的结果看上去可能是错误的。竞争冒险的检查方法有:
解决方法有以下几种:
同步复位与异步复位
同步复位的优点:
同步复位的缺点:
异步复位优点:
异步复位缺点:
(以上优缺点内容来自知乎用户Kevin Zhang的回答,如有侵权可联系本人删除)
异步复位电路需要注意以下两点:
异步复位同步释放的代码表达如下所示:
// 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
建立时间与保持时间
建立时间和保持时间的定义如下所示:
违反建立时间和保持时间可能产生亚稳态,对于一个一般的时序逻辑模型如下所示:
为了满足后一个寄存器的建立时间要求,需要满足:
为了满足后一个寄存器的保持时间要求,需要满足:
由以上公式,可以推断出理想状态下的:
非理想时钟
非理想时钟因素包括时钟偏差(skew)和时钟抖动(jitter):
偏差和抖动对电路性能均有影响,对于时钟偏差而言:
产生非理想时钟的原因可能包括:
跨时钟域
在跨时钟域过程中,可能会产生以下问题:
解决方法有:
根据时钟频率区别,在跨时钟域传输时还需要以下操作:
另外,还有一种脉冲同步器需要注意,这种脉冲同步器的方法为在发送时钟域中,每接收到一次脉冲,传递信号的电平发生一次跳变,传递信号通过同步器传递到接收时钟域后使用边沿检测还源出脉冲。
位宽推断
verilog的位宽推断的基本准则为:中间值的位宽=整个表达式中所有操作数(包括结果,即等号左边的数字),例如:
a[7:0] = b[9:0] + c[4:0]
该表达式b+c的结果为10bit,赋值给a的时候舍去最高2bit,再例如:
a[7:0] = b[7:0] + c[7:0]
该表达式b+c的结果为8bit,因此很容易产生数据溢出的问题(255+255->254)
宏定义
宏定义的方式为使用``define A B进行,声明一个宏定义A,内容是B,使用时需要使用\
A表示这是一个宏定义。宏定义的使用可以理解为“字符串呼唤”,即在代码中使用`A从字符串角度等效于B,如下例子:
`define SUM A+B+C
assign a = `SUM; // 使用宏定义
assign a = A+B+C; // 宏定义等效
注意宏定义不需要使用;
结尾,否则;
也会被替换,如下:
`define SUM A+B+C;
assign a = `SUM; // 使用宏定义
assign a = A+B+C;; // 宏定义等效
香农公式
香农公式描述了信噪比-带宽-信道容量之间的关系,公式如下所示:
功耗公式
低功耗相关
DFT相关
设计流程
异步FIFO
待编写
I2C
UART
SPI