Verilog描述——组合逻辑电路浅析

2023-12-23 07:58

本文主要是介绍Verilog描述——组合逻辑电路浅析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

组合逻辑电路浅析

由于某些原因,又重新看是看了本科的教材——《电子技术基础数字部分》,经过两年半的工作,再次看到上面的内容,感觉到自己的基础环节着实薄弱,所以,就从书上找些基础内容,学习记录下来;

组合逻辑电路

原来,典型的一些中规模集成电路,都是属于组合逻辑电路,比如:编码器,数据选择器,数据分配器,数值比较器,算数逻辑运算单元等。

组合电路的结构具有如下特点:

  1. 输出、输入之间没有反馈延迟通路;
  2. 电路中不含具有记忆功能的元件。

组合逻辑电路的门级建模

基本门级元件

Verilog语言中内置了12个基本门级元件模型:门级元件的输出、输入必须为线网类型的变量。

当这些元件进行逻辑仿真时,仿真软件回根据程序的描述给每个元件中的变量分配逻辑0,逻辑1,不确定态x,和高阻态z这4个值之一。

元件符号功能说明元件符号功能说明
and多输入端的与门nand多输入端的与非门
or多输入端的或门nor多输入端的或非门
xor多输入端的异或门xnor多输入端的异或门
buf多输入端的缓冲器nor多输入端的反相器
bufif11控制信号高电平有效的三态缓冲器notif1控制信号高电平有效的三态反相器
bufif0控制信号低电平有效的三态缓冲器notif0控制信号低电平有效的三态反相器
设计举例

Verilog语言的门级元件进行描述:由三态门构成的2选1数据选择器。

[分析]2选1选择器的门级描述如下述程序所示。两个三态门的输出都与L相连,即输出线L被两个三态门驱动,为了说明这种情况,建议将输出变量L定义成tri数据类型。

// Gate-level description of a 2-to-1-line multiplexer 
module _2to1muxtri(A, B, SEL, L);input A, B, SEL;output L;tri L;bufif1(L, B, SEL);bufif0(L, A, SEL);
endmodule

这里差一个图。

组合逻辑电路的数据流建模

对于基本单元逻辑电路,使用Verilog语言提供的门级元件模型描述电路非常方便,但随着电路复杂性的增加,使用的逻辑门较多时,使用HDL门机描述的工作效率就很低。

数据流建模能够在较高的抽象级别描述电路的逻辑功能,并且通过逻辑综合软件,能够自动将数据流描述转换为门级电路。

运算符

有点基础的就不用在此叙述了,运算符有双目运算符,单目运算符,三目运算符(不常用,全等===和不全等!==)。

要注意,位运算和缩位运算,在之前的文章中有介绍Verilog实用操作。

数据流建模举例

使用条件运算符描述一个2选1的数据选择器。在连续赋值语句中,如果SEL=1,则输出L=A,否则L=B

// Dataflow description of 2-to-1-line multiplexer
module mux2x1_df(A, B, SEL, L);input A, B, SEL;output L;assign L = SEL ? A : B;
endmodule

从上面的例子看,数据流建模根据电路的逻辑功能进行描述,不必考虑电路的组成以及元件之间的连接,时描述组合逻辑电路常用的一种方法。

组合逻辑电路的行为级建模

行为级建模就是描述数字逻辑电路的功能和算法,一般使用always结构,后面跟着一系列过程赋值语句,给reg类型的变量赋值。

always结构内部使用的逻辑表达式就是一种过程赋值语句,除此之外,还有一些与高级程序设计语言类似的语句,常用的有条件语句(if-else)和多路分支语句(case-endcase)等。

重要的敏感变量

行为级描述的标识是always结构。

always是一个循环执行语句,在它后面跟着循环执行的条件@(SEL or A or B)(注意后面没有分号),它表示圆括号内的任一变量发生变化时,下面的过程复制语句就会被执行一次,,执行完最后一条语句后,执行挂起,always语句再次等待变量发生变化,因此将圆括号内列出的变量成为敏感变量

对组合逻辑电路来说,所有的输入信号都是敏感变量,应该被写在圆括号内

