当前位置:文档之家› 哈工大数电大作业

哈工大数电大作业

哈工大数电大作业-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KIIH a r b i n I n s t i t u t e o f T e c h n o l o g y数字电子技术基础大作业课程名称:数字电子技术基础设计题目:血型与状态机院系:班级:设计者:学号:哈尔滨工业大学血型逻辑电路设计一实验目的1.掌握采用可编程逻辑器件实现数字电路与系统的方法。

2.掌握采用Xilinx_ISE软件开发可编程逻辑器件的过程。

3.学会设计血型能否输血的数字电路。

4.掌握Verilog HDL描述数字逻辑电路与系统的方法。

二设计要求1.采用BASYS2开发板开关,LED,数码管等制作验证能否输血的电路。

2.采用Xilinx_ISE软件进行编程、仿真与下载设计到BASYS2开发板。

三电路图1.电路模块图(简化)应用:2.内部电路组成(简化)四编程1.源程序module xuexing(M, N, P, Q, E,F,G,OUT,CTL,clk,bi);input M;input N;input P;input Q;input clk;output E;output[3:0] F;output[3:0] G;output[7:0] OUT;output[3:0] CTL;reg E;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;output bi;reg bi;integer clk_cnt;reg clk_400Hz;always @(posedge clk) //400Hz扫描信号if(clk_cnt==32'd100000)beginclk_cnt <= 1'b0;clk_400Hz <= ~clk_400Hz;endelseclk_cnt <= clk_cnt + 1'b1;//位控制reg clk_1Hz;integer clk_1Hz_cnt; //1Hz发声信号always @(posedge clk)if(clk_1Hz_cnt==32'd2*******-1)beginclk_1Hz_cnt <= 1'b0;clk_1Hz <= ~clk_1Hz;endelseclk_1Hz_cnt <= clk_1Hz_cnt + 1'b1; always @(posedge clk_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 @(M or N or P or Q)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 @(M or N or P or Q) //显示输入输出血型beginif(M==1&&N==0)F=4'b1000;else if(M==0&&N==1)F=4'b0100;else if(M==1&&N==1)F=4'b0010;elseF=4'b0001;endalways @(M or N or P or Q) //显示输入输出血型beginif(P==1&&Q==0)G=4'b1000;else if(P==0&&Q==1)G=4'b0100;else if(P==1&&Q==1)G=4'b0010;elseG=4'b0001;endendmodule2.管脚定义程序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表示不能。

则卡诺图为:表达式为:E PQ MN MQ NP =+++ 则设计一个四输入一输出的电路 其逻辑电路图为通过此电路图,编写程序,把输入引脚定位到开关上,把输出引脚定位到一个LED 上便可以完成设计任务。

2.项目创新(1)仅使用一个LED 的亮与灭来表示能否输血效果不明显,为了加入一个更明显显示能否输血的指示,所以就用到了Basys2板子上自带的数码管,使其在能够输血时显示yes ,不能输血时显示no 。

观察硬件电路图发现,数码管只由一个片选端控制,所有如果使数码管显示不同字母,则需要利用人类的视觉暂留效应进行循环扫描,来使数码管来显示不同的信息。

(2)为了增强能否输血的提示效果,所以加入一个蜂鸣器,用声音提示能否输血。

当系统开启切能输血时,蜂鸣器输出一低音震荡,当不能输血时,蜂鸣器输出高音报警,提示不能输血。

(3)在加入蜂鸣器报警与数码管之后,使用LED来表示能否输血已经多余,而且别人无法判断输血与受血分别是什么血型,所以把8个LED分成两组,其中第一组表示输血血型,第二组表示受血血型,第一个灯表示A型,第二个灯表示B型,第三个灯表示AB型,最后一个灯表示O型。

时序逻辑电路设计一实验目的1.掌握采用可编程逻辑器件实现数字电路与系统的方法。

2.掌握采用Xilinx_ISE软件开发可编程逻辑器件的过程。

3.学会设计状态机时序逻辑电路。

4.掌握Verilog HDL描述数字逻辑电路与系统的方法。

二设计要求1.采用BASYS2开发板开关,LED,数码管等制作验证能否输血的电路。

2.采用Xilinx_ISE软件进行编程、仿真与下载设计到BASYS2开发板。

三电路图1.电路模块图2.内部电路组成四编程1.源程序module Shixu(clk,op,din,B,C,D,E,F,G,H,I,BI,OUT,CTL);input clk;input din;output BI,op;output[7:0] OUT;output[3:0] CTL;output B,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;reg B,C,D,E,F,G,H,I;reg[1:0] current_state,next_state;reg op,BI;parameter S0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;reg clk_1Hz,clk_400Hz;integer clk_1Hz_cnt,clk_cnt;always @(posedge clk)if(clk_1Hz_cnt==32'd2*******-1)beginclk_1Hz_cnt <= 1'b0;clk_1Hz <= ~clk_1Hz;endelseclk_1Hz_cnt <= clk_1Hz_cnt + 1'b1;always @(posedge clk)if(clk_cnt==32'd100000)beginclk_cnt <= 1'b0;clk_400Hz <= ~clk_400Hz;endelseclk_cnt <= clk_cnt + 1'b1;reg clk_05Hz;integer clk_05Hz_cnt;always @(posedge clk)if(clk_05Hz_cnt==32'd5*******-1)beginclk_05Hz_cnt <= 1'b0;clk_05Hz <= ~clk_05Hz;endelseclk_05Hz_cnt <= clk_05Hz_cnt + 1'b1;reg clk_2Hz;integer clk_2Hz_cnt;always @(posedge clk)if(clk_2Hz_cnt==32'd1*******-1)beginclk_2Hz_cnt <= 1'b0;clk_2Hz <= ~clk_2Hz;endelseclk_2Hz_cnt <= clk_2Hz_cnt + 1'b1;reg clk_4Hz;integer clk_4Hz_cnt;always @(posedge clk)if(clk_4Hz_cnt==32'd6250000-1)beginclk_4Hz_cnt <= 1'b0;clk_4Hz <= ~clk_4Hz;endelseclk_4Hz_cnt <= clk_4Hz_cnt + 1'b1;reg clk_40Hz;integer clk_40Hz_cnt;always @(posedge clk)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 @(posedge clk_400Hz)CTL <= {CTL[2:0],CTL[3]};always @ (posedge clk_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_state or din)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_state=S1;endS1:beginop=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;elsenext_state=S2;endS2:beginop=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;elsenext_state=S3;endS3:beginop=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)beginnext_state=S0;endelsenext_state=S3;enddefault:beginop=0;B=1;C=1;D=0;E=0;F=0;G=0;H=0;I=0;next_state=S0;endendcaseendendmodule2.管脚定义程序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开发板与实物图实物图:附:为了更好的说明各状态,我对蜂鸣器加入了不同的发声频率区分。

相关主题