fpga实现简单的加法器

fpga第一周实验

1、实验目的

1、基于Quartus件完成一个1位全加器的设计,分别采用:1)原理图输入 以及 2)Verilog编程 这两种设计方法。开发板基于Intel DE2-115。

2、在此基础上,用原理图以及Verilog 编程两种方式,完成4位全加器的设计,对比二者生成的 RTL差别;使用modelsim验证逻辑设计的正确性,并在DE2-115开发板上实际验证。

2、1bit全加器的设计

1、新建项目

打开quartus,新建项目

image-20230320182835357

选择目标芯片:cycloneIVE系列的EP4CE115F29C7

image-20230320183323669

2、新建原理图文件

原理图编辑输入流程如下:

(1)新建原理图文件。打开QuartusII,选菜单“File”一“New”,在弹 出的“New-”对话框中选择“ Design Files” 的原理图文件编辑输入项“Block block diagram/schematic File"按"OK"后将打开原理图编辑窗。

image-20230320183706997

image-20230320183730335

(2)在编辑窗中调入元件,完成半加器的原理图输入

直接双击原理图空白处,从“Symbol”窗中选择需要的符号,或者直接在“name”文本框中键入元件名,如“and2”为2输入与门,点OK按钮,即将元件调入原理图编辑窗中。例如为了设计半加器,分别调入元件and2,not,xnor和输入输出引脚input和output。并如图用点击拖动的方法连接好电路。然后分别在input和output的PIN NAME上双击使其变黑色,再用键盘分别输入各引脚名:a、b,co和s。

image-20230320184852455

(4)存盘编译。选择菜单File - Save As,选择刚才为自己的工程建 立的目录d:\adder4,将已设计好的原理图文件取名为:half_adder.bdf(注 意默认的后缀是.bdf),并存盘在此文件夹内。然后点击 进行编译,若无 错误则可进行下一步,若有错进行原理图修改。编译完成后最下面的“message”框

3、将设计项目调换成可调用的元件

为了构成全加器的项层设计,必预将以上设计的半加器half_adder.bdf设置成可调用的元件。方法图所示,在打开半加器原理图文件half_adder.bdf的情况下,选择菜中File中的Create/Update→Create Symbol Files forCurrent File项,即可将当前文件h_adder. bdf变成一个元件符号存盘,以待在高层次设计中调用。

image-20230320185118880

将元件存放到路径文件夹当中

4、半加器仿真

(1)新建波形文件。如上面新建图形文件的方法,从“file”中选择“new”,然后从出现的对话框中选择“university program VWF”。点击“OK”。

image-20230320185326598

(2)输入波形文件。在波形文件编辑器左端大片空白处双击,出现“insert nodeor bus”对话框,点击“node finder”按钮。如图。
然后在随后出现的“node finder”对话框中点击“list”按钮,则半加器

image-20230320185603328

中所有的输入输出引脚全部出现在对话框左边。如图

image-20230320185756117

点击两次“OK”后,出现如图的波形文件

image-20230320185834673

设置输入波形取值。方法可以是选中某段需要设置数值“1”的波形,然后在工具栏上点击按钮,即可。反之设置“O”,或其余数值同法可行。

image-20230320190150075

仿真。先保存文件为“half_adder.vwf”,点击工具栏上功能仿D真按钮”,完成后会自动跳出仿真后的文件。如图。从该图中可以分析半加器的逻辑关系是否正确。

5、设计全加器顶层文件

为了建立全加器的项层文件,必须再打开一个原理图编辑窗,即新建一个原理图文件。方法同前,即再次选择菜单"File”→“new",原理图文件编辑输入项"Block Diagram/Schematic File"。
与调入元件的方法一样,即在新打开的原理图编辑窗双击鼠标,在弹出的“symbol”窗的“name”栏输入底层文件半加器的存储名“half_adder”调出半加器,如图

image-20230325180415250

6.将设计项目设置成顶层文件并编译仿真

将顶层文件f_adder.bdf设置为顶层文件的方法: project→set astop_level entity。如图:

image-20230325180454562

image-20230325180506641

image-20230325180514741

功能仿真

image-20230325180533329

7.verloge编程

image-20230325180558263

module full_adder2(

	input ain,bin,cin,//输入信号,ain表示被加数,bin表示加数,cin表示低位向高位的进位
	output cout,sum//输出信号,cout表示向高位的进位,sum表示本位的相加和
	
);

	assign sum=(ain^bin)^cin;//本位和输出表达式
	assign cout=(ain&bin)|((ain^bin)&cin);//高位进位输出表达式
	