注意:

  1. 敏感变量之间使用关键词or代替了逻辑或运算符|
  2. 过程赋值语句只能给寄存器型变量赋值,因此,程序中将输出变量L定义成reg数据类型。
行为级建模举例

混合使用if-else和case语句描述带有是能控制端的4选一数据选择器。

// Behavioral description of 4-to-1 line multiplexer
module mux4to1_bh(A, SEL, E, L);input [3:0] A;input [1:0] SEL;output L;reg L;always @(A or SEL or E) beginif (E == 1) beginL = 0;end else begincase(SEL)2'd0: L = A[0];2'd1: L = A[1];2'd2: L = A[2];2'd3: L = A[3];endcaseendend
endmodule        

小结

Verilog对组合逻辑电路建模时有三种不同的描述风格,即:

  1. 门级建模;
  2. 数据流建模;
  3. 行为级建模;

  1. 改关键词可分两部分理解,buf时buffer的缩写,表示该元件完成缓冲器的功能;后面的if1表示完成该功能所需要的条件,即控制信号为逻辑1。 ↩︎

这篇关于Verilog描述——组合逻辑电路浅析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/527281

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

hdu4869(逆元+求组合数)

//输入n,m,n表示翻牌的次数,m表示牌的数目,求经过n次操作后共有几种状态#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#includ

Go组合

摘要 golang并非完全面向对象的程序语言,为了实现面向对象的继承这一神奇的功能,golang允许struct间使用匿名引入的方式实现对象属性方法的组合 组合使用注意项 使用匿名引入的方式来组合其他struct 默认优先调用外层方法 可以指定匿名struct以调用内层方法 代码 package mainimport ("fmt")type People struct{}type Pe

(入门篇)JavaScript 网页设计案例浅析-简单的交互式图片轮播

网页设计已经成为了每个前端开发者的必备技能,而 JavaScript 作为前端三大基础之一,更是为网页赋予了互动性和动态效果。本篇文章将通过一个简单的 JavaScript 案例,带你了解网页设计中的一些常见技巧和技术原理。今天就说一说一个常见的图片轮播效果。相信大家在各类电商网站、个人博客或者展示页面中,都看到过这种轮播图。它的核心功能是展示多张图片,并且用户可以通过点击按钮,左右切换图片。

zblog自定义关键词和描述,zblog做seo优化必备插件

zblog自定义关键词和描述,zblog做seo优化必备插件     首先说下用到的一款插件:CustomMeta自定义数据字段 ,我们这里用到的版本是1.1,1.1+版增加了列表页标签支持!     插件介绍:文章,分类等添加自定义数据字段。1.1+版适用于 Z-Blog 2.0 B2以上版本。     在zblog2.0beta1里面,这个插件是集成到了程序里面,beta2里面默认没有了

组合c(m,n)的计算方法

问题:求解组合数C(n,m),即从n个相同物品中取出m个的方案数,由于结果可能非常大,对结果模10007即可。       共四种方案。ps:注意使用限制。 方案1: 暴力求解,C(n,m)=n*(n-1)*...*(n-m+1)/m!,n<=15 ; int Combination(int n, int m) { const int M = 10007; int

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

INDEX+SMALL+IF+ROW函数组合使用解…

很多人在Excel中用函数公式做查询的时候,都必然会遇到的一个大问题,那就是一对多的查找/查询公式应该怎么写?大多数人都是从VLOOKUP、INDEX+MATCH中入门的,纵然你把全部的多条件查找方法都学会了而且运用娴熟,如VLOOKUP和&、SUMPRODUCT、LOOKUP(1,0/....,但仍然只能对这种一对多的查询望洋兴叹。   这里讲的INDEX+SMALL+IF+ROW的函数组合,

数字电路专题:verilog 阻塞赋值和非阻塞赋值

verilog 阻塞赋值 和 非阻塞赋值 “=”阻塞赋值, ”<=”非阻塞赋值。阻塞赋值为执行完一条赋值语句,再执行下一条,可理解为顺序执行,而且赋值是立即执行; 非阻塞赋值可理解为并行执行,不考虑顺序,在 always 块语句执行完成后,才进行赋值。 如下面的阻塞赋值: //代码如下:module top(din,a,b,c,clk);input din;input clk;out

代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt