FPGA 实 验 报 告
(信息科学与工程学院)
专 业: 通信071
学生姓名: 喻明富 学 号: 07437126
2010 ~ 2010学年第 一 学期第 一 次试验
实验日期: 10月30号 指导教师: 刘威
成 绩: 审阅教师:
信息科学与工程学院电子与信息技术实验中心
教 务 处
一、 实验目的
1、 理解流水线设计技巧的原理;
2、 通过比较普通加法器和流水线加法器的性能验证后者的优越性。
二、 实验要求
1、 用《EDA麻石脱硫除尘器技术》课程所学方法设计一个8位加法器;
2、 盆角齿用流水线技巧设计一个2级流水线的8位加法器;
3、 比较普通加法器和流水线加法器的性能。离心浓缩
三、 实验原理
1、 设计一个普通加法器,用8个一位加法器级联,组成行波进位式加法器;
图1-1 行波进位式加法器
为了方便进行时间分析,需要在输入和输出端分别加上寄存器。
输入端(图1-2)
图1-2 输入端所加的寄存器
输出端(图1-3)
图1-3 输出端所加的寄存器led点阵书写显示屏
处理后可进行delay time分析、setup/hold time分析和频率分析。
2、 流水线设计方法
流水线设计就是将一个时延比较大的复杂的组合逻辑系统地分割,在各个部分(分级)之间插入寄存器以暂存中间数据的方法。目的是将一个大操作分解成若干的小操作,每一步小操作的耗时较小,各小操作能并行执行,所以数据可以像流水线一样轮流进入每一步小操作进行处理,这样整体地来看系统,数据可以更快地进入和流出系统,所以能提高数据吞吐率(提高处理速度)。这样的流水线的速率取决于每一步小操作所耗费的时间。由于采用同步寄存器分割组合逻辑,只要每个组合逻辑的时延小于寄存器的时钟周期,那么系统的频率取决于系统的时钟频率。 流水线处理是高速设计中的一个常用设计手段。如果某个设计的处理流程分为若干步骤,而且整个数据处理是“单流向”的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以考虑采用流水线设计方法来提高系统的工作频率。
例如,利用FPGA设计8位加法器时,考虑到:
1>FPGA每个逻辑单元规模小,一般为4输入LUT,如果加法器位数大于4bit,则会受到LUT容量限制。
2>FPGA触发器资源丰富,可以作为每一级流水的缓存。
由于操作数是不断加入输入端,因此每个加法的平均耗费时间是寄存器时钟的周期,即加法器速度取决于时钟的速度。
两级流水线的8位加法器系统结构为下图1-2
图1-2 二级流水线的加法器结构
Cin为低位进位输入,ina、inb为8bit的无符号数据,clk为系统时钟。第一级锁存器存储输入数据。第一级流水线进行ina和inb以及cin的低四位的加法运算,运算结果与高四位数据一并锁存至第二级锁存器。第二级流水线进行高四位的加法运算,并将数据锁存至第三级锁存器,第三级锁存器输出8bit的和sum及进位输出cout。
四、 实验仪器
Pc机一台
GW48实验开发系统一台(芯片为EPF10K10LC84-4)
安全监控
MAX+PLUSII软件系统一套
五、 实验内容
1、 设计一个行波进位的8位加法器,完成功能仿真和时序分析;
原理图设计:
进行setup/hold time时间分析,或进行频率分析。
2、 设计一个2级流水线的8位加法器,完成功能仿真和时序分析;
VHDL语言设计:
--File:add8b.vhd
--Designer:喻明富
--Module:Eight full adder
--Description:Eight full adder
-
-Simulator:MAX+plus2/Windows XP
--Synthesizer:MAX+plus2/Windows XP
--Date:2010.10.27
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.std_logic_arith.all;
USE IEEE.std_logic_unsigned.all;
ENTITY add8b IS
PORT(
clk:IN STD_LOGIC;
cin: IN STD_LOGIC;
a,b:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
s:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
cout:OUT STD_LOGIC);
END;
ARCHITECTURE cheng OF add8b IS
SIGNAL adda1,adda2,addb1,addb2,reg1a,reg1b,add1,add2:STD_LOGIC_VECTOR(4 DOWNTO 0);
SIGNAL reg2:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL cin1:STD_LOGIC;
BEGIN
PROCESS(clk)
BEGIN
IF clk'EVENT AND clk='1' THEN
adda1<='0'&a(3 DOWNTO 0);
addb1<='0'&b(3 DOWNTO 0);
adda2<='0'&a(7 DOWNTO 4);
addb2<='0'&b(7 DOWNTO 4);
cin1<=cin;
END IF;
END PROCESS;
PROCESS(CLK)
BEGIN滴胶卡制作
IF clk'EVENT AND clk='1' THEN
add1<=adda1+addb1+cin1;
reg1a<=adda2;
reg1b<=addb2;
END IF;
END PROCESS;
PROCESS(CLK)
BEGIN
IF clk'EVENT AND clk='1' THEN
add2<=reg1a+reg1b+add1(4);
reg2<=add1(3 DOWNTO 0);
END IF;
END PROCESS;
s<=add2(3 DOWNTO 0)®2(3 DOWNTO 0);
cout<=add2(4);
END cheng ;
进行setup/hold time时间分析,或进行频率分析。