逻辑门与CMOS晶体管
逻辑门
除此之外还有XNOR(同或), 三输入NOR门(NOR3)等。
对电压的抽象我们要将某一范围内的电压表示0,而另一范围内的电压表示1.例如一个5v的范围,我们用3.6v - 5v表示逻辑1,而0v - 2.4v表示逻辑0中间一部分既不表示0又不表示1。
由于电压会随运输而波动损耗,因此输出端的电压要比输入端的电压更为苛刻。
如图,左边就是输出端允许的电压范围,可以看见和右边都有一定差值,这个差值就是噪声容限。而右边输入端的电压经过调节,到了输出端电压范围又会变成左边那样。
这个调节实际上是晶体管本身的特性。
如图是非门的输入输出电压变化,其中A是输入,Y是输出。可以看到在$V{IL}$附近电压有一个大的跳跃,因此输入电压在$V{IL}$到$V_{IH}$之间是不可以的。
因此使用了一系列标准对逻辑高和逻辑低的范围进行了限制。
逻辑系列
$V_{DD}$
$V_{IL}$
$V_{IH}$
$V_{OL}$
$V_{OH}$
TTL(晶体管)
5(4.75 - 5.25)
0.8
2.0
0.4
2.4
COMS(互补性金属-氧化物)
5(4.5 - 6) ...
时序逻辑设计
时序逻辑电路的输出是由上一刻的输出和这一刻的输入共同决定,也就是说时序电路带有记忆。
锁存器和触发器双稳态电路
例如Q是1,则经过L1后变为0,因此$\bar{Q}$ 为0,然后又给L2输入,再回到Q还是1。所以Q始终为1,$\bar{Q}$始终为0,因此称为双稳态电路。
这是它的等价形式,注意这张图是有问题的,L1和L2要变换位置。
SR锁存器上面的双稳态电路不方便输入,因此SR锁存器在双稳态电路上做了改进。
如图,添加了R和S两个输入端,当R和S为下列值时,Q输出为
R(reset)
S(set)
$Q^+$(Q下一时刻状态)
0
0
Q(保持)
0
1
1(置位)
1
0
0(复位)
1
1
x
主要是二者都为1的情况。二者都为1时,Q和$\bar{Q}$都是0,这就违背了Q和$\bar{Q}$的本意。
并且在二者变成0(保持状态)之后,如果是同时变成0,那么Q和$\bar{Q}$先同时变成1,然后同时变成0,这样来回震荡。
当然同时改变时不可能的,如果R先变成0,那么Q为1,$\bar{Q}$为0。反之Q为0,$\bar{Q}$为1.
因此 ...
硬件描述语言
硬件描述语言(HDL)大致功用硬件描述语言和逻辑电路之间的关系类似于c语言和机器代码。c语言通过编译器编译成机器码,而硬件描述语言通过硬件描述语言综合器变成硬件电路网表文件。
硬件描述语言和高级语言的一大区别是硬件描述语言的基本运行逻辑是并行,而高级语言是顺序执行
在HDL中,只有一部分是可以综合的,称为可综合的HDL。另外一部分主要用于仿真验证(例如等几秒后再进行下一步)
综合器大致工作过程为:
将RTL描述通过EDA工具翻译成未经过优化的设计约束
然后进行逻辑优化。去除冗余逻辑
之后根据工艺库实现逻辑电路及其布线。工艺库由中芯国际和台积电等公司提供
语法基础框架:module mux2(input logic D0, D1, sel, output logic y); logic a, b; assign a = D0 & (~sel); assign b = D0 & sel; assign y = a | b;endmodule
module endmodule: 定义了一个模块,注意module后面有一个;,而endmodul ...
组合逻辑设计
组合电路和时序电路
组合电路: 由当前输入值决定输出值
时序电路: 由当前输入值和前一阶段的输入值共同决定输出
例如:
图b和图f属于时序电路,因为它的输出转化为了下一次的输入。图f中的符号是组合电路
图d是一个错误电路,因为到n6点可能会冲突
布尔表达式一些术语:
*: 与符号,取交集,也叫相乘
+: 或符号,取并集,也叫相加
项: 变量或者它的反
最小项: 一个包含全部输入变量的乘积项。例如有三个变量A、B、C,则ABC是一个最小项(也就是 $A \cap B \cap C$), 而AB不是
最大项: 包含全部输入的和。 例如 A + B + C(也就是$A \cup B \cup C$)是一个最大项
蕴涵项: 多个项相乘
与或式与或与式与或式
A
B
Y
最小项
最小项名称
0
0
0
$\bar{A} \bar{B}$
$m_{0}$
0
1
1
$\bar{A} B$
$m_1$
1
0
0
$A \bar{B}$
$m_2$
1
1
0
A B
$m_3$
真值表每一项都和一个为 TRUE的最小项相关联,并且它的编号正好是AB的 ...
sv class
基础class sv_class; //class properties int x; static byte no_pkts_created; //method-1 task set(int i); x = i; endtask //method-2 function int get(); return x; endfunction static function get_pkt_ctr(); $display("ctr=%d", no_pkts_created); endfunction function new(); this.x = x; $display("pkt_id: %d", no_pkts_created); no_pkts_created++; endfunction function sv_class copy(); // 深复制 copy = new(); copy.x = this.x; return copy; endfunctionendclass// 实例化module cl ...
IC验证覆盖率
验证分为动态仿真和静态/形式检查两种方式
动态仿真通过测试序列和激励驱动DUT,然后判断输出是否符合预期。需要仿真器的配合
静态检查不需要仿真,它分为多个种类:
语法检查
语义检查
跨时钟域检查
形式验证:形式验证分为等价性检查(EC)和属性检查(PC)。EC用来保证两个电路等价,PC
覆盖率用于衡量设计完整性。覆盖率工具会收集信息,然后生成覆盖率报告,通过修改或创建新的测试来填补盲区,然后将这些测试结果合并。
覆盖率类型:代码覆盖率,断言覆盖率、功能覆盖率
代码覆盖率具体分类:
行覆盖率: 哪些行代码被执行过
路径覆盖率: 具体哪些代码和表达式被执行过
翻转覆盖率: 触发器的值为0或1
状态机覆盖率
功能覆盖率是用户定义的,功能覆盖率达到100%可以说明某些令人关注的情况已经被覆盖,但是测试点不一定被完全覆盖,
覆盖率具体表现为代码中的一个个覆盖点,覆盖点定义于覆盖组(covergroup)中,而覆盖组可以定义于class、interface、module中
module cov; logic clk; logic [7:0] addr; logic ...
UVM
UVM介绍UVM即Universal Verification Methodology,他是在VMM(Verification Methodology Manual)、OVM(OpenVerification Methodology)后于2011年2月发布的。
UVM目的在于提供一些可重用的类用来减轻项目之间的水平复用和垂直复用的工作量。
UVM涵盖了从模块级到芯片级,ASIC到FPGA,以及控制逻辑、数据通路到处理器验证对象的全部场景。
UVM的整体结构
task run_test(string test_name=""); uvm_root top; uvm_coreservice_t cs; cs=uvm_coreservice_t::get(); top=cs.get_root(); top.run_test(test_name);endtask
上述代码是uvm的顶层,它构造了uvm_root并且运行测试test_name,即运行uvm_test的实例
如上图所示uvm_test中包含uvm_env,而uvm_env中包 ...
低功耗技术
功耗计算静态功耗: 由于PN结存在反向漏电流产生的
P_{s} = I_{leak} \cdot V_{DD}其中$I{leak}$为漏电流,$V{DD}$为供电电压。此外随着温度的升高,漏电流也会随之升高。
动态功耗:动态功耗主要由CMOS从0和1的翻转过程中产生的功耗。具体可分为翻转功耗和短路功耗
翻转功耗:当门翻转时,负责电容充电和放电,称为翻转功耗。公式为:
P_{switch} = \alpha \cdot C \cdot V_{DD}^{2} \cdot f$\alpha$为晶体管翻转比例,f为时钟频率,C为节点电容大小(常数)
短路功耗: pmos和nmos在翻转时二者会有短暂时间同时导通,这段时间$V{DD}$和$V{SS}$间有电流经过,公式为:
P_{l} = t_{sc} \cdot V_{dd} \cdot I_{peak} \cdot f其中$t{sc}$是泄露时间,$I{peak}$是总的短路电流
随着工艺的进步,电源电压降低,泄露电流$I_{leak}$增加,因此静态功耗占比越来越大
功耗降低方式抽象层次从高到低,依次有系统级、体系结构级、寄存器传输 ...
关系数据库模型
基础关系模型是人们为了描述关系而建立的一种二维表,这个二维表叫做关系。
关系模型中的一些术语:
属性: 列名,例如图中title、year、length等
模式: 关系名和属性集合叫做这个关系的模式。例如Movies(title, year, length, genre).模式中的属性其实是集合
元组: 除了首行外的其他行叫元组。每个元组中的各个分量都对应各个属性。
域: 其实也就是数据类型,如果上面的域分别是string、 Integer、 integer、 string。因此也可以加上域来描写模式Movies(title: string, year: integer, length: integer, genre: string)
键: 键是区分该行和其他行的唯一标识。例如title和year构成了一个键。也就是说没有两部电影的制作年份和名字都相同(当然这种键并不好,可能会有冲突)。也可以只使用一列构成一个键,例如我们的身份证号。它的模式可以表示为: Movies(title, year, length, genre)
在SQL中定义关系SQL中有三种关系: 表、视图、临时表. ...
概率上下文无关文法
基础上下文无关文法(CFG)是一些固定的语法知识,例如
S ->NP, VP 句子可以由动词词组和名词词组构成NP->Det, Noun Det和Noun可以构成一个名词词组VP->Verb, NP 动词词组可以由动词+名词词组构成NP->eyes eyes是名词词组
通过这些规则我们可以找到一个句子的句法分析树。但是我们可能会找到非常多的句法分析树,并且没有办法判断到底使用哪一种。因此想到给每一个语法分配一个概率值。也就是概率上下文无关文法
S->NP VP 1.0PP->P NP 1.0VP->V NP 0.7P->With 1.0...
一些符号定义
G: 语法
L: 由语法生成的语言
t: 句法分析树
{N^1 ... N^n}: 非终结符号集合,也就是NP,P等参数
{w^1 ... w^n}: 终结符号集合,也就是实实在在的单词
w_1 ... w_m: 句子序列
N^j_{pq}$$: 覆盖$$w_p 到 w_q$$的非终结符$$N^j
例如一个句子: astronomers saw stars with eyes,它的 ...