2.逻辑代数与硬件描述语言基础
2.1 逻辑代数的基本定理和规则
①逻辑代数
布尔代数
②逻辑关系
条件与结果之间的因果关系
输入信号:条件
输出信号:结果
逻辑变量:字母,可以取值1或0
①0、1律:与1和0的加或乘
②互补律:反事件的加或乘
③交换律:加或乘的交换
④结合律:加或乘的交换
⑤分配律:乘法括号的拆分,\mathbf{A} \times \mathbf{A}还是A,也就是下面的重叠率
注意反过来的使用
⑥重叠律:
原则就是把所有情况列举还是成立,并且如果两个1相加还是1
A\overline{A}=0
反演律(摩根定律)
乘法拆解为加法,加法拆解为乘法
这里可以把多个逻辑值的和看作一个逻辑值
⑦吸收律
让B根据A的真假决定输出结果,先拆开,再结合吸收律
这里只是等号成立,根据全面计算得到,并且只能取1和0
拆开后使用吸收律
这里的多个字母相加,因为最后结果不会超过1,所以成立
创造结合律
⑧恒等式
使用真值表证明
完全归纳法
吸收律
运算举例说明
①代入规则
使用事件代入事件
配合其他运算律
②反演规则
注意与反演律区分,是整个式子的结果改变
加变成乘,正变成反
1、注意优先级
先与后或
2、非变量以外的非号保持不变
非符号只改变一次,超过一次的非符号不改变
③对偶规则
对偶式
加法和乘法互换,1和0互换,其他不变
恒等式成立,对偶式也成立
注意与反演区分,这里没有改变逻辑变量本身及其位置保持不变
④香农展开定理
逻辑变量提取,反对应0,正对应1,对应补上
可以减少复杂度
2.2 逻辑函数表达式的形式
①与-或表达式
多个”与“用”或“连接
A-B表达式
多个A用B连接
②或-与表达式
多个“或”用”与“连接
包括没有加号的与
①最小项
多个逻辑变量可以表示的事件的最大数目
所有逻辑变量只出现一次
全是与连接
②最小项性质
1、只有一个组合值为1
2、任意两个最小项相乘为0
3、全体最小项和为1
③最小项的编号
下标0表示全是非的
④最小项表达式
最小项:每个变量以原变量或非变量出现在乘积式中,且只出现1次
全是最小项
标准与-或式
使用编号表示(根据表格)
任何一个逻辑函数都能变换成唯一的最小项表达式
序号使用换成二进制的1和0表示
运算举例说明
①最大项
最大项表达式:每个变量以原变量或非变量出现在加法式中,且只出现1次
全是或连接
逻辑变量只出现一次
逻辑带量这里正变量对应1
M后的序号使用二进制计算
②最大项性质
1、只有一组值为0
2、任意两组的和为1
3、全体乘积为0
③最大项与最小项关系
是互补关系
任意一个逻辑函数经过变换,都能表示成唯一的最大项表达式
凑出形式
使用累乘表示
运算例子
①真值表化为最小项
观察L=1的部分累加
非假即真
满足1个真的条件就是真
只要满足1个真的条件就是真
②真值表化为最大项
观察L=0的部分累乘
非真既假
必须满足所有假的条件才是假
同时不满足所有假的条件才是真
在这里越加越大,越乘越小
2.3 逻辑函数的代数化简法
减少门
实现相同功能
2.3.1 逻辑函数的最简形式
取相反的相反条件不变
最简与-或表达式:每个与项中包含最少的变量数
2.3.2 逻辑函数的代数化简法
代数法:运用逻辑代数的基本定律和恒等式进行化简的方法
①并项法
是和非一定有一个发生
②吸收法
A和A乘积可以同时保持真、非
假设主要事件A的1或0
③消去法
把AB看作1个事件
加法的非事件有B,
④配项法
配出一个“1”,也就是A + \overline{A},再配合分配率
2、逻辑函数形式的变化
变换:
一片集成电路芯片只有一种门电路
减少门电路的种类
化去\overline{D}
与非门后面需要写上\overline{A+B}
全化为与非的形式,可以1个信号通过1个门转换为非事件
2.4 逻辑辑函数的卡诺图化简法
代数化简法困难
1、逻辑代数与普通代数公式
2、经验与灵活性
3、技巧性强
2.4.1 用卡诺图表示逻辑函数
卡诺图
n变量的全部最小项用小方块表示
几何位置
n变量的卡诺图
逻辑相邻的最小项:2个只有1个变量互为反变量的最小项
上下左右再几何上相邻的反方块内只有1个因子差异
原原非:对应110
对应的小方格填上1,没有的最小项填0或者空格
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
举例说明
2.4.2 用卡诺图化简逻辑函数
靠近的最小项都可以合并为“1”:存在原事件与非事件
化简步骤
①逻辑函数写成最小项表达式
②填入卡诺图
③合并最小项,画包围圈,每组2^{n}个方格,写成新的乘积,使用虚线
④乘积项相加
折叠展开
①新增加的方格按展开方向应标以新变量
②方格编号加上2^{n-1}
遵循原则
①方格2^{n}个
②上下底、左右边、四角相邻
③同一个方格可以被不同包围圈重复包围,新增包围圈一定要有未包围方格
④1个包围圈方格尽可能多,包围圈数目尽可能少
举例说明
总的矩形四角也是属于相邻的
简明起见,非变量不标出
二进制的四宫格
最小项表示 | 二进制 | 最小项表示 | 二进制 | 最小项表示 | 二进制 | 最小项表示 | 二进制 |
---|---|---|---|---|---|---|---|
\overline{A}\overline{B}\overline{C}\overline{D} | 0000 | \overline{A}\overline{B}\overline{C}D | 0001 | \overline{A}\overline{B}C\overline{D} | 0010 | \overline{A}\overline{B}CD | 0011 |
\overline{A}B\overline{C}\overline{D} | 0100 | \overline{A}B\overline{C}D | 0101 | \overline{A}BC\overline{D} | 0110 | \overline{A}BCD | 0111 |
A\overline{B}\overline{C}\overline{D} | 1000 | A\overline{B}\overline{C}D | 1001 | A\overline{B}C\overline{D} | 1010 | A\overline{B}CD | 1011 |
AB\overline{C}\overline{D} | 1100 | AB\overline{C}D | 1101 | ABC\overline{D} | 1110 | ABCD | 1111 |
可以表示原事件也可以表示非事件
无关项的化简
约束项:不应该出现的最小项
例如8421BCD码的1010
无关项(任意项、约束项):函数值取1或0的最小项
举例说明
无关项打×
d表示无关项
可以利用无关项化简,因为无关项的取值随意
2.5 硬件描述语言Verilog HDL基础
硬件描述语言
HDL
表示逻辑功能
逻辑仿真:文本形式
逻辑综合:高级程序语言,门级网表
2.5.1 VerilogHDL的基本结构
模块:简单的门电路,或功能复杂的数字电路
①关键词开始、结束
②端口定义、输入输出说明、模块功能描述
inout:双向端口
③个别语句不用分号
④注释
⑤3种不同风格
结构描述方式:调用已定义过的层次较低的子模块、基本门级元件
数据流描述方式:连续赋值
行为描述方式:使用过程块语句结构
语法结构
说明部分
逻辑描述部分
modmle 模块名(端口名1,端口名2,端口名3,··) 端口类型说明(imnput, outout, inout); 参数定义(可选); 数据类型定义(wire,reg等); 实例化低层模块和基本门级元件; 连续赋值语句(assign); 过程块结构(initial和always) 行为描述语句; endmodule
例子说明
①模块名
②端口类型说明
输入、输出信号
③数据类型说明
内部节点信号数据类型
④电路结构描述
与或非
module mux2to1(D0, D1, S, Y ); input D0, D1, S; //定义输入信号 output Y; //定义输出信号 wire Snot, A, B ; //定义内部节点信号数据类型 //下面对电路的逻辑功能进行描述 not U1(Snot, S); and U2(A, D0, Snot); and U3(B, D1, S); or U4(Y, A, B); endmodule
数据类型说明
电路功能描述
assign语句,变量必须是wire型(连线类型)
2选1数据选择器
数据流描述方式
module mux2to1_df( input D0, D1, S, output wire Y ); //电路功能描述 assign Y = (~S & D0) | (S & D1); //表达式左边Y必须是wire型 endmodule
逻辑综合:逻辑关系转换为连接关系表
逻辑图
2.5.2 逻辑功能的仿真与测试
测试逻辑功能是否正确
搭建测试平台
激励块
①设计块
②激励信号
③测试结果的显示格式
①系统任务
②输出到屏幕
③二进制格式
④水平制表符
⑤返回仿真时间
⑥停止仿真
激励块代码
//文件名:test_mux2to1_df.v `timescale 1ns/1ns //时间单位为 1 ns,精确度为 1ns module test_mux2to1_df; //激励块,没有端口列表 reg PD0, PD1, PS; //声明输入信号 wire PY; //声明输出信号 //实例引用设计块 mux2to1_df t_mux (PD0, PD1, PS, PY); //按照端口位置连接 initial begin //激励信号 PS = 0; PD1 = 0; PD0 = 0; //语句1 #5 PS = 0; PD1 = 0; PD0 = 1; //语句2(#5 代表延迟 5 ns) #5 PS = 0; PD1 = 1; PD0 = 0; //语句3 ….(这里省略了语句4-8,写完整) #5 PS = 0; PD1 = 0; PD0 = 0; //语句9 #5 $stop; //语句10 endmodule initial begin //输出部分 $monitor($time, ":\tS = %b\tD1 = %b\tD0 = %b\tY = %b",PS,PD1,PD0,PY); end endmodule
测试步骤
2.5.3 基本语法规则
建模:使用1个或多个模块对数字电路进行描述,不同模块使用端口连接
语法结构
1、间隔符
分隔文本
2、注释符
单行注释符
多行注释符
3、标识符合关键词
标识符
关键词
4、逻辑值集合
基本逻辑值
5、常量及其表示
①整数型:
<+/-><位宽>’<基数符号><数值>
②实数型常量
符号常量
1个标识符代表1个常量
parameter 参数名1=常量表达式1,参数名2=常量表达式2,…;
6、字符串
双撇号内的字符序列
2.5.4 数据类型
1、线圈类型
线圈类型:输出始终跟随输入的变化而更新其值的变量
wire型变量的定义格式如下:
wire [n-1:0] 变量名1,变量名2,…,变量名n; wire L; //将上述电路的输出信号L声明为网络型变量 wire [7:0] data bus; //声明8-bit宽的网络型总线变量
2、变量类型
变量类型:寄存器型,具有状态保持作用的电路元件
4种变量类型:抽象描述,不对应具体硬件
逻辑值变量
32位带符号整数型变量
64位带符号实数型变量
64位无符号时间变量
触发器寄存器:只能在initial或always内部被赋值
reg clock;//定义一个1位寄存器变量 reg [3:0] counter; //定义一个4位寄存器变量
2.5.5 运算符及其优先级
1、运算符
算术运算符
位运算符
逻辑运算符
位拼接运算符
-
将两个或多个信号的某些位拼接起来成为一个新的操作数,进行运算操作
可以直接连接或者特定位
使用双重大括号实现重复拼接
-
数字的表达形式通常是
[位宽]'[进制符号][数值]
。
位运算符与缩微运算的比较
缩位运算:直接
2、运算符的优先级
从下到上越来越优先
高优先级
↑
低优先级
取反>算术>移位>移位>关系>等于>缩位>逻辑>条件
条件运算符
condition_expr?expr1:expr2;
计算结果再返回
第一个操作数
逻辑1选择第二个操作数
逻辑0选择第三个操作数
2.5.6 Verilog内部的基本门级元件
三态门、多输出门、多输入门
门级建模
1、多输入门
and A1(out,in1,in2,in3);
只允许1个输出,允许多个输入
不确定状态x:相当于高电平
高阻态z:相当于低电平
①与真值表
②或运算真值表
③异或运算真值表
2、多输出门
not N1(out1,out2,…,in); buf B1(out1,out2,…,in);
允许多个输出,只允许1个输入
非运算真值表
buf:通常指 缓冲器(Buffer),是一种基本的逻辑门。其真值表非常简单,因为它的输出与输入完全相同,不会改变逻辑状态。
3、三态门
1个输出1个输入1个输入控制
输入控制信号无效则输出为高阻态
bufif1真值表
notif1真值表:带使能控制的反相器