FPGA4位全加器的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

一、设计原理 (2)

二、设计目的 (3)

三、设计容 (3)

四、设计步骤 (3)

五、总结与体会 (7)

4位全加器设计报告

一、设计原理

全加器是指能进行加数、被加数和低位来的进位信号相加,并根据求和结果给出该位的进位。

4位加法器可以采用4个以为全加器级连成串行进位加法器,如下图所示,其中CSA为一位全加器。显然,对于这种方式,因高位运算必须要等低位进位来到后才能进行,因此它的延迟非常可观,高速运算无法胜任。

A和B为加法器的输入位串,对于4位加法器其位宽为4位,S为加法器输出位串,与输入位串相同,C为进位输入(CI)或输出(CO)。

实现代码为:全加器真值表如下:

module

adder4(cout,sum,ina,inb,cin); output[3:0]sum;

output cout;

input[3:0]ina,inb;

输入输出Xi Yi Ci-1 Si Ci 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0

0 1 1 0 1

1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1

input cin;

assign {count,sum}=ina+inb+cin;

endmodule

二、设计目的

⑴熟悉ISE9.1开发环境,掌握工程的生成方法。

⑵熟悉SEED-XDTK XUPV2Pro实验环境。

⑶了解Verilog HDL语言在FPGA中的使用。

⑷了解4位全加器的Verilog HDL语言实现。

三、设计容

用Verilog HDL语言设计4位全加器,进行功能仿真演示。

四、设计步骤

1、创建工程及设计输入。

⑴在E:\progect\目录下,新建名为count8的新工程。

⑵器件族类型(Device Family)选择“Virtex2P”

器件型号(Device)选“XC2VP30 ff896-7”

综合工具(Synthesis Tool)选“XST(VHDL/Verilog)”仿真器(Simulator)选“ISE Simulator”

⑶下面一直next和确定。

⑷设计输入:在源代码窗口中单击右键,在弹出的菜单中选择“New Source”,

在弹出的对话框中选择“Verilog Moudle”,在右端的“File name”中输入源文件名adder4,下面各步单击“Next”按钮。

⑸在弹出的源代码编辑框输入源代码并保存。

2、功能仿真

⑴在source窗口“sources for”中选择“Behavioral Simulation”。由“Test Bench

WaveForm”添加激励源。

点击Finish。

⑵出现波形激励编辑窗口。给ina和inb赋初始值。

⑶在processes窗口中单击“simulater behavioral model”即开始仿真,仿真结果如下。

从仿真的结果可以看出,sum=ina+inb+cin。仿真结果正确。

3、用ChipScope进行在线调试。

⑴生成ChipScope核。代码比较简单,这里只需要ICON和VIO两个核即可。打开“ChipScope pro core generator”

首先是生成ICON核的过程。

在output netlist位置指向adder4所在的路径,在device family里选virtex2p 器件。由于只用了VIO核,所以ICON的控制端口数设置为1。

之后就是就是一直确定就行,直到出现生成新的核的界面。

其次就是生成VIO核的过程。

在输入输出端口设置过程中选定异步输入端口和异步输出端口。异步输入端口宽度根据sum(4位)、cout(1位)的总位数设定,异步输出端口根据ina (4位)、inb(4位)、cin(1位)的总位数设定。

之后也是一直确定,这样VIO核也就生成了。

⑵添加ICON核与VIO核到工程。

点击“File—Open”,在adder4所在位置找到icon_xst_example.v和

vio_xst_example.v文件并打开,将ICON和VIO核的模块例化语句加到adder4.v 相应的位置,并进行修改,最后得到的代码如下:

module adder4(cout,sum);

output[3:0] sum;

output cout;

wire [3:0] ina,inb;

wire cin;

wire [35:0] control0;

wire [13:0] async_in;

wire [8:0] async_out;

icon i_icon

(

.control0(control0)

);

vio i_vio

(

.control(control0),

.async_in(async_in),

.async_out(async_out)

);

assign async_in[3:0]=ina[3:0];

assign async_in[7:4]=inb[3:0];

assign async_in[8]=cin;

assign async_in[12:9]=sum[3:0];

assign async_in[13]=cout;

assign ina[3:0]=async_out[3:0];

assign inb[3:0]=async_out[7:4];

assign cin=async_out[8];

assign {cout,sum}=ina+inb+cin;

endmodule

module icon

(

control0

);

output [35:0] control0;

endmodule

module vio

(

control,

async_in,

async_out

);

相关文档
最新文档