命题:设计一个三变量表决器。真值表如下:

可以写出并简化得出公式:F=AB+BC+AC。

以下是两种算法:

第一种:仅从算法方面描述为:A、B、C的和大于1则输出结果为1,否则为0;源码如下:

module vote_c(a,b,c,result);
input a,b,c;
output result;
reg result;
always @(a or b or c or result)
begin
if((a+b+c)>)
result=;
else
result=;
$display("a,b,c,result");
$display("%d,%d,%d,%d",a,b,c,result);
end
endmodule

第二种:采用上面公式描述的组合逻辑。源码如下:

module vote_d(a,b,c,result);
input a,b,c;
output result; assign result=((a&&b)||(b&c)||(a&&c));
always@(a or b or c or result)
begin
$display("a b c result");
$display("%d %d %d %d",a,b,c,result);
end
endmodule

测试平台 modelsim altera 6.5b,测试源码如下:

`timescale 1us/1us
`include "votec.v"
`include"voted.v" module vote_top;
reg a,b,c;
wire result; initial
begin
a=;b=;c=;
# a=;b=;c=;
# a=;b=;c=;
# a=;b=;c=;
# a=;b=;c=;
# a=;b=;c=;
# a=;b=;c=;
# a=;b=;c=;
end
vote_c v1(a,b,c,result);
//vote_d v2(a,b,c,result);
endmodule

得出结果都为:

# a  b  c  result

# 0  0  0    0

# a  b  c  result

# 0  0  1    0

# a  b  c  result

# 0  1  0    0

# a  b  c  result

# 0  1  1    1

# a  b  c  result

# 1  0  0    0

# a  b  c  result

# 1  0  1    1

# a  b  c  result

# 1  1  0    1

# a  b  c  result

# 1  1  1    1

与真值表一致。所以两种方式都是正确的。在quartus II中综合编译后:

第一种的RTL视图如下:

可以看出,该模块综合成两个加法器和一个比较器。

第二种RTL视图如下:

可以看出综合成3个与门和一个或门的组合逻辑电路。

两者在资源消耗方面如下:

  

可以看出基本没有区别。仿真器应该最后将他们优化成一致了。

verilog描述表决器的两种方式简易分析的更多相关文章

  1. Android实战简易教程-第四十九枪(两种方式实现网络图片异步加载)

    加载图片属于比较耗时的工作,我们需要异步进行加载,异步加载有两种方式:1.通过AsyncTask类进行:2.通过Handler来实现,下面我们就来看一下如何通过这两种方式实现网络图片的异步加载. 一. ...

  2. CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)

    CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ...

  3. System.Web.Http.Cors配置跨域访问的两种方式

    System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...

  4. ImageView设置边框的两种方式

    转载:http://www.2cto.com/kf/201308/239945.html package cc.testimageviewbounds; import android.os.Bundl ...

  5. Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  6. Hadoop之HDFS文件操作常有两种方式(转载)

    摘要:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式.本文介绍如何利用这两种方式对HDFS文件进行操作. 关键词:HDFS文件    命令行     Java API HD ...

  7. 简介C#读取XML的两种方式

    简介C#读取XML的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-03-03 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的 ...

  8. 加载xib文件的两种方式

    一.加载xib文件的两种方式 1.方法一(NewsCell是xib文件的名称) NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@&quo ...

  9. 内核知识第12讲,SSDT表.以用户模式到系统模式的两种方式.

    内核知识第12讲,SSDT表.以用户模式到系统模式的两种方式. 一丶IDT解析. 我们知道.IDT表中存放着各种中断信息.比如当我们调用int 3的时候,则会调用IDT表中的第三项来进行调用. 而函数 ...

随机推荐

  1. 查找Linux系统中的占用磁盘空间

    目录的来查看空间占用情况 du -sh /* 先看看根目录下面 让文件夹下的文件让文件按大小排序 方法一:# ls -lhSl 长格式显示,h human readable模式,大小单位为M,G等易读 ...

  2. Yii2事务

    今天写到发券,发现没加事务,于是学习了下 事务: 是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面 ...

  3. python模块介绍二。

    全局变量 全局变量 python在一个.py文件内部自动添加了一些全局变量 print(vars()) #查看当前的全局变量 执行结果: {'__package__': None, '__loader ...

  4. css 数字出现滚动条解决

    <div style="height:100px;overflow-y:auto;word-wrap:break-word;word-break:break-all;" ng ...

  5. js 对象 copy 对象

    function clone(myObj) { if (typeof (myObj) != 'object') return myObj; if (myObj == null) return myOb ...

  6. Redis的复制(Master/Slave)

    是什么 : 也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 能干嘛: 读写分离,容灾恢复 怎么玩: 1 ...

  7. Nuget-使用图形化界面打包自己的类库

    到NuGet相对于我们最重要的功能是能够搭建自己的NuGet服务器,实现公司内部类库的轻松共享更新.在安装好NuGet扩展后,我们已经能够通过NuGet轻松下载自己需要的类库,下面来说一说如何将自己的 ...

  8. 数据结构作业——N个数中未出现的最小整数(想法题)

    Description 给出一串数字,这串数字由 n 个数 ai 组成,找出未出现在这串数字中的最小正整数 Input 输入第一行为一个正整数 n (1 <= n <= 1000) 第二行 ...

  9. CF 321B Kefa and Company(贪心)

    题目链接: 传送门 Kefa and Company time limit per test:2 second     memory limit per test:256 megabytes Desc ...

  10. MySQL时间函数,用起来比PHP还爽

    前一篇写了PHP的时间函数(还是草稿),这一篇就写Mysql的时间函数吧.最近做的项目,关乎权限,于是自然而然的就与有效期联系在了一起.其中有一个功能是生成特殊表格,可以根据用户的选择,按周.月.季. ...