郑州轻工业学院
实验报告
题目:FPGA实验
课程名称:FPGA实验
姓名:田勋
院(系):计算机与通信工程学院
专业班级:通信工程14-01
学号:541407040140
指导教师:耿鑫
成绩:
时间:2017 年 3 月15
目录
1实验目的 (1)
2实验内容 (1)
3实验设备 (1)
4实验原理 (1)
5实验步骤 (5)
6实验结果 (6)
7实验心得 (8)
一、实验目的:
1、熟练Verilog语言和quartus开发环境;
2、掌握数据选择器原理;
3、编写数据选择器代码并调试仿真
3、理解半加器,全加器原理;
4、编写加法器代码并调试仿真;
5、掌握十进制计数器原理;
6、编写十进制可逆计数器代码并调试仿真;
二、实验内容:
1、理解数据选择器原理;
2、编写相应代码并调试仿真;
3、理解半加器、全加器原理;
4、编写加法器代码并调试仿真;
5、理解十进制计数器原理;
6、编写十进制可逆计数器Verilog代码并调试仿真;
三、实验设备:
带有windows操作系统和quartus软件的pc机一台;
四、实验原理:
一、数据选择器
1、数据选择器简介:
数据选择器又叫“多路开关”。数据选择器在地址码(或叫选择控制)电位的控制下,从几个数据输入中选择一个并将其送到一个公共的输出端。数据选择器的功能类似一个多掷开关,数据选择器为目前逻辑设计中应用十分广泛的逻辑部件,它有 2 选 1、4 选 1、8 选 1、16 选 1等类别。数据选择器的电路结构一般由与或门阵列组成,也有用传输门开关和门电路混合而成的。
2、真值表:
3、源代码
module datachoose(addr,in1,in2,in3,in4,in5,in6,in7,in8,mout,ncs);
input[2:0] addr;
input[width-1:0] in1,in2,in3,in4,in5,in6,in7,in8;
input ncs;
output[width-1:0] mout;
parameter width=8;
reg[width-1:0] mout;
always@(addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8 or ncs) begin
if(!ncs)
case(addr)
3'b000:mout=in1;
二、半加器与全加器
1、半加器原理:
(1)真值表:
加法器电路分为半加器和全加器两种。半加器在运算时不考虑前位的进位;全加器则考虑前位的进位。因此,全加器在电路的实现上也较复杂些。
(2)半加器的逻辑式:
X,Y(下面式子中以 A,B 代替)为要进行运算的两个值,Sum(下面式子中以 S 代替)和数,C 为向高位的进位值。
S=+A=A⊕B
C=AB
2、全加器原理:
(1)真值表:
3、源码
(1)半加器
module add_4(x,y,sum,c);
input[3:0] x,y;
output[3:0] sum;
output c;
assign{c,sum}=x+y;
endmodule
(2)全加器
module fulladd(a,b,s,cin,cont);
input [3:0]a,b;
input cin;
output [3:0]s;
output cont;
assign {cont,s}=a+b+cin;
三、十进制加减计数器
1、十进制计数器原理:
(1)如果从 0000 开始计数,则直到输入第九个脉冲为止,它的工作过程与 T 触发构成的计数器相同。计入第九个后电路进入 1001 状态,这时 Q3 的低电平使门G1 的输出为 0,而Q0 和 Q3 的高电平使门 G3 的输出为 1,所以 4 个触发器的输入控制端分别为T0=1,T1=0,T2=0,T3=1。因此,当第十个计数脉冲输入后,中间两个触发器维持 0 不变,两边的触发器从 1 翻转到 0,故电路返回 0000 状态。
(2)驱动方程:
根据电路图可写出电路的驱动方程为:
T0=1
T1=Q0
T2=Q0Q1
T3=Q0Q1Q2+Q0Q3
(4)源码
module counter_10(rst,clk,sel,cnt,carry_ena); input clk;
input rst;
input sel;
output [3:0]cnt;
output carry_ena;
reg [3:0]cnt;
reg carry_ena;
always@(posedge clk or posedge rst)
begin
if(rst)
cnt <= 4'b0;
else
case(sel)
1:
begin
if(cnt==4'd10)
cnt <= 4'b0;
else
cnt <= cnt + 1'b1;
end
0:
begin
if(cnt==4'b0)
cnt <= 4'd10;
else
cnt <= cnt - 1'b1;
end
endcase
end
always@(posedge clk or posedge rst)
Begin
五、实验步骤:
一、数据选择器
1、build工程,工程名为datachoose。
2、新建veillog Hdl file,将ex04_datachoose 文件夹下的datachoose.v 复制到刚建的veillog Hdl文件中保存,编译。
3、启动modesim,建立工程,工程名为datachoose,将ex04_datachoose文件下的datachoose和datachoose_test添加到工程中。
4、编译工程,点击工具栏上的compile选择compile all。
5、进行仿真,点击library中work下的datachoose_test,右击选择silmulate 进行仿真。
二、半加器与全加器
1、build 工程,工程名为add_4。
2、新建veillog Hdl file,将ex06_halfadd_4文件夹下的add_4.v复制到刚建的veillog Hdl文件中保存,编译。
3、启动modesim,建立工程,工程名为halfadd,将ex06_halfadd_4文件下的add_4和add_test添加到工程中。
4、编译工程,点击工具栏上的compile选择compile all。
5、进行仿真,点击library中work下的add_test,右击选择silmulate进行仿真。
三、十进制加减计数器
1、build工程,工程名为counter_10。
2、新建veillog Hdl file,将ex10_counter_10文件夹下的counter_10.v复制到刚建的veillog Hdl文件中,保存,编译。
3、启动modesim,建立工程,工程名为counter_10,将ex10_counter_10文件下的counter_10和counter10_test添加到工程中。
4、编译工程,点击工具栏上的compile选择compile all。
5、进行仿真,点击library中work下的counter10_test,右击选择silmulate 进行仿真。
六、实验结果:
一、数据选择器
二、半加器
三、全加器
四、十进制加减计数器
1、RLT Viewer
2、Technology Map Viewer(Post-Mapping)
3、仿真波形
七、实验心得:
刚接触到FPGA的时候,觉得挺容易的,但是在了解实验内容后,觉得并没有想象中的那么简单,只能够按照实验指导书一步步开始熟悉实验所需软件quartus,艰难的练习了Verilog语言,通过实验内容了解了数据选择器,半加器,全加器,十进制计数器原理及十进制可逆计数器的Verilog编写方法。虽然刚接触到FPGA实验,原理一些东西还不是很清楚,但我会继续学习并练习它的使用方法
实验成绩评定表