哈工大数电大作业.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈工大 电大 作业
- 资源描述:
-
Harbin Institute of Technology 数字电子技术基础大作业 课程名称: 数字电子技术基础 设计题目: 血型与状态机 院 系: 班 级: 设 计 者: 学 号: 哈尔滨工业大学 血型逻辑电路设计 一 实验目的 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) begin clk_cnt <= 1'b0; clk_400Hz <= ~clk_400Hz; end else clk_cnt <= clk_cnt + 1'b1; //位控制 reg clk_1Hz; integer clk_1Hz_cnt; //1Hz发声信号 always @(posedge clk) 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 @(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; endcase always @(M or N or P or Q) 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 @(M or N or P or Q) //显示输入输出血型 begin if(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; else F=4'b0001; end always @(M or N or P or Q) //显示输入输出血型 begin if(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; 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 则卡诺图为: MN PQ 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.掌握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'd25000000-1) begin clk_1Hz_cnt <= 1'b0; clk_1Hz <= ~clk_1Hz; end else clk_1Hz_cnt <= clk_1Hz_cnt + 1'b1; always @(posedge clk) if(clk_cnt==32'd100000) begin clk_cnt <= 1'b0; clk_400Hz <= ~clk_400Hz; end else clk_cnt <= clk_cnt + 1'b1; reg clk_05Hz; integer clk_05Hz_cnt; always @(posedge clk) 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; reg clk_2Hz; integer clk_2Hz_cnt; always @(posedge clk) 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; reg clk_4Hz; integer clk_4Hz_cnt; always @(posedge clk) 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; reg clk_40Hz; integer clk_40Hz_cnt; always @(posedge clk) 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 @(posedge clk_400Hz) CTL <= {CTL[2:0],CTL[3]}; always @ (posedge clk_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_state or din) 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来完成以后的一些工作,对我有很大的帮助。展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




哈工大数电大作业.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/3676929.html