1、Harbin Institute of Technology数字电子技术基础大作业课程名称: 数字电子技术基础 设计题目: 血型与状态机 院 系:班 级: 设 计 者: 学 号: 哈尔滨工业大学血型逻辑电路设计一 实验目的1. 掌握采用可编程逻辑器件实现数字电路与系统的方法。2. 掌握采用Xilinx_ISE软件开发可编程逻辑器件的过程。3. 学会设计血型能否输血的数字电路。4. 掌握Verilog HDL描述数字逻辑电路与系统的方法。二 设计要求1. 采用BASYS2开发板开关,LED,数码管等制作验证能否输血的电路。2. 采用Xilinx_ISE软件进行编程、仿真与下载设计到BASYS2开
2、发板。三 电路图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;output3:0 F;output3:0 G;output7:0 OUT;output3:0 CTL; reg E;reg3:0 F;reg3:0 G;reg7:0 OUT;reg7:0 OUT1;reg7:0 OUT2;reg7:0 OUT3;reg7:0 OUT4;reg3:0 CTL=4b11
3、10;output bi;reg bi;integer clk_cnt;reg clk_400Hz;always (posedge clk)/400Hz扫描信号if(clk_cnt=32d100000)begin clk_cnt = 1b0;clk_400Hz = clk_400Hz;endelseclk_cnt = clk_cnt + 1b1;/位控制reg clk_1Hz;integer clk_1Hz_cnt; /1Hz发声信号always (posedge clk)if(clk_1Hz_cnt=32d25000000-1)begin clk_1Hz_cnt = 1b0;clk_1Hz
4、= clk_1Hz;endelseclk_1Hz_cnt = clk_1Hz_cnt + 1b1;always (posedge clk_400Hz)CTL = CTL2:0,CTL3;/段控制always (CTL)case(CTL)4b0111:OUT=OUT1;4b1011:OUT=OUT2;4b1101:OUT=OUT3;4b1110:OUT=OUT4;default:OUT=4hf;endcasealways (M or N or P or Q)beginE=(P&Q)|(M&N)|(M&Q)|(N&P); /选择能否输血case(E)1:beginOUT1=8b10001001;O
5、UT2=8b01100001;OUT3=8b01001001;OUT4=8b11111111;bi=clk_400Hz;end0:beginOUT1=8b00010011;OUT2=8b00000011;OUT3=8b11111111;OUT4=8b11111111;bi=clk_1Hz;endendcaseendalways (M or N or P or Q) /显示输入输出血型beginif(M=1&N=0)F=4b1000;else if(M=0&N=1)F=4b0100;else if(M=1&N=1)F=4b0010;elseF=4b0001;endalways (M or N o
6、r P or Q) /显示输入输出血型beginif(P=1&Q=0)G=4b1000;else if(P=0&Q=1)G=4b0100;else if(P=1&Q=1)G=4b0010;elseG=4b0001;endendmodule 2.管脚定义程序NET M LOC=N3;NET N LOC=E2;NET P LOC=L3;NET Q LOC=P11;NET E LOC=B2;NET OUT7 LOC = L14;NET OUT6 LOC = H12;NET OUT5 LOC = N14;NET OUT4 LOC = N11;NET OUT3 LOC = P12;NET OUT2 LO
7、C = L13;NET OUT1 LOC = M12;NET OUT0 LOC = N13;NET CTL3 LOC = K14;NET CTL2 LOC = M13;NET CTL1 LOC = J12;NET CTL0 LOC = F12;NET clk LOC=B8;NET F3 LOC=G1;NET F2 LOC=P4;NET F1 LOC=N4;NET F0 LOC=N5;NET G3 LOC=P6;NET G2 LOC=P7;NET G1 LOC=M11;NET G0 LOC=M5;NET bi LOC=B6;五 仿真图六 下载设计到BASYS2开发板与实物图实物图:附:程序流程:
8、1.基本电路设计用MN表示输入血型,PQ表示受血者血型其中10表示A型,01表示B型,11表示AB型,00表示O型。用E表示能否输血,1表示能,0表示不能。MNPQEMNPQE00001100000001110010001011010100111101110100011000010111101001100111000111111111则卡诺图为:MN PQ00011110001000011100111111101001表达式为: 则设计一个四输入一输出的电路其逻辑电路图为通过此电路图,编写程序,把输入引脚定位到开关上,把输出引脚定位到一个LED上便可以完成设计任务。2.项目创新(1)仅使用一个
9、LED的亮与灭来表示能否输血效果不明显,为了加入一个更明显显示能否输血的指示,所以就用到了Basys2板子上自带的数码管,使其在能够输血时显示yes,不能输血时显示no。观察硬件电路图发现,数码管只由一个片选端控制,所有如果使数码管显示不同字母,则需要利用人类的视觉暂留效应进行循环扫描,来使数码管来显示不同的信息。(2)为了增强能否输血的提示效果,所以加入一个蜂鸣器,用声音提示能否输血。当系统开启切能输血时,蜂鸣器输出一低音震荡,当不能输血时,蜂鸣器输出高音报警,提示不能输血。(3)在加入蜂鸣器报警与数码管之后,使用LED来表示能否输血已经多余,而且别人无法判断输血与受血分别是什么血型,所以把
10、8个LED分成两组,其中第一组表示输血血型,第二组表示受血血型,第一个灯表示A型,第二个灯表示B型,第三个灯表示AB型,最后一个灯表示O型。时序逻辑电路设计一 实验目的1.掌握采用可编程逻辑器件实现数字电路与系统的方法。2.掌握采用Xilinx_ISE软件开发可编程逻辑器件的过程。3.学会设计状态机时序逻辑电路。4.掌握Verilog HDL描述数字逻辑电路与系统的方法。二 设计要求1.采用BASYS2开发板开关,LED,数码管等制作验证能否输血的电路。2.采用Xilinx_ISE软件进行编程、仿真与下载设计到BASYS2开发板。三 电路图1.电路模块图2.内部电路组成四 编程1.源程序mod
11、ule Shixu(clk,op,din,B,C,D,E,F,G,H,I,BI,OUT,CTL);input clk;input din;output BI,op;output7:0 OUT;output3:0 CTL;output B,C,D,E,F,G,H,I;reg7:0 OUT;reg7:0 OUT1;reg7:0 OUT2;reg7:0 OUT3;reg7:0 OUT4;reg3:0 CTL=4b1110;reg B,C,D,E,F,G,H,I;reg1:0 current_state,next_state;reg op,BI;parameter S0=2b00,S1=2b01,S2
12、=2b10,S3=2b11;reg clk_1Hz,clk_400Hz; integer clk_1Hz_cnt,clk_cnt; always (posedge clk) if(clk_1Hz_cnt=32d25000000-1) begin clk_1Hz_cnt = 1b0; clk_1Hz = clk_1Hz; end else clk_1Hz_cnt = clk_1Hz_cnt + 1b1;always (posedge clk)if(clk_cnt=32d100000)begin clk_cnt = 1b0;clk_400Hz = clk_400Hz;endelseclk_cnt
13、= clk_cnt + 1b1;reg clk_05Hz;integer clk_05Hz_cnt;always (posedge clk)if(clk_05Hz_cnt=32d50000000-1)begin clk_05Hz_cnt = 1b0;clk_05Hz = clk_05Hz;endelseclk_05Hz_cnt = clk_05Hz_cnt + 1b1;reg clk_2Hz;integer clk_2Hz_cnt;always (posedge clk)if(clk_2Hz_cnt=32d12500000-1)begin clk_2Hz_cnt = 1b0;clk_2Hz =
14、 clk_2Hz;endelseclk_2Hz_cnt = clk_2Hz_cnt + 1b1;reg clk_4Hz;integer clk_4Hz_cnt;always (posedge clk)if(clk_4Hz_cnt=32d6250000-1)begin clk_4Hz_cnt = 1b0;clk_4Hz = clk_4Hz;endelseclk_4Hz_cnt = clk_4Hz_cnt + 1b1;reg clk_40Hz;integer clk_40Hz_cnt;always (posedge clk)if(clk_40Hz_cnt=32d1250000-1)begin cl
15、k_40Hz_cnt = 1b0;clk_40Hz = clk_40Hz;endelseclk_40Hz_cnt = clk_40Hz_cnt + 1b1;always (posedge clk_400Hz)CTL = CTL2:0,CTL3;always (posedge clk_05Hz)begincurrent_state=next_state;endalways (CTL)case(CTL)4b0111:OUT=OUT1;4b1011:OUT=OUT2;4b1101:OUT=OUT3;4b1110:OUT=OUT4;default:OUT=4hf;endcasealways (curr
16、ent_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=8b01001001;OUT2=8b00000011;OUT3=8b11111111;OUT4=8b00000011;BI=clk_1Hz;if(din=0)next_state=S0;else next_state=S1;endS1:beginop=0;B=0;C=0;D=1;E=1;F=0;G=0;H=0;I=0;OUT1=8b01001001;OUT2=8b10011111;OUT3=8b11111111;O
17、UT4=8b00000011;BI=clk_2Hz;if(din=0)next_state=S0;else next_state=S2;endS2:beginop=0;B=0;C=0;D=0;E=0;F=1;G=1;H=0;I=0;OUT1=8b01001001;OUT2=8b00100101;OUT3=8b11111111;OUT4=8b00000011;BI=clk_4Hz;if(din=0)next_state=S0;else next_state=S3;endS3:beginop=1;B=0;C=0;D=0;E=0;F=0;G=0;H=1;I=1;OUT1=8b01001001;OUT
18、2=8b00001101;OUT3=8b11111111;OUT4=8b10011111;BI=clk_40Hz;if(din=0)beginnext_state=S0;endelse next_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;NE
19、T G LOC=P7;NET H LOC=M11;NET I LOC=M5;NET clk LOC=B8;NET BI LOC=B6;NET OUT7 LOC = L14;NET OUT6 LOC = H12;NET OUT5 LOC = N14;NET OUT4 LOC = N11;NET OUT3 LOC = P12;NET OUT2 LOC = L13;NET OUT1 LOC = M12;NET OUT0 LOC = N13;NET CTL3 LOC = K14;NET CTL2 LOC = M13;NET CTL1 LOC = J12;NET CTL0 LOC = F12;五 仿真图六 下载设计到BASYS2开发板与实物图实物图:附:为了更好的说明各状态,我对蜂鸣器加入了不同的发声频率区分。七 实验结论经实验验证,此程序可以完成预期要求,完成特定任务。八 心得体会本次大作业让我熟悉了开发板的使用与可编程逻辑器件的应用,我了解了如何设计开发一个FPGA逻辑电路的流程,我以后懂得了可以使用FPGA来完成以后的一些工作,对我有很大的帮助。
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100