目录
安装Quartus软件
四位全加器
全加器、半加器
半加器:
全加器:
四位全加器电路图
创建项目
半加器
全加器
四位全加器
代码实现
半加器
全加器
四位全加器
三八译码器
创建项目
代码展示
modelsim仿真波形图
四位全加器
三八译码器
总结与展望
安装Quartus软件
本次实验首先进行Quartus软件的安装,版本选择18.1.0.625。安装过程较为常规,依次进行安装选项选择、许可协议接受、安装路径选择(如E盘)等步骤,等待安装进度条完成后,根据驱动程序安装向导提示,选择下一页及完成,即可完成软件的正常安装并投入使用。以下是详细安装流程:
- 打开安装软件
这里以18.1.0.625版本为例
打开安装程序,进行安装选择,选择next,进行下一步;
选择”I accept the agreement”再进行下一步;
选择想要保存的位置,例如我所选的E盘;
默认勾选,点击下一步;
继续点击next;
随后等待进度条走完即可;
在根据驱动程序安装向导,选择下一页,然后选择完成,完成安装;
打开Quartus 正常使用。
四位全加器
全加器、半加器
半加器:
定义:半加器是指只考虑两个一位二进制数相加,而不考虑来自低位的进位的加法器。
输入输出关系:
和(Sum):当两个输入数A和B不同时,和为1;当A和B相同时,和为0。其逻辑表达式为Sum = A ⊕ B(⊕表示异或运算)。
进位(Carry):当A和B都为1时,产生进位,进位输出为1,否则为0。其逻辑表达式为Carry = A & B(&表示与运算)。
电路结构:
真值表:
全加器:
定义:全加器是指不仅考虑两个一位二进制数相加,还考虑来自低位的进位的加法器。
输入输出关系:
和(Sum):当A、B和来自低位的进位Cin中1的个数为奇数时,和为1;否则为0。其逻辑表达式为Sum = A ⊕ B ⊕ Cin。
进位(Carry):当A、B和Cin中任意两个或三个都为1时,产生进位。其逻辑表达式为Carry = (A & B) | (B & Cin) | (A & Cin)(|表示或运算)。
电路结构:
真值表:
半加器和全加器就像是两个不同级别的助手,半加器只能处理简单的两个数相加,而全加器则能处理更复杂的带进位相加的情况。它们共同构成了数字电路中实现加法运算的基础模块,为计算机等数字设备的运算能力提供了支持。
四位全加器电路图
创建项目
在Quartus中,可通过绘制原理图或编写Verilog HDL代码实现四位全加器的设计。原理图绘制需在“Block Diagram/Schematic File”中进行,选择相应的与门、异或门等元件进行连接。代码实现则更为高效,通过定义实体和架构,利用信号连接和实例化语句实现四位全加器的功能。设计过程中,将四个全加器串联,使每个全加器的输出进位连接到下一个全加器的输入进位,从而实现四位二进制数的加法运算。下面为具体实现方法:
点击软件运行,进入主界面;
点击左上角的File,选择目录下的New;
\
然后在弹出来的目录中再选择”New Quartus Prime Project”;
在下图中填写好项目名称,随后点击”Next”;
其中,顶层设计实体名称这是你的设计文件中的顶层模块的名称。这个名称必须与你的设计文件中的实体名称完全匹配,包括大小写。
然后点击”Next”,直到下图所示,然后选择标注的型号,再点击”Next”;
随后在Slmulation,选择ModeSim-Altera;(由于之前在安装的时候已经默认安装了ModeSim,所以直接下一步即可)
最后点击,Finish,创建成功。
半加器
在空白项目中,左上角选择File,点击目录下的New,然后再选择Block Diagram/Schematic File
建立好过后,选择and2、xor(即与门、异或门);
按照下图连接,就是一位半加器的原理图。
画好原理图过后,再将其保存为可调用原件。
首先点开左上角File,在根据指示进行操作;
即可保存成功。
全加器
操作同半加器,绘制原理图,然后保存;
注意:这里的half_adder为刚才我们建立并保存好的,可直接调用。
四位全加器
在元器件中搜索刚才保存的全加器full_adder,绘制四位全加器。
绘制图如下:
编译成功过后可以在TOOL目录下的Netlist Viewers的二级目录中的RTL Viewer查看电路图。
代码实现
虽然图画表达更加直观,但占用的时间较多,当涉及的内容复杂时,画图效率更是大大缩减,这个时候可以用代码实现原理图的绘制。
选择主页面左上角的File,选择目录下的New,然后在新的目录下选择Verilog HDL File;
然后根据需要生成的电路图输入代码。
半加器
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- 定义半加器实体
entity half_adder is
port (
A : in STD_LOGIC;
B : in STD_LOGIC;
sum : out STD_LOGIC;
cout : out STD_LOGIC
);
end half_adder;
-- 定义半加器架构
architecture Behavioral of half_adder is
begin
sum <= A XOR B;
cout <= A AND B;
end Behavioral;
全加器
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- 定义全加器实体
entity full_adder is
port (
A : in STD_LOGIC;
B : in STD_LOGIC;
Cin : in STD_LOGIC;
sum : out STD_LOGIC;
Cout : out STD_LOGIC
);
end full_adder;
-- 定义全加器架构
architecture Behavioral of full_adder is
begin
sum <= A XOR B XOR Cin;
Cout <= (A AND B) OR (Cin AND (A XOR B));
end Behavioral;
四位全加器
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- 定义4位全加器实体
entity four_bit_adder is
port (
A : in STD_LOGIC_VECTOR(3 downto 0);
B : in STD_LOGIC_VECTOR(3 downto 0);
Cin : in STD_LOGIC;
S : out STD_LOGIC_VECTOR(3 downto 0);
Cout : out STD_LOGIC
);
end four_bit_adder;
-- 定义4位全加器架构
architecture Behavioral of four_bit_adder is
signal C : STD_LOGIC_VECTOR(4 downto 0);
signal temp_S : STD_LOGIC_VECTOR(3 downto 0);
component full_adder
port (
A : in STD_LOGIC;
B : in STD_LOGIC;
Cin : in STD_LOGIC;
sum : out STD_LOGIC;
Cout : out STD_LOGIC
);
end component;
begin
C(0) <= Cin;
-- 实例化四个全加器
G0: full_adder port map (A(0), B(0), C(0), temp_S(0), C(1));
G1: full_adder port map (A(1), B(1), C(1), temp_S(1), C(2));
G2: full_adder port map (A(2), B(2), C(2), temp_S(2), C(3));
G3: full_adder port map (A(3), B(3), C(3), temp_S(3), C(4));
S <= temp_S;
Cout <= C(4);
end Behavioral;
三八译码器
输入端口:
I2、I1、I0:这三个端口是3位二进制输入信号。
这三个输入信号可以表示8种不同的状态(从 000 到 111)。
输出端口:
Y7、Y6、Y5、Y4、Y3、Y2、Y1、Y0:这8个端口是8位一热码输出信号。
每个输出端口对应一个输入状态,只有一个输出端口为高电平(1),其余为低电平(0)。
工作原理:
三-八译码器根据输入的3位二进制数,选择对应的输出线,并将其置为高电平(1),而其他输出线保持低电平(0)。具体的工作原理可以参考以下真值表:
逻辑表达式:
每个输出端口的逻辑表达式可以表示为输入信号的组合。例如:
- Y0 = NOT I2 AND NOT I1 AND NOT I0
- Y1 = NOT I2 AND NOT I1 AND I0
- Y2 = NOT I2 AND I1 AND NOT I0
- Y3 = NOT I2 AND I1 AND I0
- Y4 = I2 AND NOT I1 AND NOT I0
- Y5 = I2 AND NOT I1 AND I0
- Y6 = I2 AND I1 AND NOT I0
- Y7 = I2 AND I1 AND I0
创建项目
在Quartus中创建新项目后,通过编写Verilog HDL代码实现三八译码器。使用case语句根据输入信号组合设置输出信号,代码简洁且逻辑清晰。编写完成后进行编译,确保代码无误。以下是具体实现方法:
首先再刚才新建项目的Feil,选择”New Project Wizard”,与全加器半加器的创建一样的操作;
创建好空项目过后,我们就使用代码实现三八译码器;
选择主页面左上角的File,选择目录下的New,然后在新的目录下选择Verilog HDL File;
代码展示
module three_eight_decoder(a, b, c, out);
input a; // 输入端口a
input b; // 输入端口b
input c; // 输入端口c
output [7:0] out; // 输出端口out,8位宽
reg [7:0] out; // 声明out为寄存器类型
// 或者可以直接写成:output reg [7:0] out;
// always块:当a、b或c发生变化时触发
always @(a, b, c) begin
// case语句:根据{a, b, c}的组合值选择输出
case ({a, b, c})
3'b000: out = 8'b0000_0001; // 当{a, b, c}为000时,out输出0000_0001
3'b001: out = 8'b0000_0010; // 当{a, b, c}为001时,out输出0000_0010
3'b010: out = 8'b0000_0100; // 当{a, b, c}为010时,out输出0000_0100
3'b011: out = 8'b0000_1000; // 当{a, b, c}为011时,out输出0000_1000
3'b100: out = 8'b0001_0000; // 当{a, b, c}为100时,out输出0001_0000
3'b101: out = 8'b0010_0000; // 当{a, b, c}为101时,out输出0010_0000
3'b110: out = 8'b0100_0000; // 当{a, b, c}为110时,out输出0100_0000
3'b111: out = 8'b1000_0000; // 当{a, b, c}为111时,out输出1000_0000
endcase
end
endmodule
modelsim仿真波形图
同样采用“University Program VWF”创建仿真文件,配置输入输出信号后运行仿真,查看波形图以验证译码器的正确性。通过观察波形图,可确认译码器是否能准确地根据输入信号生成对应的输出信号,如有问题可及时修改代码。具体操作如下:
四位全加器
选择主页面左上角的File,选择目录下的New,然后在新的目录下选择University Program VWF
创建好过后,会自动弹出窗口,双击左侧空白处,选择提示框中的Node Finder...;
然后会弹出窗口,先点击list,会显示四位全加器的输入输出元素,再点击双又向箭头;
配置好过后点击OK,即可得到波形图:
三八译码器
同理可得到38译码器的波形图:
总结与展望
通过本次实验,掌握了Quartus软件的安装与项目创建流程,深入理解了四位全加器和三八译码器的工作原理,并成功实现了其设计与仿真。在设计过程中,体会到了原理图绘制和代码实现两种方法的特点,以及仿真测试在验证设计正确性方面的重要性。
在未来,将继续深入学习FPGA设计,探索更复杂的数字电路,如多位乘法器、移位寄存器等,并尝试将FPGA应用于实际项目中,以提升自身的实践能力和技术水平。