数电实验自主设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数电实验自主设计—哈工大
Harbin Institute of Technology
数字电子技术实验
自主设计实验报告
姓名班级1404105 学号台号
实验日期节次教师签字成绩
实验名称:基于BASYS2 FPGA板的开发应用
1.实验目的
(1) 熟悉Verilog语言的使用
(2) 能通过ISE软件进行FPGA简单的开放应用
(3) 结合实际应用掌握课上所学关于组合电路和时序电路的理论知识
(4) 掌握根据实际需求设计相应较为优化的电路的能力
2. 实验环境
ISE14.7
BASYS2开发板
3.实验内容
总共设计3个实际应用电路,分别为两个较为简单的组合逻辑电路和一个较为复杂的时序逻辑电路。
下面分别介绍各个设计:
(1)实验一:判断是否可以输血
设计要求:
已知人的血型由A、B、AB、O四种。输血时,输血者的血型与受血者血型必须符合图中用箭头指示的授受关系。要求该电路能够判断输血者与受血者的血型是否符合上述规定。具体要求如图1所示。
图 1输血要求
(2)实验二:显示译码电路
设计要求:
根据不同输入取值,依次显示“HIT+学号后5位(即HIT05108)”,共8个字型。
(3)实验三:数字钟
设计要求:
在数码管上显示分钟和秒的计时功能。最左边两个显示分钟,最右边两个显示秒钟。
4.各实验源代码及仿真结果
(1)实验一:判断是否可以输血
Verilog程序:
module shuxue(
input a,
input b,
input ab,
input o,
input sa,
input sb,
input sab,
input so,
output reg w,
output reg p
); //a,b,ab,o分别代
表输血者的四种
血型sa,sb,sab,so
分别代表受血者
的四种血型;w代
表W灯;p代表P
灯
reg w1,w2;
always@(*)
begin
case({a,b,ab,o}) //判断输血者的输入是否符合要求
4'b0001:w1=0;
4'b0010:w1=0;
4'b0100:w1=0;
4'b1000:w1=0;
default:w1=1; //若符合要求w1=0;否则w1=1
endcase
case({sa,sb,sab,so}) //判断受血者的输入是否符合要求
4'b0001:w2=0;
4'b0010:w2=0;
4'b0100:w2=0;
4'b1000:w2=0;
default:w2=1; //若符合要求w2=0;否则w2=1
endcase
w=w1||w2; //若输血者和受血者都符合要求w=0;否则w=1
if(w==1)
p = 0;
else if(sa==1) //若受血者是A型血
begin
if(a==1||ab==1||o==1) //输血者是A,AB,O型血,p=1
p=1;
else
p=0;
end
else if(sb==1) //若受血者是B型血
begin
if(b==1||ab==1||o==1) //输血者是B,AB,O型血,p=1
p=1;
else
p=0;
end
else if(sab==1) //若受血者是AB型血
begin
if(b==1||a==1||o==1||ab==1) //输血者是A,B,AB,O型血,p=1
p=1;
else
p=0;
end
else //若受血者是O型血
begin
if(o==1) //输血者是O型血,p=1
p=1;
else
p=0;
end
end
endmodule
引脚约束文件:NET "a" LOC=P11; NET "b" LOC=L3; NET "ab" LOC=K3; NET "o" LOC=b4; NET "sa" LOC=g3; NET "sb" LOC=f3; NET "sab" LOC=e2; NET "so" LOC=n3; NET "w" LOC=m11; NET "p" LOC=m5;
仿真结果:
数字电子技术基础设计作业
10
图 2实验一仿真波形图
(2)实验二:显示译码电路(HIT05108) Verilog 程序:
module da2( input [2:0] s, output reg[7:0] dl ); //s 表示8种输入;dl 控制8段数码管
always@(s) begin case(s)
3'b000:dl=8'b10010001; //s 输入为0,数码管显示H 3'b001:dl=8'b11110111; //s 输入为1,数码管显示I 3'b010:dl=8'b11100001; //s 输入为2,数码管显示T 3'b011:dl=8'b10011111; //s 输入为3,数码管显示1 3'b100:dl=8'b00000011; //s 输入为4,数码管显示0 3'b101:dl=8'b01001001; //s 输入为5,数码管显示5 3'b110:dl=8'b00000011; //s 输入为6,数码管显示0
3'b111:dl=8'b00000001;
//s 输入为7,数码管显示
8