首页/文章/ 详情

《数字电子技术》之第四章 组合逻辑电路(完结篇)

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/博士学历/特邀专家/独家讲师
平台推荐
内容稀缺
5月前浏览8557
之前在讲解第三章的时候,让22级一位美女学生按照书中内容编写verilog代码,模块写好了,但是无法进行仿真!看看什么情况!一起来找问题吧!
什么题目?

文件内容如图所示!

这是程序的解释!


提示有语法错误!

修订后,正常!
测试文件代码简要说明!
定义时间单位: `timescale 1ns/1ns    表示时间单位为1ns,时间精度为1ns。
#10   表示延时10个单位的时间,时间单位为1ns时,该语句表示延时10ns。
测试模块的命名:建议使用tb_<功能模块名>。

输入信号初始化:initial 语句进行初始化,该语句中的代码块只执行一次。

用always语句实现信号在仿真过程中的电平变化。always在仿真过程中将被多次执行,always后面最好只有一条语句。

建议好好看看老师推荐的书籍中的第八章!

此书已经共享多次!

然后再看这一章!

回到程序讲解!此时仿真时提示错误!
怎么办?上网寻找帮助吧!后来仔细看了模块文件,发现只有三个参数,将测试模块中不用的参数去除,仿真即可完成!

Testbench代码的本质是通过模拟输入信号的变化来观察输出信号是否符合设计要求!因此,Testbench的核心在于如何模拟输入信号,并把模拟的输入信号输入到功能模块中产生输出信号。可以通过随机数产生输入信号,也可以通过实例化模块把模拟输入信号传入功能模块中。
开关级建模是比门级建模更为低级抽象层次上的设计。在极少数情况下,设计者可能会选择使用晶体管作为设计的底层模块。随着电路设计复杂度及相关先进工具的出现,以开关为基础的数字设计慢慢步入黄昏。不管怎样,先把这方面的内容做个回顾!

注意:程序中vdd中使用小写字母不影响程序的运行!但是关键词不能写错!
在Verilog HDL中,supply0和supply1是用来指定地网络或者电源的关键词。这些关键词通常用于处理不同的电源域或者在一个模块内部存在多个电源/地引脚的情况。supply0关键词用于指定电源网络,该网络连接到逻辑电平0(即低电平)。supply1关键词用于指定电源网络,该网络连接到逻辑电平1(即高电平)。
以下是一个简单的例子,展示如何在模块中使用supply0和supply1。
module example(input wire i, output wire o);
supply0 vss;
supply1 vcc;
// 这里可以是不同的电源或地引脚
assign o = i; // 连接i到o,这里的o会接收到由i决定的电平值。
// 因为vcc和vss没有被连接到其他地方
endmodule
再来个测试吧,模块中调用模块该如何完成,一步一步走向复杂!

后续还要学习数据流行为建模!

此时,老师也是经过了两个小时的学习!同学们更需要长时间的看书学习哦。接着看美女学生的讲解视频。经历了失败和成功,肯定会有成就感!

看看老师的讲解过程!

以后再请大家欣赏3.9.2的程序编写过程,也是请美女学生完成的!课堂上还有位帅哥也进行了程序编写,中间发生了一点小插曲。

错误查找过程很辛苦,但找到了就会很开心!以反引号 ` 开始的某些标识符是 Verilog 系统编译指令(如`timescale 1ns/1ps)。编译指令为 Verilog 代码的撰写、编译、调试等提供了极大的便利。注意:打出反引号`是要在英文输入状态!

开始讲解第四章!
考试的重点!

本章一定要多做习题以强化理解!是在课堂上还是在课后,我都会通过做大量的题目来大家巩固学过的知识。现在不会做不要紧,还可以通过查资料、看书来完成题目的解答。这样的学习过程自然会让你觉得烦,但肯定好过此门课程挂科的滋味。2024年,我给机器人专业的学生上此门课程,我就担心有几位同学会挂科。但我已经努力了。我曾经两次请他们回到课堂上,也希望他们能够在课堂上好好的把以前的知识给补起来,但效果差强人意。不知他们何时能醒悟?也许是无尽的等待,也许是突然的悔悟。
学习是要自己主动才行!
主动学习也必能学好!
理论用于解决实际问题!


步骤请记清楚!
做题的时候按照步骤来就可以了!很多同学不能通过真值表来完成逻辑功能的评述,早期都是这样的,等题目做多了,自然就把很多电路的功能记记在脑子里了。唯有通过布置了大量的课堂作业和课后作业用来消化分析过程!欣慰的是效果还算满意,至少练到了都会做题。当然培养大学生不可能只为了让他们会做题,更多的是能够进行实际的电路分析和设计,这条实践之路走起来很艰难。到目前也就三个学生愿意跟着我进行 Verilog 编程来进行相关功能的验证。

如要实现四个变量的偶校验,电路又应做何改变?
用Verilog写个程序仿真一下吧!为何一直强调仿真呢?看看下面的岗位要求!实用型工科教学不是喊口号,是需要将未来的工作需求在教学中有所体现!做不到完全匹配,但至少能给学生打下基础!

学好一门知识肯定需要长时间的累积过程!


波形图是逻辑分析的辅助工具!
很好用!
再来个测试!
学会了分析,更要学会设计!
研发工作侧重设计!

设计步骤要牢记!
在没能熟练设计电路之前,不推荐简化写法!反正混淆!开始做题训练!
课上同学们做的很认真!出错是正常现象,但要能知错即改,课后还要再复习一下!课堂上出现多次重复错误的现象,让老师感到有点累!继续做题!
例4.2.2  试设计一个码转换电路,将4位格雷码转换为自然二进制码。可以采用任何逻辑门电路来实现。
那就开始解题吧!
解:(1) 明确逻辑功能,列出真值表
设输入变量为G3、G2、G1、G0为格雷码,输出变量B3、B2、B1、B0为自然二进制码。
列出逻辑电路真值表。


在课堂上让同学们进行了大量的练习,也将卡诺图的变量扩展成了五个!不断的练习才能保证熟练的掌握,这样考试中才能正确解题!2024年带的学生基础不是特别好,需要用这种模式来保证他们通过考试的合格率。这种模式会让教学进展的很慢,到了第七周了,第四章还没有讲完。

实际情况!

时延导致的竞争冒险!


在课堂上和同学们一起画图体会出错的过程!

基本概念!
竞争:当一个逻辑门的两个输入端的信号同时向相反方向变化,而变化的时间有差异的现象。

冒险:两个输入端的信号取值的变化方向是相反时,如门电路输出端的逻辑表达式简化成两个互补信号相与或者相或,由竞争而可能产生输出干扰脉冲的现象。

在卡诺图中,相切代表了不同输入变量之间的关系,通常用于优化逻辑电路或者逻辑函数。当卡诺图中的两个区域相切时,表示这两个区域之间只有一个变量的状态发生了改变。在逻辑电路中,这种相切的情况可能会导致竞争冒险的问题。两种方法都能判断是否存在竞争冒险!那么如何消除呢???

许多常用的组合逻辑电路被制成了中规模集成电路(MSI),广泛应用于数字电路和数字系统的设计中。
1. 这些典型集成电路本身就是一种完美的逻辑设计作品,考虑周到,功能齐全,值得我们在组合逻辑电路设计时学习和借鉴。
①. 具有各种使能、控制输入,提供各种信息输出;
②. 具有扩展、级联的功能;
③. 通用性强。
2. 学习典型组合逻辑集成电路的重点是应用。
①. 要能够通过阅读MSI器件的功能表,掌握器件的逻辑功能;
②. 能根据器件的功能正确应用。

典型的组合逻辑电路!

之前我们是不是已经做过进制转换的运算!有了编码器,人算就可以用机器运算代替了!如果有了更多替代,是不是就不需要人了啊?人工智能有这个趋势!
1、编码器的定义与工作原理——编码器分类
编码器的分类:普通编码器和优先编码器。
普通编码器:任何时候只允许输入一个有效编码信号,否则输出就会发生混乱。
优先编码器:允许同时输入两个以上的有效编码信号。当同时输入几个有效编码信号时,优先编码器能按预先设定的优先级别,只对其中优先权最高的一个进行编码。

这种编码器也有一些实际的应用场景:

  1. 存储器选择器:在存储器系统中,需要选择特定的存储单元进行读取或写入操作。四线二线编码器可以用于将存储单元的地址编码成两位二进制数字,然后将其用作存储器的选择信号。这种编码器可以用于RAM、ROM等存储器芯片的地址选择。

  2. 数码显示器控制:在数码显示器控制电路中,四线二线编码器可以用于将数字信号编码成数码管的控制信号。例如,将四位二进制数字编码成两位BCD码(Binary-Coded Decimal),然后通过编码器将其转换为适合数码管显示的控制信号。

  3. 错误检测和校正:在通信系统或数据传输系统中,需要进行错误检测和校正。四线二线编码器可以用于将输入数据编码成特定的格式,以便在接收端进行错误检测和校正。例如,通过使用哈姆ming码或其他纠错码,可以将输入数据编码成两位二进制数字,然后发送到接收端进行校验。

  4. 控制逻辑:在数字逻辑电路中,需要进行各种控制和逻辑操作。四线二线编码器可以用于生成控制信号或逻辑操作的输入信号。例如,将四个逻辑输入编码成两位二进制数字,然后根据编码结果执行相应的逻辑操作或控制行为。

综上所述,四线二线编码器在数字系统中有着广泛的应用,可以用于地址编码、数码显示控制、错误检测和校正以及控制逻辑等方面。

(2) 优先编码器 
实际应用中,经常有两个或更多输入编码信号同时有效,必须根据轻重缓急,规定好这些外设允许操作的先后次序,即优先级别。
优先编码器:识别多个编码请求信号的优先级别,并进行相应编码的逻辑部件称为优先编码器。
允许同时输入两个以上的有效编码信号。当同时输入几个有效编码信号时,优先编码器能按预先设定的优先级别,只对其中优先级最高的一个进行编码。

在数字电路中,编码器是一种电路或设备,用于将输入的数字信号转换为特定的编码格式。编码器的主要作用是将输入信号转换成对应的编码形式,以便于传输、存储或处理。
理解编码器可以从以下几个方面入手:
  1. 数字信号的编码:在数字电路中,信息通常以数字信号的形式表示。而不同的应用场景可能需要不同的信号编码格式。例如,计算机内部使用的数据表示形式、通信系统中的调制方式等,都需要特定的编码格式来表示信息。编码器就是用来将原始的数字信号转换为这些特定格式的关键设备之一。
  2. 信号的压缩与优化:编码器可以通过特定的编码方式来对信号进行压缩和优化。通过合适的编码算法,可以将原始信号表示成更简洁、更有效的形式,从而节省存储空间、减少传输带宽,并提高信息传输的效率和可靠性。
  3. 数据传输与处理:在数字通信系统中,编码器通常用于将数字信息转换成合适的传输格式。例如,在数字通信中,常用的编码方式包括差分编码、曼彻斯特编码、格雷码等。这些编码方式可以增强信号的抗干扰能力、提高数据传输的可靠性,同时也可以简化接收端的解码过程。
  4. 应用领域:编码器在数字电路中有着广泛的应用,涵盖了多个领域,如通信系统、计算机网络、图像处理、音频处理等。在每个领域中,编码器的设计和选择都会根据具体的需求和应用场景进行优化。
  5. 编码器的种类:根据不同的应用需求,编码器可以分为多种类型,如数字信号编码器、音频编码器、视频编码器等。每种类型的编码器都有特定的设计原则和技术特点,以适应不同的应用场景。
总的来说,编码器在数字电路中扮演着重要的角色,它通过将原始的数字信号转换成特定的编码格式,实现了信号的压缩、优化、传输和处理,为数字系统的设计和应用提供了基础支持。
有编码过程,就有译码过程!再来学习译码器
这种译码器也有一些实际的应用场景:
  1. 地址译码:在存储器系统或I/O接口中,需要将输入地址译码成特定的存储单元或设备。二四线译码器可以用于将两位二进制地址译码成四个输出线路,然后将其用作存储器的选择信号或设备的使能信号。

  2. 数码显示器驱动:在数码显示器控制电路中,二四线译码器可以用于将两位二进制数字译码成适合数码管的控制信号。例如,将两位BCD码(Binary-Coded Decimal)译码成适合数码管显示的控制信号,以便实现数字的显示。

  3. 逻辑门输入选择:在数字逻辑电路中,可能需要根据不同的逻辑条件选择输入信号。二四线译码器可以用于根据两位二进制输入选择四个逻辑门中的一个,并将其作为输出信号。这种应用可以用于实现多路选择器或逻辑函数的实现。

  4. 状态控制:在控制系统中,二四线译码器可以用于将两位状态编码成四个输出信号,用于控制不同的状态或操作。例如,将两位二进制状态译码成四个控制信号,用于控制机器人的运动或工业设备的操作。

综上所述,二四线译码器在数字系统和控制系统中有着广泛的应用,可以用于地址译码、数码显示器控制、逻辑门输入选择以及状态控制等方面。
74HC138的名称要记住!
更要记住:字母上的—号表示低电平有效!
74HC138作为一种通用的译码器,具有广泛的应用领域,包括地址译码、数据选择、显示控制、状态识别和多路复用器控制等方面。
A3其实等效于片选信号!
对应接口连线方式需要注意!
回顾和总结!
实践!
先看看以后做实验需要用的软件!

Multisim14.0!安装过程演示!

我也是从小白开始的,和大家一起学习!只要努力,大家学的肯定会比我好!
下面的知识不会在考试中出现,但是在这个行业的确是非常重要且实用的知识,希望同学们能够跟着老师的步伐一起学起来!现在的工作很少离得开编程!

之前提过!

本章开始学习行为方式建模!

这些知识和C语言是一样的!

在Modelsim里面演示一遍吧!

这个语法知识和C语言稍有差异!

Verilog 中的 case 语句和 C 语言中的 switch 语句有一些相似之处,但也存在一些重要的差异。

语法形式:Verilog 中的 case 语句是一种组合逻辑的语句,用于根据某个信号的取值选择不同的执行路径。它的基本语法如下:

    case (expression)

      value1: statement1;

      value2: statement2;

        ...

      default: default_statement;

    endcase


    C 语言中的 switch 语句是一种选择结构的语句,用于根据某个整型表达式的值选择不同的执行路径。它的基本语法如下:



    表达式类型:Verilog 中的 case 语句的表达式可以是一个任意宽度的信号(比如 regwire),也可以是一个整型常量。每个 case 分支的值可以是信号的取值,也可以是常量。如果分支的值是一个范围,Verilog 会自动展开为对应的单个值。C 语言中的 switch 语句的表达式必须是整型或字符型的,不能是浮点型或其他类型。

    默认分支:在 Verilog 中,可以选择性地使用 default 分支来处理未覆盖的情况。如果没有匹配的分支,并且没有提供 default 分支,Verilog 不会执行任何操作。在 C 语言中,default 分支是可选的,但通常建议提供一个默认分支以处理未匹配的情况。

    不同分支执行:在 Verilog 中,一旦匹配到一个分支,将执行该分支及其以下所有语句,除非在分支末尾使用 break 类似的语句来显式跳出 case 语句。在 C 语言中,一旦匹配到一个分支,只会执行该分支后面的语句,然后退出 switch 语句,除非在分支末尾使用 break 语句显式跳出 switch 语句。

总的来说,虽然 Verilog 中的 case 语句与 C 语言中的 switch 语句有一些相似之处,但它们在语法形式、表达式类型和执行方式等方面存在一些重要的差异。

再来一题!

后介绍一下for循环语句,无处不在!

未完,待续!

修订记录

20240210 完成初稿;

20240414 修订内容;



来源:通信工程师专辑
电源电路通用电子芯片通信理论机器人控制人工智能Multisim
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-05-11
最近编辑:5月前
算法工匠
博士后 | 高级工程师 诚信做事 认真讲课 传播知识
获赞 395粉丝 2573文章 315课程 40
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