哈尔滨工业大学数字电子技术基础大作业HHaarrbbiinnIInnssttiittuutteeooffTTeecchhnnoollooggyy数数字字电电子子技技术术基基础础大大作作业业课程名称:数字电子技术基础设计题目:血型与状态机院系:班级:设计者:学号:哈尔滨工业大学哈尔滨工业大学数字电子技术基础大作业血型逻辑电路设计一实验目的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)beginclk_cnt=1'b0;clk_400Hz=~clk_400Hz;endelseclk_cnt=clk_cnt+1'b1;//位控制regclk_1Hz;integerclk_1Hz_cnt;//1Hz发声信号always@(posedgeclk)if(clk_1Hz_cnt==32'd25000000-1)beginclk_1Hz_cnt=1'b0;clk_1Hz=~clk_1Hz;endelseclk_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;endcasealways@(MorNorPorQ)beginE=(P&Q)|(~M&~N)|(~M&Q)|(~N&P);//选择能否输血case(E)1:beginOUT1=8'b10001001;OUT2=8'b01100001;OUT3=8'b01001001;OUT4=8'b11111111;bi=clk_400Hz;end0:beginOUT1=8'b00010011;OUT2=8'b00000011;OUT3=8'b11111111;OUT4=8'b11111111;bi=clk_1Hz;endendcaseendalways@(MorNorPorQ)//显示输入输出血型beginif(M==1&&N==0)F=4'b1000;elseif(M==0&&N==1)F=4'b0100;elseif(M==1&&N==1)F=4'b0010;elseF=4'b0001;endalways@(MorNorPorQ)//显示输入输出血型beginif(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;endendmodule2.管脚定义程序NETMLOC=N3;NETNLOC=E2;NETPLOC=L3;NETQLOC=P11;NETELOC=B2;NETOUT[7]LOC=L14;NETOUT[6]LOC=H12;NETOUT[5]LOC=N14;NETOUT[4]LOC=N11;NETOUT[3]LOC=P12;NETOUT[2]LOC=L13;NETOUT[1]LOC=M12;NETOUT[0]LOC=N13;NETCTL[3]LOC=K14;NETCTL[2]LOC=M13;NETCTL[1]LOC=J12;NETCTL[0]LOC=F12;NETclkLOC=B8;NETF[3]LOC=G1;NETF[2]LOC=P4;NETF[1]LOC=N4;NETF[0]LOC=N5;NETG[3]LOC=P6;NETG[2]LOC=P7;NETG[1]LOC=M11;NETG[0]LOC=M5;NETbiLOC=B6;五仿真图六下载设计到BASYS2开发板与实物图实物图:哈尔滨工业大学数字电子技术基础大作业附:程序流程:1.基本电路设计用MN表示输入血型,PQ表示受血者血型其中10表示A型,01表示B型,11表示AB型,00表示O型。用E表示能否输血,1表示能,0表示不能。MNPQEMNPQE0000110000000111001000101101010011110111哈尔滨工业大学数字电子技术基础大作业0100011000010111101001100111000111111111则卡诺图为:MNPQ00011110001000011100111111101001表达式为:EPQMNMQNP则设计一个四输入一输出的电路其逻辑电路图为MNPQE哈尔滨工业大学数字电子技术基础大作业通过此电路图,编写程序,把输入引脚定位到开关上,把输出引脚定位到一个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)beginclk_1Hz_cnt=1'b0;clk_1Hz=~clk_1Hz;endelseclk_1Hz_cnt=clk_1Hz_cnt+1'b1;always@(posedgeclk)if(clk_cnt==32'd100000)beginclk_cnt=1'b0;clk_400Hz=~clk_400Hz;endelseclk_cnt=clk_cnt+1'b1;regclk_05Hz;integerclk_05Hz_cnt;always@(posedgeclk)if(clk_05Hz_cnt==32'd50000000-1)beginclk_05Hz_cnt=1'b0;clk_05Hz=~clk_05Hz;endelse哈尔滨工业大学数字电子技术基础大作业clk_05Hz_cnt=clk_05Hz_cnt+1'b1;regclk_2Hz;integerclk_2Hz_cnt;always@(posedgeclk)if(clk_2Hz_cnt==32'd12500000-1)beginclk_2Hz_cnt=1'b0;clk_2Hz=~clk_2Hz;endelseclk_2Hz_cnt=clk_2Hz_cnt+1'b1;regclk_4Hz;integerclk_4Hz_cnt;always@(posedgeclk)if(clk_4Hz_cnt==32'd6250000-1)beginclk_4Hz_cnt=1'b0;clk_4Hz=~clk_4Hz;endelseclk_4Hz_cnt=clk_4Hz_cnt+1'b1;regclk_40Hz;integerclk_40Hz_cnt;always@(posedgeclk)if(clk_40Hz_cnt==32'd1250000-1)beginclk_40Hz_cnt=1'b0;clk_40Hz=~clk_40Hz;endelseclk_40Hz_cnt=clk_40Hz_cnt+1'b1;always@(posedgeclk_400Hz)CTL={CTL[2:0],CTL[3]};always@(posedgeclk_05Hz)begincurrent_state=next_state;endalways@(CTL)case(CTL)4'b0111:OUT=OUT1;4'b1011:OUT=OUT2;4'b1101:OUT=OUT3;4'b1110:OUT=OUT4;哈尔滨工业大学数字电子技术基础大作业default:OUT=4'hf;endcasealways@(current_stateordin)begincase(current_state)S0:beginop=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;elsenext_s