fpga第一周实验
1、实验目的
1、基于Quartus件完成一个1位全加器的设计,分别采用:1)原理图输入 以及 2)Verilog编程 这两种设计方法。开发板基于Intel DE2-115。
2、在此基础上,用原理图以及Verilog 编程两种方式,完成4位全加器的设计,对比二者生成的 RTL差别;使用modelsim验证逻辑设计的正确性,并在DE2-115开发板上实际验证。
2、1bit全加器的设计
1、新建项目
打开quartus,新建项目
选择目标芯片:cycloneIVE系列的EP4CE115F29C7
2、新建原理图文件
原理图编辑输入流程如下:
(1)新建原理图文件。打开QuartusII,选菜单“File”一“New”,在弹 出的“New-”对话框中选择“ Design Files” 的原理图文件编辑输入项“Block block diagram/schematic File"按"OK"后将打开原理图编辑窗。
(2)在编辑窗中调入元件,完成半加器的原理图输入
直接双击原理图空白处,从“Symbol”窗中选择需要的符号,或者直接在“name”文本框中键入元件名,如“and2”为2输入与门,点OK按钮,即将元件调入原理图编辑窗中。例如为了设计半加器,分别调入元件and2,not,xnor和输入输出引脚input和output。并如图用点击拖动的方法连接好电路。然后分别在input和output的PIN NAME上双击使其变黑色,再用键盘分别输入各引脚名:a、b,co和s。
(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变成一个元件符号存盘,以待在高层次设计中调用。
将元件存放到路径文件夹当中
4、半加器仿真
(1)新建波形文件。如上面新建图形文件的方法,从“file”中选择“new”,然后从出现的对话框中选择“university program VWF”。点击“OK”。
(2)输入波形文件。在波形文件编辑器左端大片空白处双击,出现“insert nodeor bus”对话框,点击“node finder”按钮。如图。
然后在随后出现的“node finder”对话框中点击“list”按钮,则半加器
中所有的输入输出引脚全部出现在对话框左边。如图
点击两次“OK”后,出现如图的波形文件
设置输入波形取值。方法可以是选中某段需要设置数值“1”的波形,然后在工具栏上点击按钮,即可。反之设置“O”,或其余数值同法可行。
仿真。先保存文件为“half_adder.vwf”,点击工具栏上功能仿D真按钮”,完成后会自动跳出仿真后的文件。如图。从该图中可以分析半加器的逻辑关系是否正确。
5、设计全加器顶层文件
为了建立全加器的项层文件,必须再打开一个原理图编辑窗,即新建一个原理图文件。方法同前,即再次选择菜单"File”→“new",原理图文件编辑输入项"Block Diagram/Schematic File"。
与调入元件的方法一样,即在新打开的原理图编辑窗双击鼠标,在弹出的“symbol”窗的“name”栏输入底层文件半加器的存储名“half_adder”调出半加器,如图
6.将设计项目设置成顶层文件并编译仿真
将顶层文件f_adder.bdf设置为顶层文件的方法: project→set astop_level entity。如图:
功能仿真
7.verloge编程
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,查看电路图:
8.板上验证
二.4位全加器设计
1、输入原理图方法设计4位全加器
将full_adder设置为可调用元件
新建原理图文件:
点击File->New,然后选择Block Diagram/Schematic File,选择元件full_adder,并绘制原理图
通过tool->Netlist Viewers->RTL Viewer,查看电路图:
仿真:
创建一个向量波形文件,并添加、编辑信号:
功能仿真:
时序仿真
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,查看电路图:
使用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
验证结果:
3、上板验证
器材不足,后续补全