endmodule

此时编译无误可以通过tool->Netlist Viewers->RTL Viewer,查看电路图:

image-20230325180635057

8.板上验证

二.4位全加器设计

1、输入原理图方法设计4位全加器

将full_adder设置为可调用元件

image-20230325180742558

新建原理图文件:
点击File->New,然后选择Block Diagram/Schematic File,选择元件full_adder,并绘制原理图

image-20230325180759390

通过tool->Netlist Viewers->RTL Viewer,查看电路图:

image-20230325180832603

仿真:
创建一个向量波形文件,并添加、编辑信号:

image-20230325180848084

功能仿真:

image-20230325180909265

时序仿真

image-20230325180925687

2、Verilog编程方法设计4位全加器

代码:

module Verilog (
    num1,
    num2,
    cin,
    cout,
    sum
);

input   [3:0]   num1;
input   [3:0]   num2;
input           cin;
output          cout;
output  [3:0]   sum;


reg             cout;
reg     [3:0]   sum;
reg             add;
reg     [1:0]   cnt;
always @(num1 or num2 or cin)
begin
    // 第一位
    sum[0] = (num1[0] ^ num2[0]) ^ cin;
    cout = (num1[0] & num2[0]) | (num2[0] & cin) | (num1[0] & cin);
    add = cout;
    // 第二位
    sum[1] = (num1[1] ^ num2[1]) ^ add;
    cout = (num1[1] & num2[1]) | (num2[1] & add) | (num1[1] & add);
    add = cout;
    // 第三位
    sum[2] = (num1[2] ^ num2[2]) ^ add;
    cout = (num1[2] & num2[2]) | (num2[2] & add) | (num1[2] & add);
    add = cout;
    // 第四位
    sum[3] = (num1[3] ^ num2[3]) ^ add;
    cout = (num1[3] & num2[3]) | (num2[3] & add) | (num1[3] & add);
    add = cout;
end
endmodule

保存并编译,此时编译无误可以通过tool->Netlist Viewers->RTL Viewer,查看电路图:

image-20230325181012804

使用modelsim进行验证:

module four_tb ();
    reg     [3:0]     num1;
    reg     [3:0]     num2;
    reg               cin;
    wire              cout;
    wire    [3:0]     sum;

    four uut(
        .num1(num1),
        .num2(num2),
        .cin (cin),
        .cout(cout),
        .sum (sum)
    );
    initial
    begin
            num1 <= 4'b0000; num2 <= 4'b0000; cin <= 0;
        #10 num1 <= 4'b0000; num2 <= 4'b0000; cin <= 1;
        #10 num1 <= 4'b0101; num2 <= 4'b0001; cin <= 0;
        #10 num1 <= 4'b1000; num2 <= 4'b0100; cin <= 0;
        #10 num1 <= 4'b1111; num2 <= 4'b1111; cin <= 0;
        #10 num1 <= 4'b1100; num2 <= 4'b0100; cin <= 1;
        #10 num1 <= 4'b0011; num2 <= 4'b0000; cin <= 1;
        #10 num1 <= 4'b1111; num2 <= 4'b1111; cin <= 1;
    end
endmodule

验证结果:

image-20230325181048033

3、上板验证

器材不足,后续补全

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,可以用于实现各种不同的逻辑电路。有符号加法器是其中一种用于实现加法运算的电路。 在计算机中,有符号加法器被用来对带符号数进行加法操作。有符号数在二进制表示中的最高位被用作符号位,0表示正数,1表示负数。有符号加法器可以实现对带符号数进行相加,并考虑了进位和溢出的情况。 FPGA中的有符号加法器可以通过组合逻辑电路的方式来实现。首先,需要将输入的带符号数进行位扩展,即将符号位复制到更高位,以便在加法运算中保持符号一致。接下来,使用全加器或组合电路来实现位级的加法运算。最后,检查最高位的进位和溢出情况,通过输出信号来表示运算结果。 有符号加法器实现需要考虑到多个方面,如进位的传递、符号位的处理和溢出的检测等。因此,设计一个有效和高性能的有符号加法器是一项具有挑战性的任务。FPGA作为可编程器件,可以根据需求灵活地配置有符号加法器的结构和功能,以满足不同应用的要求。 有符号加法器在很多领域中都有广泛的应用,如数字信号处理、图像处理、通信系统等。通过在FPGA实现有符号加法器,可以提供高度定制化的加法运算能力,满足不同应用对于处理速度、精度和功耗等方面的要求。同时,FPGA的可编程性还使得有符号加法器的功能可以根据需求进行灵活调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值