哈工大数电大作业.docx

上传人:b****9 文档编号:26055812 上传时间:2023-06-17 格式:DOCX 页数:31 大小:1.21MB
下载 相关 举报
哈工大数电大作业.docx_第1页
第1页 / 共31页
哈工大数电大作业.docx_第2页
第2页 / 共31页
哈工大数电大作业.docx_第3页
第3页 / 共31页
哈工大数电大作业.docx_第4页
第4页 / 共31页
哈工大数电大作业.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

哈工大数电大作业.docx

《哈工大数电大作业.docx》由会员分享,可在线阅读,更多相关《哈工大数电大作业.docx(31页珍藏版)》请在冰豆网上搜索。

哈工大数电大作业.docx

哈工大数电大作业

 

哈工大数电大作业

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;

OUT3=8'b11111111;

OUT4=8'b00000011;

BI=clk_4Hz;

if(din==0)

next_state=S0;

else

next_state=S3;

end

S3:

begin

op=1;

B=0;C=0;D=0;E=0;

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来完成以后的一些工作,对我有很大的帮助。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1