《数字电子技术》之第四章 组合逻辑电路(完结)
- 作者优秀
- 优秀教师/博士学历/特邀专家/独家讲师
- 平台推荐
- 内容稀缺
之前在讲解第三章的时候,让一位美女学生按照书中内容编写verilog代码,模块写好了,但是无法进行仿真!看看什么情况!
文件内容如图所示!
这是程序的解释!
定义时间单位: `timescale 1ns/1ns 表示时间单位为1ns,时间精度为1ns。#10 表示延时10个单位的时间,时间单位为1ns时,该语句表示延时10ns输入信号初始化:用initial 语句进行初始化,该语句中的代码块只执行一次。
用always 语句实现信号在仿真过程中的电平变化。lways在仿真过程中将被多次执行,always后面最好只有一条语句。
建议好好看看老师推荐的书籍中的第八章!
此书已经共享多次!
然后再看这一章!
怎么办?上网寻找帮助吧!后来仔细看了模块文件,发现只有三个参数,将测试模块中不用的参数去除,仿真即可完成!
Testbench代码的本质是通过模拟输入信号的变化来观察输出信号是否符合设计要求!因此,Testbench的核心在于如何模拟输入信号,并把模拟的输入信号输入到功能模块中产生输出信号。可以通过随机数产生输入信号,也可以通过实例化模块把模拟输入信号传入功能模块中。开关级建模是比门级建模更为低级抽象层次上的设计。在极少数情况下,设计者可能会选择使用晶体管作为设计的底层模块。随着电路设计复杂度及相关先进工具的出现,以开关为基础的数字设计慢慢步入黄昏。不管怎样,先把这方面的内容做个回顾!
注意:程序中vdd中使用小写字母不影响程序的运行!但是关键词不能写错!在Verilog HDL中,supply0和supply1是用来指定地网络或者电源的关键词。这些关键词通常用于处理不同的电源域或者在一个模块内部存在多个电源/地引脚的情况。supply0关键词用于指定电源网络,该网络连接到逻辑电平0(即低电平)。supply1关键词用于指定电源网络,该网络连接到逻辑电平1(即高电平)。以下是一个简单的例子,展示如何在模块中使用supply0和supply1。module example(input wire i, output wire o);assign o = i; // 连接i到o,这里的o会接收到由i决定的电平值。再来个测试吧,模块中调用模块该如何完成,一步一步走向复杂!
后续还要学习数据流行为建模!
此时,老师也是经过了两个小时的学习!同学们更需要长时间的看书学习哦。接着看美女学生的讲解视频。经历了失败和成功,肯定会有成就感的!
以后再请大家欣赏3.9.2的程序编写过程,也是请美女学生完成的!课堂上还有位帅哥也进行了程序编写,中间发生了一点小插曲。
错误查找过程很辛苦,但找到了就会很开心!以反引号 ` 开始的某些标识符是 Verilog 系统编译指令(如`timescale 1ns/1ps)。编译指令为 Verilog 代码的撰写、编译、调试等提供了极大的便利。注意:打出反引号`是要在英文输入状态!
本章一定要多做习题以强化理解!是在课堂上还是在课后,我都会通过做大量的题目来大家巩固学过的知识。现在不会做不要紧,还可以通过查资料、看书来完成题目的解答。这样的学习过程自然会让你觉得烦,但肯定好过此门课程挂科的滋味。2024年,我给机器人专业的学生上此门课程,我就担心有几位同学会挂科。但我已经努力了。我曾经两次请他们回到课堂上,也希望他们能够在课堂上好好的把以前的知识给补起来,但效果差强人意。不知他们何时能醒悟?也许是无尽的等待,也许是突然的悔悟。做题的时候按照步骤来就可以了!很多同学不能通过真值表来完成逻辑功能的评述,早期都是这样的,等题目做多了,自然就把很多电路的功能记记在脑子里了。唯有通过布置了大量的课堂作业和课后作业用来消化分析过程!欣慰的是效果还算满意,至少练到了都会做题。当然培养大学生不可能只为了让他们会做题,更多的是能够进行实际的电路分析和设计,这条实践之路走起来很艰难。到目前也就三个学生愿意跟着我进行 Verilog 编程来进行相关功能的验证。用Verilog写个程序仿真一下吧!为何一直强调仿真呢?看看下面的岗位要求!实用型工科教学不是喊口号,是需要将未来的工作需求在教学中有所体现!做不到完全匹配,但至少能给学生打下基础!
在没能熟练设计电路之前,不推荐简化写法!反正混淆!开始做题训练!课上同学们做的很认真!出错是正常现象,但要能知错即改,课后还要再复习一下!课堂上出现多次重复错误的现象,让老师感到有点累!继续做题!例4.2.2 试设计一个码转换电路,将4位格雷码转换为自然二进制码。可以采用任何逻辑门电路来实现。设输入变量为G3、G2、G1、G0为格雷码,输出变量B3、B2、B1、B0为自然二进制码。在课堂上让同学们进行了大量的练习,也将卡诺图的变量扩展成了五个!不断的练习才能保证熟练的掌握,这样考试中才能正确解题!2024年带的学生基础不是特别好,需要用这种模式来保证他们通过考试的合格率。竞争:当一个逻辑门的两个输入端的信号同时向相反方向变化,而变化的时间有差异的现象。冒险:两个输入端的信号取值的变化方向是相反时,如门电路输出端的逻辑表达式简化成两个互补信号相与或者相或,由竞争而可能产生输出干扰脉冲的现象。许多常用的组合逻辑电路被制成了中规模集成电路(MSI),广泛应用于数字电路和数字系统的设计中。1. 这些典型集成电路本身就是一种完美的逻辑设计作品,考虑周到,功能齐全,值得我们在组合逻辑电路设计时学习和借鉴。①. 要能够通过阅读MSI器件的功能表,掌握器件的逻辑功能;之前我们是不是已经做过进制转换的运算!有了编码器,人算就可以用机器运算代替了!如果有了更多替代,是不是就不需要人了啊?人工智能有这个趋势!普通编码器:任何时候只允许输入一个有效编码信号,否则输出就会发生混乱。优先编码器:允许同时输入两个以上的有效编码信号。当同时输入几个有效编码信号时,优先编码器能按预先设定的优先级别,只对其中优先权最高的一个进行编码。实际应用中,经常有两个或更多输入编码信号同时有效,必须根据轻重缓急,规定好这些外设允许操作的先后次序,即优先级别。优先编码器:识别多个编码请求信号的优先级别,并进行相应编码的逻辑部件称为优先编码器。允许同时输入两个以上的有效编码信号。当同时输入几个有效编码信号时,优先编码器能按预先设定的优先级别,只对其中优先级最高的一个进行编码。在数字电路中,编码器是一种电路或设备,用于将输入的数字信号转换为特定的编码格式。编码器的主要作用是将输入信号转换成对应的编码形式,以便于传输、存储或处理。- 数字信号的编码:在数字电路中,信息通常以数字信号的形式表示。而不同的应用场景可能需要不同的信号编码格式。例如,计算机内部使用的数据表示形式、通信系统中的调制方式等,都需要特定的编码格式来表示信息。编码器就是用来将原始的数字信号转换为这些特定格式的关键设备之一。
- 信号的压缩与优化:编码器可以通过特定的编码方式来对信号进行压缩和优化。通过合适的编码算法,可以将原始信号表示成更简洁、更有效的形式,从而节省存储空间、减少传输带宽,并提高信息传输的效率和可靠性。
- 数据传输与处理:在数字通信系统中,编码器通常用于将数字信息转换成合适的传输格式。例如,在数字通信中,常用的编码方式包括差分编码、曼彻斯特编码、格雷码等。这些编码方式可以增强信号的抗干扰能力、提高数据传输的可靠性,同时也可以简化接收端的解码过程。
- 应用领域:编码器在数字电路中有着广泛的应用,涵盖了多个领域,如通信系统、计算机网络、图像处理、音频处理等。在每个领域中,编码器的设计和选择都会根据具体的需求和应用场景进行优化。
- 编码器的种类:根据不同的应用需求,编码器可以分为多种类型,如数字信号编码器、音频编码器、视频编码器等。每种类型的编码器都有特定的设计原则和技术特点,以适应不同的应用场景。
总的来说,编码器在数字电路中扮演着重要的角色,它通过将原始的数字信号转换成特定的编码格式,实现了信号的压缩、优化、传输和处理,为数字系统的设计和应用提供了基础支持。下面的知识不会在考试中出现,但是在这个行业的确是非常重要且实用的知识,希望同学们能够跟着老师的步伐一起学起来!现在的工作很少离得开编程!
之前提过!
本章开始学习行为方式建模!
在Modelsim里面演示一遍吧!
这个语法知识和C语言稍有差异!
Verilog 中的 case
语句和 C 语言中的 switch
语句有一些相似之处,但也存在一些重要的差异。
语法形式:Verilog 中的 case 语句是一种组合逻辑的语句,用于根据某个信号的取值选择不同的执行路径。它的基本语法如下:
case (expression)
value1: statement1;
value2: statement2;
...
default: default_statement;
endcase
C 语言中的 switch 语句是一种选择结构的语句,用于根据某个整型表达式的值选择不同的执行路径。它的基本语法如下:
表达式类型:Verilog 中的 case
语句的表达式可以是一个任意宽度的信号(比如 reg
、wire
),也可以是一个整型常量。每个 case
分支的值可以是信号的取值,也可以是常量。如果分支的值是一个范围,Verilog 会自动展开为对应的单个值。C 语言中的 switch
语句的表达式必须是整型或字符型的,不能是浮点型或其他类型。
默认分支:在 Verilog 中,可以选择性地使用 default
分支来处理未覆盖的情况。如果没有匹配的分支,并且没有提供 default
分支,Verilog 不会执行任何操作。在 C 语言中,default
分支是可选的,但通常建议提供一个默认分支以处理未匹配的情况。
不同分支执行:在 Verilog 中,一旦匹配到一个分支,将执行该分支及其以下所有语句,除非在分支末尾使用 break
类似的语句来显式跳出 case
语句。在 C 语言中,一旦匹配到一个分支,只会执行该分支后面的语句,然后退出 switch
语句,除非在分支末尾使用 break
语句显式跳出 switch
语句。
总的来说,虽然 Verilog 中的 case 语句与 C 语言中的 switch 语句有一些相似之处,但它们在语法形式、表达式类型和执行方式等方面存在一些重要的差异。
最后介绍一下for循环语句,无处不在!