Quartus II设计8位、16位运算器、实现8种运算的运算器(含仿真)

目录

一、8位运算器

1. 设计8位运算器

2. 8位运算器功能仿真

二、16位运算器

1. 设计16位运算器

2. 16位运算器功能仿真

三、实现8种运算的运算器

1. 设计能实现8种运算的运算器

2. 实现8种运算的运算器的功能仿真

附:181功能表


近来有空闲,把前几个学期做的实验上传上来。如有错误的地方欢迎大佬批评指正,有更好的方法也期待您的分享~


一、8位运算器

1. 设计8位运算器

用两片74181实现8位运算器

图1 8位运算器电路图

图中,A[7..0];B[7..0]是输入;C是低位来的进位;F[7..0]是输出;C是向高位的进位;S0到S3是四个控制端,用于选择进行何种运算;M用于控制ALU进行算术运算还是逻辑运算。

当M=0时,M对进位信号没有任何影响,Fi值与操作数Ai,Bi以及地位向本位进位Cn+1有关,所以M=0时进行算术运算。操作数用补码表示,“加”只算术加,运算时考虑进位;“+”指逻辑加,不考虑进位;减法运算时,减法取反码运算后用加法器实现,结果输出为A减B减1在最末位产生一个强迫进位(加),以得到A减B的结果。

当M=1时,封锁了各位的进位输出Cn+i=O,因此各位的运算结果Fi仅与操作数Ai,Bi有关,此时进行逻辑运算。

2. 8位运算器功能仿真

设定数据为A=55H,B=0AAH,进行功能仿真。

图2 8位运算器仿真结果图

将仿真结果图对比运算表格图,运算正确。

图3 8位运算器运算表格图

二、16位运算器

1. 设计16位运算器

(1)将8位运算器打包封装

图4 8位运算器打包封装元件

 (2)用两片封装好的8位运算器实现16位运算器

图5 16位运算器电路图

2. 16位运算器功能仿真

设定数据为A=0101010101010101;B=1010101010101010,进行功能仿真。

图6 16位运算器仿真结果图

由运算表格知,该16位运算器运算结果均正确,则该电路能正常工作。

图7 16位运算器运算表格图

三、实现8种运算的运算器

1. 设计能实现8种运算的运算器

(1)添加实现8种运算的宏功能模块元件

图8 添加宏功能模块图

 添加输入信号:input ,修改输入信号依次为A、B。

添加8种实现运算功能的宏功能模块:①lpm_add参数化的加法器;②lpm_sub参数化的减法器;③nand2 与非门;④lpm_and参数化与门;⑤lpm_or参数化或门;⑥lpm_xor参数化异或门;⑦lpm_abs参数化绝对值运算;⑧lpm_inv参数化反向器。

(2)使用三态门做控制

图9 使用三态门做控制图

 使用lpm_bustri参数化三态缓冲器来做控制。在每一块宏功能模块后面都接一个三态门,当使能信号有效的时候,三态门导通;当使能信号无效的时候,三态门不工作,就像开关一样。

三态门由于选中才工作,不选中相当于短路,首先保证8个三态门当中,一次只有一个是导通的,任何时刻只有一个三态门的使能端有效,所以所有的三态门接到一起,不需要使用数据选择器,后端接一个输出端output,修改命名为F。

(3)使用3-8译码器实现功能的选择

图10 3-8译码器图

为保证三态门在任何时刻只有一个三态门的使能端有效,使用lpm_decode参数化译码器制作3-8译码器。

图11 实现8种运算的运算器图

3-8译码器每一个引脚使用命名法连接一块三态门的使能端,从而实现8种运算功能的控制。

2. 实现8种运算的运算器的功能仿真

设定数据为A=01010101;B=10101010。

图12 实现8位运算模块的运算器仿真结果图

(1)设定数据为A=01010101;B=10101010

由运算表格知,该运算器8种功能运算结果均正确,则该电路能正常工作。

图13 实现8位运算模块的运算表格图1

(2)设定数据为A=01010110;B=10101011

由运算表格知,该运算器8种功能运算结果均正确,则该电路能正常工作。

图14 实现8位运算模块的运算表格图2

附:181功能表

图15 74LS151功能表
  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我会尽力回答你的问题。 首先,我们需要了解全加和全减的原理。全加有三个输入和两个输出,它们分别是两个加数和一个进位位,输出是一个和值和一个进位位。全减也有三个输入和两个输出,它们分别是被减数、减数和一个借位位,输出是一个差值和一个借位位。 下面是一个1位全加全减的电路图: ![1-bit-full-adder-subtractor](https://i.imgur.com/wlG2QvK.png) 在Quartus-II软件中,我们可以使用VHDL语言来实现这个电路。下面是一个1位全加全减的VHDL代码: ```vhdl library ieee; use ieee.std_logic_1164.all; entity full_add_sub is port( a, b : in std_logic; cin, sub : in std_logic; s : out std_logic; cout, bout : out std_logic ); end full_add_sub; architecture Behavioral of full_add_sub is begin process(a, b, cin, sub) begin if sub = '1' then s <= a xor b xor cin; bout <= (not a) and b or ((not a) or b) and cin; cout <= (not s) xor cin; else s <= a xor b xor cin; cout <= a and b or a and cin or b and cin; bout <= (not s) and cin or (a and not b and not cin) or (not a and b and not cin); end if; end process; end Behavioral; ``` 在这个代码中,我们定义了一个名为`full_add_sub`的实体,它有五个输入和两个输出。输入分别是两个加数`a`和`b`,一个进位位`cin`,一个减法标志`sub`,输出分别是一个和值`s`和一个进位/借位位`cout`/`bout`。 在实体的体系结构中,我们使用了一个进程来描述电路的行为。进程中的`if`语句根据减法标志`sub`的值来选择进行加法还是减法运算。在加法运算中,我们按照全加的原理计算出和值`s`和进位位`cout`;在减法运算中,我们按照全减的原理计算出差值`s`和借位位`bout`。 最后,我们需要在Quartus-II软件中创建一个新的项目,将这个VHDL代码添加到项目中,并进行编译和仿真。在仿真过程中,我们可以输入不同的加数、减数和进位/借位位,观察输出结果是否符合预期。如果一切正常,我们可以将这个电路下载到FPGA芯片中,实现一个真实的1位全加全减

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值