Verilog学习之路(6)— 组合电路的设计
组合电路的设计
一、前言
组合电路的特点是电路中任意时刻的稳态输出仅仅取决于该时刻的输入,而与电路之前的状态无关,组合电路没有记忆功能。
在使用Verilog设计中组合电路的描述方法主要有四种:真值表、逻辑代数、结构描述、抽线描述。
- 设计如下电路为例:设计一个3裁判表决电路,当两个或两个以上裁判同意时,判决器输出
1
,否则输出0
。
二、真值表
真值表是对电路功能最直接和简单的描述方式,根据要求的功能,将三个输入端记为A、B、C,输出端记为OUT,可以得出真值表如下所示:
A | B | C | OUT |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
然后我们就可以在Verilog中使用case语句对电路进行设计如下所示:
module design1(OUT, A, B, C);output reg OUT;input A,B,C;always@(A or B or C) begincase({A, B, C})3'b000: OUT <= 1'b0;3'b001: OUT <= 1'b0;3'b010: OUT <= 1'b0;3'b100: OUT <= 1'b0;3'b011: OUT <= 1'b1;3'b101: OUT <= 1'b1;3'b110: OUT <= 1'b1;3'b111: OUT <= 1'b1;endcaseend
endmodule
该描述方式为一个解码器,其电路结构如图所示:
三、逻辑代数
按上述真值表我们可以使用卡诺图进行化简
可得其逻辑函数表达式为:
OUT = AB + BC + AC
根据该逻辑函数表达式编写Veriolg代码如下
module design2(OUT, A, B, C);output OUT;input A,B,C;assign OUT=(A&B)|(B&C)|(A&C);
endmodule
综合后的电路图如下所示:
四、结构描述
我们将逻辑表达式直接调用Verilog库中的门电路设计如下
module design3(OUT, A, B, C);output OUT;input A,B,C;wire w1, w2, w3;and u1(w1, A, B);and u2(w2, B, C);and u3(w3, A, C);or u4(OUT, w1, w2, w3);endmodule
综合后电路如下所示,我们可以看到,这个电路和逻辑代数描述综合出来的电路实际上是一样的
五、抽象描述
从我们需要的功能我们可以知道,我们可以直接将三个输入的判决相加,当相加之和大于1就可表示投票成功,编写代码如下所示:
module design4(OUT, A, B, C);output reg OUT;input A,B,C;wire [1:0] sum;assign sum = A + B + C;always@(sum) beginif(sum > 1) OUT = 1;elseOUT = 0;endendmodule
综合后电路如下所示,
六、总结
VerilogHDL对同一电路有不同风格的描述,对于简单的电路,其各种描述之间的差异不大。但对于复杂的电路,不同风格的代码综合出的电路将会不同,生成的电路的性能也会不同,因此Verilog HDL是与电路对应的,要求设计者在编写代码时对所设计电路应有清楚的认识,这需要平时大量的积累。
七、附录
上一篇:Verilog学习之路(5)— Verilog HDL的结构化建模
下一篇:
Verilog学习之路(6)— 组合电路的设计相关推荐
- Verilog学习之路(8)— 时序电路的设计
Verilog学习之路(8)- 时序电路的设计 一.前言 时序逻辑电路的输出不仅与当前时刻输入变量的取值有关,而且与电路的原状态,即与过去的输入情况有关. 时序逻辑电路的两个特点: 时序逻辑电路包括组 ...
- Verilog学习之路(4)— Verilog HDL的程序设计语句
Verilog HDL的程序设计语句 一.连续赋值语句 连续赋值语句通常用来描述组合逻辑电路,连续赋值的目标类型主要是标量线网和向量线网两种,标量线网如"wire a,b;",向量 ...
- Verilog学习之路
Verilog编程规范 1.冒号前后==同时==出现变量 2.模块接口写法 2.1 parameter . localparam.`define 1.冒号前后同时出现变量 在已知所需位宽的情况下,可使 ...
- C# 学习之路--百度网盘爬虫设计与实现(一)
百度网盘爬虫 现在市面上出现了很多网盘搜索引擎,写这系列博文及爬虫程序的初衷: 更方面的查找资源 学习C# 学习爬虫的设计与实现 记录学习历程 自我监督 能力有限,如有不妥之处,还请各位看官点评.同在 ...
- 电源学习(1):stm32单片机buck电路可调电源设计介绍
最近,搞了一块stm32单片机的降压电路板,效果还不错分享分享给大家. 首先上图看效果! 下图 输入电压在20v不变,效果如图所示. 然后我又测了几组数据供大家参考一下,具体电路后续在写了 可见负载调 ...
- PLC控制柜组合电路的基本设计步骤
PLC控制电路根据逻辑关系可分为组合电路和时间电路,在复杂的控制电路中也可分为组合电路和时间电路. plc控制柜 1.组合电路的设计 控制结果仅与输入相关的电路称为组合电路.由于组合电路的控制结果只与 ...
- FPGA学习之路—接口(3)—SPI详解及Verilog源码分析
FPGA学习之路--SPI详解及Verilog源码分析 概述 SPI = Serial Peripheral Interface,是串行外围设备接口,是一种高速,全双工,同步的通信总线. 优点 支持全 ...
- 【Verilog HDL学习之路】第二章 Verilog HDL的设计方法学——层次建模
2 Verilog HDL的设计方法学--层次建模 重要的思想: 在语文教学中,应该先掌握核心方法论,再用正确的方法论去做题目,这样能够逐渐加深对于方法论的理解,做题的速度和准确率也会越来越高. 在V ...
- FPGA学习之路—应用程序—原码二位乘法器及Verilog代码分析
FPGA学习之路--原码二位乘法器及Verilog代码分析 原理 原码乘法可以分为原码一位乘和原码二位乘,两者在实现规则上大同小异.原码一位乘每次判断乘数的最低位,对被乘数和部分积进行相应操作.而原码 ...
最新文章
- 临时“尿检官”谈违规为孙杨检测兴奋剂:一头雾水卷入该事件
- windows service自动启动相关设置
- mysql时间戳和日期转换
- python中的format什么意思中文-Python中format()格式输出全解
- 开源 | App 开发神仙工具:帮你抓 Bug
- leetcode 第 216 场周赛 整理
- linux系统分析工具续-SystemTap和火焰图(Flame Graph)
- 手机屏幕什么计算机,windows 7系统中要实现智能手机无线投屏到计算机屏幕上可以借助的软件有哪些?...
- Fiddler的下载安装与使用(流量抓包、手机抓包、拦截包、编辑包、重发包)
- 程序员,互联网创业者,忠言逆耳,希望创业者们慎重,三思而后行。
- android viewpager切换无法显示fragment问题
- HTML5实现扫描识别二维码/生成二维码
- 2-Linux C语言指针与内存-学习笔记
- s40之演变v1~v3
- Vue中数组的响应式操作
- matlab图像取样和量化,一文看懂数字图像的取样和量化
- win11下30系列显卡配置anaconda虚拟环境cuda,cudnn,pytorch
- 程序猿如何高效的学习英语
- 什么是透传模块?为什么要透传?
- FW:Use Log4XX for Logging