由于某些原因,又重新看是看了本科的教材——《电子技术基础数字部分》,经过两年半的工作,再次看到上面的内容,感觉到自己的基础环节着实薄弱,所以,就从书上找些基础内容,学习记录下来;
组合逻辑电路原来,典型的一些中规模集成电路,都是属于组合逻辑电路,比如:编码器,数据选择器,数据分配器,数值比较器,算数逻辑运算单元等。
组合电路的结构具有如下特点:
- 输出、输入之间没有反馈延迟通路;
- 电路中不含具有记忆功能的元件。
Verilog语言中内置了12个基本门级元件模型:门级元件的输出、输入必须为线网类型的变量。
当这些元件进行逻辑仿真时,仿真软件回根据程序的描述给每个元件中的变量分配逻辑0,逻辑1,不确定态x,和高阻态z这4个值之一。
[color=rgba(0, 0, 0, 0.75)]元件符号功能说明元件符号功能说明and多输入端的与门nand多输入端的与非门
or多输入端的或门nor多输入端的或非门
xor多输入端的异或门xnor多输入端的异或门
buf多输入端的缓冲器nor多输入端的反相器
bufif11控制信号高电平有效的三态缓冲器notif1控制信号高电平有效的三态反相器
bufif0控制信号低电平有效的三态缓冲器notif0控制信号低电平有效的三态反相器
设计举例
用Verilog语言的门级元件进行描述:由三态门构成的2选1数据选择器。
[分析]2选1选择器的门级描述如下述程序所示。两个三态门的输出都与L相连,即输出线L被两个三态门驱动,为了说明这种情况,建议将输出变量L定义成tri数据类型。
这里差一个图。
组合逻辑电路的数据流建模对于基本单元逻辑电路,使用Verilog语言提供的门级元件模型描述电路非常方便,但随着电路复杂性的增加,使用的逻辑门较多时,使用HDL门机描述的工作效率就很低。
数据流建模能够在较高的抽象级别描述电路的逻辑功能,并且通过逻辑综合软件,能够自动将数据流描述转换为门级电路。
运算符有点基础的就不用在此叙述了,运算符有双目运算符,单目运算符,三目运算符(不常用,全等===和不全等!==)。
要注意,位运算和缩位运算,在之前的文章中有介绍Verilog实用操作。
数据流建模举例使用条件运算符描述一个2选1的数据选择器。在连续赋值语句中,如果SEL=1,则输出L=A,否则L=B。
从上面的例子看,数据流建模根据电路的逻辑功能进行描述,不必考虑电路的组成以及元件之间的连接,时描述组合逻辑电路常用的一种方法。
组合逻辑电路的行为级建模行为级建模就是描述数字逻辑电路的功能和算法,一般使用always结构,后面跟着一系列过程赋值语句,给reg类型的变量赋值。
在always结构内部使用的逻辑表达式就是一种过程赋值语句,除此之外,还有一些与高级程序设计语言类似的语句,常用的有条件语句(if-else)和多路分支语句(case-endcase)等。
重要的敏感变量行为级描述的标识是always结构。
always是一个循环执行语句,在它后面跟着循环执行的条件@(SEL or A or B)(注意后面没有分号),它表示圆括号内的任一变量发生变化时,下面的过程复制语句就会被执行一次,,执行完最后一条语句后,执行挂起,always语句再次等待变量发生变化,因此将圆括号内列出的变量成为敏感变量。
对组合逻辑电路来说,所有的输入信号都是敏感变量,应该被写在圆括号内。
注意:
- 敏感变量之间使用关键词or代替了逻辑或运算符|;
- 过程赋值语句只能给寄存器型变量赋值,因此,程序中将输出变量L定义成reg数据类型。
混合使用if-else和case语句描述带有是能控制端的4选一数据选择器。
用Verilog对组合逻辑电路建模时有三种不同的描述风格,即:
- 门级建模;
- 数据流建模;
- 行为级建模;