哈工大数电大作业演示教学.docx
《哈工大数电大作业演示教学.docx》由会员分享,可在线阅读,更多相关《哈工大数电大作业演示教学.docx(30页珍藏版)》请在冰豆网上搜索。
哈工大数电大作业演示教学
HarbinInstituteofTechnology
数字电子技术基础大作业
课程名称:
数字电子技术基础
设计题目:
血型与状态机
院系:
班级:
设计者:
学号:
哈尔滨工业大学
血型逻辑电路设计
一实验目的
1.掌握采用可编程逻辑器件实现数字电路与系统的方法。
2.掌握采用Xilinx_ISE软件开发可编程逻辑器件的过程。
3.学会设计血型能否输血的数字电路。
4.掌握VerilogHDL描述数字逻辑电路与系统的方法。
二设计要求
1.采用BASYS2开发板开关,LED,数码管等制作验证能否输血的电路。
2.采用Xilinx_ISE软件进行编程、仿真与下载设计到BASYS2开发板。
三电路图
1.电路模块图(简化)
应用:
2.
内部电路组成(简化)
四编程
1.源程序
modulexuexing(M,N,P,Q,E,F,G,OUT,CTL,clk,bi);
inputM;
inputN;
inputP;
inputQ;
inputclk;
outputE;
output[3:
0]F;
output[3:
0]G;
output[7:
0]OUT;
output[3:
0]CTL;
regE;
reg[3:
0]F;
reg[3:
0]G;
reg[7:
0]OUT;
reg[7:
0]OUT1;
reg[7:
0]OUT2;
reg[7:
0]OUT3;
reg[7:
0]OUT4;
reg[3:
0]CTL=4'b1110;
outputbi;
regbi;
integerclk_cnt;
regclk_400Hz;
always@(posedgeclk)//400Hz扫描信号
if(clk_cnt==32'd100000)
begin
clk_cnt<=1'b0;
clk_400Hz<=~clk_400Hz;
end
else
clk_cnt<=clk_cnt+1'b1;
//位控制
regclk_1Hz;
integerclk_1Hz_cnt;//1Hz发声信号
always@(posedgeclk)
if(clk_1Hz_cnt==32'd25000000-1)
begin
clk_1Hz_cnt<=1'b0;
clk_1Hz<=~clk_1Hz;
end
else
clk_1Hz_cnt<=clk_1Hz_cnt+1'b1;
always@(posedgeclk_400Hz)
CTL<={CTL[2:
0],CTL[3]};
//段控制
always@(CTL)
case(CTL)
4'b0111:
OUT=OUT1;
4'b1011:
OUT=OUT2;
4'b1101:
OUT=OUT3;
4'b1110:
OUT=OUT4;
default:
OUT=4'hf;
endcase
always@(MorNorPorQ)
begin
E=(P&Q)|(~M&~N)|(~M&Q)|(~N&P);//选择能否输血
case(E)
1:
begin
OUT1=8'b10001001;
OUT2=8'b01100001;
OUT3=8'b01001001;
OUT4=8'b11111111;
bi=clk_400Hz;
end
0:
begin
OUT1=8'b00010011;
OUT2=8'b00000011;
OUT3=8'b11111111;
OUT4=8'b11111111;
bi=clk_1Hz;
end
endcase
end
always@(MorNorPorQ)//显示输入输出血型
begin
if(M==1&&N==0)
F=4'b1000;
elseif(M==0&&N==1)
F=4'b0100;
elseif(M==1&&N==1)
F=4'b0010;
else
F=4'b0001;
end
always@(MorNorPorQ)//显示输入输出血型
begin
if(P==1&&Q==0)
G=4'b1000;
elseif(P==0&&Q==1)
G=4'b0100;
elseif(P==1&&Q==1)
G=4'b0010;
else
G=4'b0001;
end
endmodule
2.管脚定义程序
NET"M"LOC=N3;
NET"N"LOC=E2;
NET"P"LOC=L3;
NET"Q"LOC=P11;
NET"E"LOC=B2;
NET"OUT[7]"LOC=L14;
NET"OUT[6]"LOC=H12;
NET"OUT[5]"LOC=N14;
NET"OUT[4]"LOC=N11;
NET"OUT[3]"LOC=P12;
NET"OUT[2]"LOC=L13;
NET"OUT[1]"LOC=M12;
NET"OUT[0]"LOC=N13;
NET"CTL[3]"LOC=K14;
NET"CTL[2]"LOC=M13;
NET"CTL[1]"LOC=J12;
NET"CTL[0]"LOC=F12;
NET"clk"LOC=B8;
NET"F[3]"LOC=G1;
NET"F[2]"LOC=P4;
NET"F[1]"LOC=N4;
NET"F[0]"LOC=N5;
NET"G[3]"LOC=P6;
NET"G[2]"LOC=P7;
NET"G[1]"LOC=M11;
NET"G[0]"LOC=M5;
NET"bi"LOC=B6;
五仿真图
六下载设计到BASYS2开发板与实物图
实物图:
附:
程序流程:
1.基本电路设计
用MN表示输入血型,PQ表示受血者血型其中10表示A型,01表示B型,11表示AB型,00表示O型。
用E表示能否输血,1表示能,0表示不能。
M
N
P
Q
E
M
N
P
Q
E
0
0
0
0
1
1
0
0
0
0
0
0
0
1
1
1
0
0
1
0
0
0
1
0
1
1
0
1
0
1
0
0
1
1
1
1
0
1
1
1
0
1
0
0
0
1
1
0
0
0
0
1
0
1
1
1
1
0
1
0
0
1
1
0
0
1
1
1
0
0
0
1
1
1
1
1
1
1
1
1
则卡诺图为:
MNPQ
00
01
11
10
00
1
0
0
0
01
1
1
0
0
11
1
1
1
1
10
1
0
0
1
表达式为:
则设计一个四输入一输出的电路
其逻辑电路图为
通过此电路图,编写程序,把输入引脚定位到开关上,把输出引脚定位到一个LED上便可以完成设计任务。
2.项目创新
(1)仅使用一个LED的亮与灭来表示能否输血效果不明显,为了加入一个更明显显示能否输血的指示,所以就用到了Basys2板子上自带的数码管,使其在能够输血时显示yes,不能输血时显示no。
观察硬件电路图发现,数码管只由一个片选端控制,所有如果使数码管显示不同字母,则需要利用人类的视觉暂留效应进行循环扫描,来使数码管来显示不同的信息。
(2)为了增强能否输血的提示效果,所以加入一个蜂鸣器,用声音提示能否输血。
当系统开启切能输血时,蜂鸣器输出一低音震荡,当不能输血时,蜂鸣器输出高音报警,提示不能输血。
(3)在加入蜂鸣器报警与数码管之后,使用LED来表示能否输血已经多余,而且别人无法判断输血与受血分别是什么血型,所以把8个LED分成两组,其中第一组表示输血血型,第二组表示受血血型,第一个灯表示A型,第二个灯表示B型,第三个灯表示AB型,最后一个灯表示O型。
时序逻辑电路设计
一实验目的
1.掌握采用可编程逻辑器件实现数字电路与系统的方法。
2.掌握采用Xilinx_ISE软件开发可编程逻辑器件的过程。
3.学会设计状态机时序逻辑电路。
4.掌握VerilogHDL描述数字逻辑电路与系统的方法。
二设计要求
1.采用BASYS2开发板开关,LED,数码管等制作验证能否输血的电路。
2.采用Xilinx_ISE软件进行编程、仿真与下载设计到BASYS2开发板。
三电路图
1.电路模块图
2.内部电路组成
四编程
1.源程序
moduleShixu(clk,op,din,B,C,D,E,F,G,H,I,BI,OUT,CTL);
inputclk;
inputdin;
outputBI,op;
output[7:
0]OUT;
output[3:
0]CTL;
outputB,C,D,E,F,G,H,I;
reg[7:
0]OUT;
reg[7:
0]OUT1;
reg[7:
0]OUT2;
reg[7:
0]OUT3;
reg[7:
0]OUT4;
reg[3:
0]CTL=4'b1110;
regB,C,D,E,F,G,H,I;
reg[1:
0]current_state,next_state;
regop,BI;
parameterS0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;
regclk_1Hz,clk_400Hz;
integerclk_1Hz_cnt,clk_cnt;
always@(posedgeclk)
if(clk_1Hz_cnt==32'd25000000-1)
begin
clk_1Hz_cnt<=1'b0;
clk_1Hz<=~clk_1Hz;
end
else
clk_1Hz_cnt<=clk_1Hz_cnt+1'b1;
always@(posedgeclk)
if(clk_cnt==32'd100000)
begin
clk_cnt<=1'b0;
clk_400Hz<=~clk_400Hz;
end
else
clk_cnt<=clk_cnt+1'b1;
regclk_05Hz;
integerclk_05Hz_cnt;
always@(posedgeclk)
if(clk_05Hz_cnt==32'd50000000-1)
begin
clk_05Hz_cnt<=1'b0;
clk_05Hz<=~clk_05Hz;
end
else
clk_05Hz_cnt<=clk_05Hz_cnt+1'b1;
regclk_2Hz;
integerclk_2Hz_cnt;
always@(posedgeclk)
if(clk_2Hz_cnt==32'd12500000-1)
begin
clk_2Hz_cnt<=1'b0;
clk_2Hz<=~clk_2Hz;
end
else
clk_2Hz_cnt<=clk_2Hz_cnt+1'b1;
regclk_4Hz;
integerclk_4Hz_cnt;
always@(posedgeclk)
if(clk_4Hz_cnt==32'd6250000-1)
begin
clk_4Hz_cnt<=1'b0;
clk_4Hz<=~clk_4Hz;
end
else
clk_4Hz_cnt<=clk_4Hz_cnt+1'b1;
regclk_40Hz;
integerclk_40Hz_cnt;
always@(posedgeclk)
if(clk_40Hz_cnt==32'd1250000-1)
begin
clk_40Hz_cnt<=1'b0;
clk_40Hz<=~clk_40Hz;
end
else
clk_40Hz_cnt<=clk_40Hz_cnt+1'b1;
always@(posedgeclk_400Hz)
CTL<={CTL[2:
0],CTL[3]};
always@(posedgeclk_05Hz)
begin
current_state<=next_state;
end
always@(CTL)
case(CTL)
4'b0111:
OUT=OUT1;
4'b1011:
OUT=OUT2;
4'b1101:
OUT=OUT3;
4'b1110:
OUT=OUT4;
default:
OUT=4'hf;
endcase
always@(current_stateordin)
begin
case(current_state)
S0:
begin
op=0;
B=1;C=1;D=0;E=0;
F=0;G=0;H=0;I=0;
OUT1=8'b01001001;
OUT2=8'b00000011;
OUT3=8'b11111111;
OUT4=8'b00000011;
BI=clk_1Hz;
if(din==0)
next_state=S0;
else
next_state=S1;
end
S1:
begin
op=0;
B=0;C=0;D=1;E=1;
F=0;G=0;H=0;I=0;
OUT1=8'b01001001;
OUT2=8'b10011111;
OUT3=8'b11111111;
OUT4=8'b00000011;
BI=clk_2Hz;
if(din==0)
next_state=S0;
else
next_state=S2;
end
S2:
begin
op=0;
B=0;C=0;D=0;E=0;
可见“体验化消费”广受大学生的欢迎、喜欢,这是我们创业项目是否成功的关键,必须引起足够的注意。
F=1;G=1;H=0;I=0;
(三)上海的文化对饰品市场的影响OUT1=8'b01001001;
OUT2=8'b00100101;
据统计,上海国民经济持续快速增长。
03全年就实现国内生产总值(GDP)6250.81亿元,按可比价格计算,比上年增长11.8%。
第三产业的增速受非典影响而有所减缓,全年实现增加值3027.11亿元,增长8%,增幅比上年下降2个百分点。
OUT3=8'b11111111;
OUT4=8'b00000011;
BI=clk_4Hz;
营销调研课题if(din==0)
世界上的每一个国家和民族都有自己的饰品文化,将这些饰品汇集到一起再进行新的组合,便可以无穷繁衍下去,满足每一个人不同的个性需求。
next_state=S0;
else
next_state=S3;
end
在上海,随着轨道交通的发展,地铁商铺应运而生,并且在重要的商业圈已经形成一定的气候,投资经营地铁商铺逐渐成为一大热门。
在人民广场地下“的美”购物中心,有一家DIY自制饰品店---“碧芝自制饰品店”。
S3:
我们女生之所以会钟爱饰品,也许是因为它的新颖,可爱,实惠,时尚,简单等。
的确,手工艺品价格适中。
也许还有更多理由和意义。
那么大学生最喜欢哪种手工艺品呢?
此次调查统计如下图(1-3)begin
附件
(二):
调查问卷设计op=1;
图1-3大学生偏爱的手工艺品种类分布B=0;C=0;D=0;E=0;
1、DIY手工艺市场状况分析F=0;G=0;H=1;I=1;
OUT1=8'b01001001;
OUT2=8'b00001101;
OUT3=8'b11111111;
OUT4=8'b10011111;
BI=clk_40Hz;
if(din==0)
begin
next_state=S0;
end
else
next_state=S3;
end
default:
begin
op=0;
B=1;C=1;D=0;E=0;
F=0;G=0;H=0;I=0;
next_state=S0;
end
endcase
end
endmodule
2.管脚定义程序
NET"din"LOC=N3;
NET"op"LOC=C6;
NET"B"LOC=G1;
NET"C"LOC=P4;
NET"D"LOC=N4;
NET"E"LOC=N5;
NET"F"LOC=P6;
NET"G"LOC=P7;
NET"H"LOC=M11;
NET"I"LOC=M5;
NET"clk"LOC=B8;
NET"BI"LOC=B6;
NET"OUT[7]"LOC=L14;
NET"OUT[6]"LOC=H12;
NET"OUT[5]"LOC=N14;
NET"OUT[4]"LOC=N11;
NET"OUT[3]"LOC=P12;
NET"OUT[2]"LOC=L13;
NET"OUT[1]"LOC=M12;
NET"OUT[0]"LOC=N13;
NET"CTL[3]"LOC=K14;
NET"CTL[2]"LOC=M13;
NET"CTL[1]"LOC=J12;
NET"CTL[0]"LOC=F12;
五仿真图
六下载设计到BASYS2开发板与实物图
实物图:
附:
为了更好的说明各状态,我对蜂鸣器加入了不同的发声频率区分。
七实验结论
经实验验证,此程序可以完成预期要求,完成特定任务。
八心得体会
本次大作业让我熟悉了开发板的使用与可编程逻辑器件的应用,我了解了如何设计开发一个FPGA逻辑电路的流程,我以后懂得了可以使用FPGA来完成以后的一些工作,对我有很大的帮助。