RTL基本知识:全加器设计(VHDL)

【设计要求】

使用层次化设计方法,用VHDL语言设计四位二进制全加器,并进行仿真。

【设计目的】

考查对于VHDL元件例化语法的熟悉程度;

考查对于数字电路中全加器工作原理的理解;

【设计思路】

用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。

第一步:一位全加器;

第二步:多位全加器,在其中例化一位全加器实现;

1 一位全加器

a和b为两位二进制数据,cin为前级进位位,cout为当前计算后的进位位,sum为加法结果,电路结构和真值表如下:

2 四位全加器

四位全加器是在一位全加器的基础上利用进位进行串行级联实现,实现后的电路结构示意图如下:

【源代码】

1 一位全加器源代码

2 四位全加器源代码

【实验结果】

【思考】

在仿真时,输入可能会存在毛刺,采用什么方法可以消除毛刺?

在设计多位全加器时,如果位数很多,用元件例化的方式程序会很长,可以采用什么方法可以改进实现?

原文地址:https://www.cnblogs.com/xgcl-wei/p/8987491.html

时间: 2024-10-10 23:10:21

RTL基本知识:全加器设计(VHDL)的相关文章

RTL基本知识:逻辑强度模型(Logic Strength Model)

本文主要介绍HDL语言中常用的逻辑强度模型,并且以Verilog示例为主,最后介绍VHDL中常用的各种逻辑值系统.Verilog中提供了大量的模型用于模拟具体的硬件电路,例如and,or,nmos等,同时为了更加精确的模拟具体的电路信号强弱变化情况.信号的传输.充放电等行为,依据信号的逻辑强度模型,用不同的信号强度描述信号在电路传输中的状态,用以进一步提高仿真的精确度,特别是对于分析多种驱动来源同时驱动同一线网时产生的赋值冲突问题和被驱动信号的最终属性很有帮助.这种信号强度的变化在Verilog

RTL基本知识:缺失分号的后果

在使用Verilog进行设计过程中,经常会遇到某些条件判断语句中的分支没有执行,有些for循环仅执行一次的情况,特别是在过程性赋值语句中.其中很大一部分是因为错误使用了":"导致的.因为Verilog源自C语言,根据其语言特性,":"在Verilog中本身是一条单独的空语句,只是岂不进行任何具体操作而已,但是这样的特点造成了":"可以出现在设计的很多地方,顺利的通过编译甚至仿真,引起不容易察觉的错误.本文将针对这种情况探讨其中原因,并以示例说明.

RTL基本知识:线网或变量宽度与端口宽度不匹配

在使用Verilog进行数字设计或者构建验证平台时,如果连接模块端口的线网或变量的宽度与端口定义的宽度不一致,在进行仿真时将有可能出现逻辑功能与期望不一致的情况,本文将对此类情况进行示例分析. 首先,在IEEE 1364-2001中,模块的端口对于信号的传输类似于连续赋值语句对于信号的传递,因此,对于连续赋值语句的要求也适用于信号通过端口的传递过程(对此可以理解,在具体物理实现后的是不存在模块端口的,信号将通过线网在电路中传输).其次,Verilog中,与输入端口(input)和双向端口(ino

RTL基本知识:task和function

在使用Verilog进行设计的过程中,使用task和function在同一个module中多次调用,充分提高了代码的复用性,有效增强设计的可维护性和复用性,可以避免不同模块间代码复制导致的不必要的错误.本文主要探讨task和function的使用以及两者之间的异同点. 1    task 定义不能出现在过程性语句快中,但是必须在"module-end"结构中. 格式一: 格式二: task可以没有或者有一个或多个参数,值通过参数传入和传出task.输入输出在任务开始处声明,且输入与输出

RTL基本知识:线网的隐性声明

线网(net)作为Verilog语言中两种主要数据类型之一(变量数据类型和线网数据类型),主要用来模拟数字设计中连接多个不同模块或者模型的物理连线,因此线网是不存储数据的(除了trireg类型),仿真时线网上显示的数据由驱动该线网的驱动源决定的.如果线网没有被有效驱动,那么其上表现出来的数据是高阻态(除了trireg).同时同一个模块中不允许对同一个线网进行多次声明. 在仿真验证的过程中经常会遇到未声明的标识符在仿真过程中有时会报出错误信息或者警告信息,但是有时又不会出现任何信息,那么在什么情况

RTL基本知识:VCD内部解剖

VCD(ValueChange Dump)是用ASCII记录了被选择信号在仿真过程中的变化情况,同时还记录了一些测试向量生成时的仿真信息,例如仿真时间精度等.目前常用的VCD主要有两种格式: 四值格式:记录了信号的数值变化情况,这里的数值仅包含0,1,x,z,不包含相关信号强度的信息; 扩展格式:记录了信号数值变化的所有情况; 本文仅以四值格式VCD为例进行详述. 1 VCD生成常用的系统任务 在Verilog中尝试用以下的系统任务保存测试向量VCD. 1.1 $dumpfile 该任务主要用来

软件测试基础知识——测试用例设计方法

软件测试的分类: 1.按软件功能测试分类:基于规格说明的测试(传统黑盒测试.基于规格说明测试).基于控制流的测试(白盒测试) 传统黑盒测试:边界值.等价类.决策表.因果图 白盒测试:语句覆盖.判断覆盖.条件覆盖.MC/DC覆盖.基本路径覆盖. 基于规格说明测试:状态机.UML.Petri网.Z规约 其他测试:冒烟测试.随机测试.错误猜测测试.故障树测试.基于蜕变的测试 2.根据测试阶段分类: 单元测试:对软件中最小的可测单元进行验证,可以是一个函数.一个类.一个类的方法. 集成测试:将单元模块组

RTL基本知识:关于coverage

 Coverage Overview 随着芯片规模越来越大,集成的功能越来越多,一次性流片费用的增加,市场竞争的日益激烈,如何在验证和测试中解决判断验证充分性和完备性的问题逐步成为业界验证工作的热门话题. 并且伴随验证技术的进一步发展,验证技术也发生了巨大的变化,覆盖率作为其中一种判断验证充分性的手段已经被广泛的应用在集成电路的设计验证工作中. 本文将主要介绍设计验证工作中经常遇到的覆盖率的基本概念,希望对需要的朋友有所帮助. Test Coverage Fault Coverage consi

RTL基本知识:如何正确在敏感信号列表中包含function中的信号

在使用Verilog建模组合逻辑时,经常会使用"@*"的方式实现将进程中素有输入信号隐含加入到敏感信号列表中.但是如果该进程中包含对函数的引用时,尽管使用"@*",综合前后的仿真结果还是有出现不一致的情况.本文将对此进行示例说明. 1  问题示例 Verilog中可以在always后使用"@*"来代替冗长的敏感信号列表,这样做虽然在一定程度上可以保证仿真和综合的一致性,但是在一些情况下并不完全正确.例如下例,其中的函数引用了全局变量start,期