EDA与电子技术课程设计

上传人:a**** 文档编号:243305798 上传时间:2024-09-20 格式:PPT 页数:157 大小:1.59MB
返回 下载 相关 举报
EDA与电子技术课程设计_第1页
第1页 / 共157页
EDA与电子技术课程设计_第2页
第2页 / 共157页
EDA与电子技术课程设计_第3页
第3页 / 共157页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,EDA与电子技术课程设计,教材:EDA与数字系统设计,李国丽 朱维勇 栾铭主编,绪论,门电路、触发器等称为逻辑器件;,由逻辑器件构成,能执行某单一功能的电路,如计数器、译码器、加法器等,称为逻辑功能部件;,由逻辑功能部件组成的能实现复杂功能的数字电路称数字系统。,图0-1 数字系统框图,数字系统设计方法简介,明确设计要求,确定系统的输入/输出 ;,确定整体设计方案 ;,自顶向下(top-down)的模块化设计方法 。,数字系统的设计层次,选用通用集成电路芯片构成数字系统;,应用可编程逻辑器件实现数字系统;,设计专用集成电路,(,单片系统,),。,应用可编程逻辑器件(,Programmable Logic Device PLD,)实现数字系统设计,是目前利用,EDA,(Electronic Design Automation ),技术设计数字系统的潮流。,这种设计方法以数字系统设计软件为工具,将传统数字系统设计中的搭建调试用软件仿真取代,对计算机上建立的系统模型,用测试码或测试序列测试验证后,将系统实现在,PLD,芯片或专用集成电路上,这样最大程度地缩短了设计和开发时间,降低了成本,提高了系统的可靠性。,PLD简介,数字集成电路的发展过程:,电子管,晶体管,小中规模集成电路(SSI,MSI),大规模集成电路(LSI),超大规模集成电路(VLSIC),具有特定功能的专用集成电路(Application Specific Integrated Circuit ASIC),为使ASIC的设计周期尽可能短, 出现了现场可编程逻辑器件(Field Programmable Logic Device FPLD),其中应用最广泛的当属CPLD和FPGA。,CPLD:Complex Programmable Logic,Device,FPGA :Field Programmable Gate Array,统称为PLD或CPLD/FPGA。,PLD发展过程,早期:,PROM,、,EPROM,、,EEPROM,70,年代中期:Programmable Logic array PLA,70,年代末:美国MMI公司Programmable array,Logic PAL,80年代中期:Altera公司Generic Array Logic,GAL,共同特点:低密度,PLD,,结构简单,设计灵活,,规模小,难以实现复杂的逻辑功能。,PLD发展过程,80年代中期:Altera公司 Erasable Programmable,Logic Device EPLD,1985年:Xilinx公司 Field Programmable,Gate Array FPGA,80年代末:Lattice公司提出In System Programmable ISP)技术,相继出现了一系列具备在系统可编程能力的复杂可编程逻辑器件 (Complex Programmab1e Logic Device CPLD)。,共同特点:高密度、高速度、低功耗结构体系更灵活、适用范围更宽 ,设计风险为零。,PLD发展过程,90年代以后,高密度PLD在生产工艺、器件的编程和测试技术等方面都有了飞速发展,CPLD的集成度一般可达数千甚至上万门 。,Altera的EPF10K10每片含62000,158000个可使用门,重复擦写次数达10万次以上。,PLA、PAL、GAL、EPLD、FPGA、ISP-PLD的基本结构在数字电子技术基础的第八章有介绍,EDA软件种类及各自特点,专门用于开发,FPGA,和,CPLD,的,EDA,工具分为五个模块:,1,设计输入编辑器(,xilinx的Foundation、Altera的MAX+plus2等,),;,2,仿真器(,如Mentor公司的ModelSim,Cadence公司的Verilog-XL,NC-Verilog等,),;,3,HDL,综合器(,Synopsys公司的FPGA Compiler、FPGA Express 等,);,4,适配器(或部局布线器)(,如,Lattice,公司的,ispEXPERT,中有自己的适配器,);,5,下载器(编程器)。,MAX+Plus210.0(学生版 )支持的器件,1、,EPF10K10,,EPF10K10A等,2、MAX7000系列(如MAX7000S中的,MAX7128,),3、EPM9320等,MAX+plus2使用练习,图形输入方式(.gdf文件);,HDL (Hardware Description Language)语言输入方式,1)VHDL语言,(Very High Speed Intergated Circuit Hardware Description Language),2)Verilog HDL语言,设计过程,设计输入,图形或HDL语言输入,编译,Compiler,项目校验、仿真,Simulate,编程或下载,Program或,Configure,步骤,进入Windows操作系统,打开MAX+Plus2;,启动FileProjectName 菜单,输入设计文件的名称(给出文件存储路径);,点击AssignDevice菜单,选择器件(EPM7128SLC84-6或EPF10K10LC84-4);,启动FileNew菜单,选择Graphic Editor,打开原理图编辑器;,原理图设计输入过程,元器件放置;,在元器件之间添加连线;,添加输入、输出引脚,并给它们命名;,保存原理图。,编译,启动MaxplusII/Compiler菜单,选择Start,开始编译;,若电路有错,编译器停止编译,并显示出错信息;,若电路无错,则编译通过,生成.sof、.pof文件,以备硬件下载或编程时用。,注意:编译只对顶层文件进行,时序模拟仿真,编译通过后就可进行时序模拟:,1、建立波形输入文件:,1)打开菜单File/New,选Waveform Editor File(.scf),OK;,2)在波形编辑器窗口的Name下单击鼠标右键,出现浮动菜单,选Enter Nodes from SNF出现对话框;,3)在Type 区选Inputs和 Outputs,单击 List按钮,可在 其右下方看到设计中的输入输出信号,单击=可将这些信号选到Selected Nodes&Groups区,OK;,4)在菜单File中选 Save。,时序模拟仿真,2、编辑输入节点波形:,1)在菜单Options中选中Snap to Grid 和Show Grid,并打开 Grid Size设置仿真时间;,2)使用绘制图形工具条绘制输入节点波形;,3)选File中Save存盘。,时序模拟仿真,3、时序模拟:,1)在菜单Maxplus2中选Simulator;,2) 单击Start,开始模拟;,3)模拟完毕,单击Open Scf得模拟结果,可对结果进行检查(注意有动态延时和竞争冒险现象 )。,管脚分配,启动MaxplusII/Floorplan Editor菜单,则显示该设计项目的管脚分配;,用户可根据下载板情况,改变管脚分配。,注意,下载板有两种:,1.北京理工达胜科技生产的下载板,芯片管脚与外围信号没有连接,需在实验中由你连接;,2.东南大学东讯通生产的DXT-BIII型EDA实验开发系统, 芯片管脚与外围信号已连接好,必须根据下表改变管脚分配.,图1-2-15 PLD引脚与外部人工连接,EPF10K10LC84-4,图1-2-16 PLD引脚与外部器件连接锁定,图1216 PLD管脚与外部器件连接锁定,器件名称,信号名,10K10管脚,器件名称,信号名,10K10管脚,输出发光管,L12R,25,数据开关,K2,29,输出发光管,L12G,24,数据开关,K3,30,输出发光管,L11,23,数据开关,K4,35,输出发光管,L10,22,数据开关,K5,36,输出发光管,L9,21,数据开关,K6,37,输出发光管,L8,19,数据开关,K7,38,输出发光管,L7,18,数据开关,K8,39,输出发光管,L6,65,数据开关,K9,47,输出发光管,L5,64,数据开关,K10,48,输出发光管,L4,62,数据开关,K11,49,输出发光管,L3,61,数据开关,K12,50,输出发光管,L2,60,数据开关,K13,51,输出发光管,L1G,59,数据开关,K14,52,输出发光管,L1R,58,数据开关,K15,53,数据开关,K1,28,数据开关,K16,54,器件名称,信号名,10K10管脚,器件名称,信号名,10K10管脚,数码管,M4,M4A,17,扬声器,SP,27,M4B,16,时钟信号,CP1,1,M4C,11,时钟信号,CP2,43,M4D,10,数码管,M3,M3A,9,M3B,8,M3C,7,M3D,6,数码管,M2,M2A,5,M2B,3,M2C,83,M2D,81,数码管,M1,M1A,80,M1B,79,M1C,78,M1D,73,下载,将实验板接口线与计算机并口连接,打开试验箱电源;,启动MaxliusII/Programmer菜单;,如果是第一次使用该软件,启动Options Hardware Setup菜单,在Hardware Type中选择 ByteBlaster(MV)。,Configure即可完成下载。,注意,若下载后提示下载不成功信息,按以上各步检查是否设置正确,并检查计算机与实验箱硬件连接,排除故障,再次尝试下载;,随时可利用帮助信息(?),解决疑难问题;,相同名字的导线,在电气上相连(P26);,器件可以旋转;,一组输入或一组输出时,可用BUS(组);,改变管脚后,应再编译一次,再下载。,Verilog HDL语言输入方式,进入Windows操作系统,打开MAX+Plus2;,启动FileProjectName 菜单,输入设计文件的名称(给出文件存储路径);,点击AssignDevice菜单,选择器件(EPM7128SLC84-6或EPF10K10LC84-4);,启动FileNew菜单,选择Text Editor file,打开原理图编辑器;,键入程序;,在FileSave as 保存,生成.v文件;,以下步骤同图形输入法。,有关,Verilog,HDL,的详细内容参见第三章(,P.98),/*/,/ MODULE: adder,/ FILE NAME: add.v,/ VERSION: v1.0,/ DATE: May 5,th, 2003,/ AUTHOR: Peter,/ CODE TYPE: RTL,/ DESCRIPTION: An adder with two inputs (1 bit), one output (2 bits).,/*/,module adder (in1, in2, sum);,input in1,in2;,output 1:0 sum;,wire in1,in2;,reg 1:0 sum;,always (in1 or in2),begin,sum=in1+in2;,end,endmodule,模块名(必须和存储时的名称相同),端口列表,说明部分,模块主体,结束行,注释部分,模块定义行,事件控制的Always语句,一直监测输入信号,只要有变化,就执行下面的块语句。,Case语句,Case(敏感表达式),值1:块语句1;,值2:块语句2;,default:块语句n+1;,endcase,module decoder(out,in);,output7:0 out;,input2:0 in;,reg7:0 out;,always(in),begin,case(in),3d0:out=8b00000001;,3d1:out=8b00000010;,3d2:out=8b00000100;,3d3:out=8b00001000;,3d4:out=8b00010000;,3d5:out=8b00100000;,3d6:out=8b01000000;,3d7:out=8b10000000;,endcase,end,endmodule,d 十进制,h 十六进制,b 二进制,o 八进制,module jsq16(q,clk,reset);,output3:0q;,reg 3:0q;,input clk,reset;,always (posedge clk or negedge reset),begin,if(!reset) q3:0=4b0000;,else,q3:0=q3:0+4b0001;,end,endmodule,if(表达式) 块语句1;,else 块语句2;,注意,.v文件描述的功能模块可以生成一个符号,放在用户库中,供其它原理图输入文件调用,调用的方法与从器件库中取元器件的方法相同。生成功能模块的方法为:选择菜单filecreate default symbol,经过与编译相同的过程后,生成的功能模块被放入用户库,,实验内容和时间安排,星期一上午讲课,完成非门下载,先在F盘中设置一个自己的文件夹,例:F lgl,星期一下午,星期二:,1.2、1.3所有练习,星期二下午4:00讲课:扫描显示电路,星期三:完成1.4所有练习,星期三下午:布置数字系统设计题,星期四星期五:完成数字系统设计一个,扫描显示,实验室A,扫描显示电路,用发光管的状态验证设计是否满足要求。在译码器设计时,这种方式是很直观的,但在计数器设计时,这样的验证方式就显得很不直观,尤其当计数器的位数增加时(如百进制计数),太多的发光管将使结果的读出非常困难。,数码管驱动方式,BCD码驱动,直接驱动,数码管,BCD,码驱动,输入,输出,D C B A,Y,a,Y,b,Y,c,Y,d,Y,e,Y,f,Y,g,字形,0 0 0 0,0 0 0 1,0 0 1 0,0 0 1 1,0 1 0 0,0 1 0 1,0 1 1 0,0 1 1 1,1 0 0 0,1 0 0 1,1 0 1 0,1 0 1 1,1 1 0 0,1 1 0 1,1 1 1 0,1 1 1 1,1 1 1 1 1 1 0,0 1 1 0 0 0 0,1 1 0 1 1 0 1,1 1 1 1 0 0 1,0 1 1 0 0 1 1,1 0 1 1 0 1 1,1 0 1 1 1 1 1,1 1 1 0 0 0 0,1 1 1 1 1 1 1,1 1 1 0 0 1 1,1 1 1 0 1 1 1,0 0 1 1 1 1 1,1 0 0 1 1 1 0,0 1 1 1 1 0 1,1 0 0 1 1 1 1,1 0 0 0 1 1 1,0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,D,C,B,A,D,C,B,A,图1-2-16 PLD引脚与外部器件连接锁定,东南大学实验箱的静态显示方式属于BCD码驱动,拨向“静态”,数码管直接驱动,输入,a b c d e f g,输出字形,1 1 1 1 1 1 0,0 1 1 0 0 0 0,1 1 0 1 1 0 1,1 1 1 1 0 0 1,0 1 1 0 0 1 1,1 0 1 1 0 1 1,1 0 1 1 1 1 1,1 1 1 0 0 0 0,1 1 1 1 1 1 1,1 1 1 1 0 1 1,1 1 1 0 1 1 1,0 0 1 1 1 1 1,1 0 0 1 1 1 0,0 1 1 1 1 0 1,1 0 0 1 1 1 1,1 0 0 0 1 1 1,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,当采用直接驱动方式时,驱动一个数码管需要七个电平信号,如果系统用来显示结果的数码管较多,应考虑数字系统输出信号占用PLD芯片管脚的问题,因为PLD芯片的管脚总数是有限的,例如F10K10,它的管脚总数是84,其中还有一些特定功能的管脚不能给用户使用,能使用的管脚不到60个,所以直接驱动时,必须设法减少占用PLD芯片的管脚的数量。,解决的方法是采用动态扫描显示,动态扫描显示(,管脚见表1-2-2),拨向“动态”,例1-4-1,设计一个电路,使八个数码管依次同时显示0、1、2、A、B、E、F。,例1-4-1,动态扫描,字形显示,十六进制计数,module led(a,b,c,d,e,f,g,D);,output a,b,c,d,e,f,g;,input3:0 D;,reg a,b,c,d,e,f,g;,always,(D),begin,case(D),4d0:a,b,c,d,e,f,g=7b1111110;,4d1:a,b,c,d,e,f,g=7b0110000;,4d2:a,b,c,d,e,f,g=7b1101101;,4d3:a,b,c,d,e,f,g=7b1111001;,4d4:a,b,c,d,e,f,g=7b0110011;,4d5:a,b,c,d,e,f,g=7b1011011;,4d6:a,b,c,d,e,f,g=7b1011111;,4d7:a,b,c,d,e,f,g=7b1110000;,4d8:a,b,c,d,e,f,g=7b1111111;,4d9:a,b,c,d,e,f,g=7b1111011;,4hA:a,b,c,d,e,f,g=7b1110111;,4hB:a,b,c,d,e,f,g=7b0011111;,4hC:a,b,c,d,e,f,g=7b1001110;,4hD:a,b,c,d,e,f,g=7b0111101;,4hE:a,b,c,d,e,f,g=7b1001111;,4hF:a,b,c,d,e,f,g=7b1000111;,endcase,end,endmodule,module decoder(out,in);,output7:0 out;,input2:0 in;,reg7:0 out;,always(in),begin,case(in),3d0:out=8b00000001;,3d1:out=8b00000010;,3d2:out=8b00000100;,3d3:out=8b00001000;,3d4:out=8b00010000;,3d5:out=8b00100000;,3d6:out=8b01000000;,3d7:out=8b10000000;,endcase,end,endmodule,module saomiao(reset,clk,clk1,ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g);,input clk,reset,clk1;,reg 3:0 in1;,output ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;,reg ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;,reg 3:0 temp,flag;,always(posedge clk),begin,ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8=8b00000000;,flag=flag+1;,case (flag),0:begin temp=in1;ms1=1;end,1:begin temp=in1;ms2=1;end,2:begin temp=in1;ms3=1;end,3:begin temp=in1;ms4=1;end,4:begin temp=in1;ms5=1;end,5:begin temp=in1;ms6=1;end,6:begin temp=in1;ms7=1;end,7:begin temp=in1;ms8=1;end,endcase,case(temp),4d0:a,b,c,d,e,f,g=7b1111110;,4d1:a,b,c,d,e,f,g=7b0110000;,4d2:a,b,c,d,e,f,g=7b1101101;,4d3:a,b,c,d,e,f,g=7b1111001;,4d4:a,b,c,d,e,f,g=7b0110011;,4d5:a,b,c,d,e,f,g=7b1011011;,4d6:a,b,c,d,e,f,g=7b1011111;,4d7:a,b,c,d,e,f,g=7b1110000;,4d8:a,b,c,d,e,f,g=7b1111111;,4d9:a,b,c,d,e,f,g=7b1111011;,4,hA,:a,b,c,d,e,f,g=7b1110111;,4,hB,:a,b,c,d,e,f,g=7b0011111;,4,hC,:a,b,c,d,e,f,g=7b1001110;,4,hD,:a,b,c,d,e,f,g=7b0111101;,4,hE,:a,b,c,d,e,f,g=7b1001111;,4,hF,:a,b,c,d,e,f,g=7b1000111;,default:a,b,c,d,e,f,g=7b1111110;,endcase,end,always(,posedge,clk1),begin if(!reset) in1=4b0000;,else begin in1=in1+1;,end,end,endmodule,东南大学实验箱,完全用Verilog HDL完成,问题是要把两个计数器输出的个位和十位数分别显示在不同的数码管上,用Sel模块实现。,原理是:in1,in2in8为八个数码管的BCD码输入端数据,MS1有效时,in1的数据送MS1显示;,MS2有效时,in2的数据送MS2显示;,MS8有效时,in8的数据送MS8显示。,八组数据可以不全部都有,如此例中,十二进制数的低四位送in1,高四位送in2,六十进制数的低四位送in3,高四位送in4,其余数据端为空。,例,1-4-2,设计一个电路,使两个数码管显示,1,12,的十二进制计数,两个数码管显示,0,59,的六十进制计数。,注意:十二进制计数器自行设计,case(temp),4d0:a,b,c,d,e,f,g=7b1111110;4d1:a,b,c,d,e,f,g=7b0110000;4d2:a,b,c,d,e,f,g=7b1101101;4d3:a,b,c,d,e,f,g=7b1111001;4d4:a,b,c,d,e,f,g=7b0110011;4d5:a,b,c,d,e,f,g=7b1011011;4d6:a,b,c,d,e,f,g=7b1011111;4d7:a,b,c,d,e,f,g=7b1110000;4d8:a,b,c,d,e,f,g=7b1111111;4d9:a,b,c,d,e,f,g=7b1111011;4hA:a,b,c,d,e,f,g=7b1110111;4hB:a,b,c,d,e,f,g=7b0011111,;4hC:a,b,c,d,e,f,g=7b1001110;4hD:a,b,c,d,e,f,g=7b0111101;4hE:a,b,c,d,e,f,g=7b1001111;4hF:a,b,c,d,e,f,g=7b1000111;default:a,b,c,d,e,f,g=7b1111110;endcaseendendmodule,module sel(in1,in2,in3,in4,in5,in6,in7,in8,clk,ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g);,input clk;,input 3:0 in1,in2,in3,in4,in5,in6,in7,in8;,output ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;,reg ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;,reg 3:0 temp,flag;,always(posedge clk),begin,ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8=8b00000000;,flag=flag+1;,case (flag),0:begin temp=in1;ms1=1;end,1:begin temp=in2;ms2=1;end,2:begin temp=in3;ms3=1;end,3:begin temp=in4;ms4=1;end,4:begin temp=in5;ms5=1;end,5:begin temp=in6;ms6=1;end,6:begin temp=in7;ms7=1;end,7:begin temp=in8;ms8=1;end,endcase,End,扫描显示,实验室B,扫描显示电路,用发光管的状态验证设计是否满足要求。在译码器设计时,这种方式是很直观的,但在计数器设计时,这样的验证方式就显得很不直观,尤其当计数器的位数增加时(如百进制计数),太多的发光管将使结果的读出非常困难。,数码管驱动方式,BCD码驱动,直接驱动,数码管,BCD,码驱动,输入,输出,D C B A,Y,a,Y,b,Y,c,Y,d,Y,e,Y,f,Y,g,字形,0 0 0 0,0 0 0 1,0 0 1 0,0 0 1 1,0 1 0 0,0 1 0 1,0 1 1 0,0 1 1 1,1 0 0 0,1 0 0 1,1 0 1 0,1 0 1 1,1 1 0 0,1 1 0 1,1 1 1 0,1 1 1 1,1 1 1 1 1 1 0,0 1 1 0 0 0 0,1 1 0 1 1 0 1,1 1 1 1 0 0 1,0 1 1 0 0 1 1,1 0 1 1 0 1 1,1 0 1 1 1 1 1,1 1 1 0 0 0 0,1 1 1 1 1 1 1,1 1 1 0 0 1 1,1 1 1 0 1 1 1,0 0 1 1 1 1 1,1 0 0 1 1 1 0,0 1 1 1 1 0 1,1 0 0 1 1 1 1,1 0 0 0 1 1 1,0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,D,C,B,A,D,C,B,A,数码管直接驱动,输入,a b c d e f g,输出字形,1 1 1 1 1 1 0,0 1 1 0 0 0 0,1 1 0 1 1 0 1,1 1 1 1 0 0 1,0 1 1 0 0 1 1,1 0 1 1 0 1 1,1 0 1 1 1 1 1,1 1 1 0 0 0 0,1 1 1 1 1 1 1,1 1 1 1 0 1 1,1 1 1 0 1 1 1,0 0 1 1 1 1 1,1 0 0 1 1 1 0,0 1 1 1 1 0 1,1 0 0 1 1 1 1,1 0 0 0 1 1 1,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,当采用直接驱动方式时,驱动一个数码管需要七个电平信号,如果系统用来显示结果的数码管较多,应考虑数字系统输出信号占用PLD芯片管脚的问题,因为PLD芯片的管脚总数是有限的,例如F10K10,它的管脚总数是84,其中还有一些特定功能的管脚不能给用户使用,能使用的管脚不到60个,所以直接驱动时,必须设法减少占用PLD芯片的管脚的数量。,解决的方法是采用动态扫描显示,北理工生产的实验箱,只能用动态扫描方式进行数码管显示。,硬件电路提供了一只3线8线译码器,输入端为sel2,sel1,sel0,输出接各个数码管片选端。,3线8线译码器输入端,例1-4-1,设计一个电路,使八个数码管依次同时显示0、1、2、A、B、E、F。,module led(a,b,c,d,e,f,g,D);,output a,b,c,d,e,f,g;,input3:0 D;,reg a,b,c,d,e,f,g;,always,(D),begin,case(D),4d0:a,b,c,d,e,f,g=7b1111110;,4d1:a,b,c,d,e,f,g=7b0110000;,4d2:a,b,c,d,e,f,g=7b1101101;,4d3:a,b,c,d,e,f,g=7b1111001;,4d4:a,b,c,d,e,f,g=7b0110011;,4d5:a,b,c,d,e,f,g=7b1011011;,4d6:a,b,c,d,e,f,g=7b1011111;,4d7:a,b,c,d,e,f,g=7b1110000;,4d8:a,b,c,d,e,f,g=7b1111111;,4d9:a,b,c,d,e,f,g=7b1111011;,4hA:a,b,c,d,e,f,g=7b1110111;,4hB:a,b,c,d,e,f,g=7b0011111;,4hC:a,b,c,d,e,f,g=7b1001110;,4hD:a,b,c,d,e,f,g=7b0111101;,4hE:a,b,c,d,e,f,g=7b1001111;,4hF:a,b,c,d,e,f,g=7b1000111;,endcase,end,endmodule,例1-4-1,译码器,北京理工实验箱,module saomiaob(reset,clk,clk1,flag,a,b,c,d,e,f,g);,input clk,reset,clk1;,reg 3:0 in1;,output flag,a,b,c,d,e,f,g;,reg a,b,c,d,e,f,g;,reg2:0 flag;,always(posedge clk),begin,flag=flag+1;,case(in1),4d0:a,b,c,d,e,f,g=7b1111110;,4d1:a,b,c,d,e,f,g=7b0110000;,4d2:a,b,c,d,e,f,g=7b1101101;,4d3:a,b,c,d,e,f,g=7b1111001;,4d4:a,b,c,d,e,f,g=7b0110011;,4d5:a,b,c,d,e,f,g=7b1011011;,4d6:a,b,c,d,e,f,g=7b1011111;,4d7:a,b,c,d,e,f,g=7b1110000;,4d8:a,b,c,d,e,f,g=7b1111111;,4d9:a,b,c,d,e,f,g=7b1111011;,4hA:a,b,c,d,e,f,g=7b1110111;,4hB:a,b,c,d,e,f,g=7b0011111;,4hC:a,b,c,d,e,f,g=7b1001110;,4hD:a,b,c,d,e,f,g=7b0111101;,4hE:a,b,c,d,e,f,g=7b1001111;,4hF:a,b,c,d,e,f,g=7b1000111;,endcase,end,always(posedge clk1),begin if(!reset) in1=4b0000;,else begin in1=in1+1;,end,end,endmodule,完全用Verilog HDL完成,问题是要把两个计数器输出的个位和十位数分别显示在不同的数码管上,用,Selb,模块实现。,原理是:in1,in2in8为八个数码管的BCD码输入端数据,sel2.0=000时,左边数码管(ms1)选中,in1送ms1;,sel2.0=001时,第二数码管(ms2)选中,in1送ms2;,.,sel2.0=111时,第八数码管(ms8)选中,in1送ms8;,八组数据可以不全部都有,如此例中,十二进制数的低四位送in1,高四位送in2,六十进制数的低四位送in3,高四位送in4,其余数据端为空。,例,1-4-2,设计一个电路,使两个数码管显示,1,12,的十二进制计数,两个数码管显示,0,59,的六十进制计数。,注意:十二进制计数器自行设计,北京理工实验箱,module selb(in1,in2,in3,in4,in5,in6,in7,in8,clk,flag,a,b,c,d,e,f,g);,input clk;,input 3:0 in1,in2,in3,in4,in5,in6,in7,in8;,output a,b,c,d,e,f,g;,output flag;,reg a,b,c,d,e,f,g;,reg 3:0 temp;,reg 2:0 flag;,always(posedge clk),begin,flag=flag+1;,case (flag),0:begin temp=in1;end,1:begin temp=in2;end,2:begin temp=in3;end,3:begin temp=in4;end,4:begin temp=in5;end,5:begin temp=in6;end,6:begin temp=in7;end,7:begin temp=in8;end,endcase,case(temp),4d0:a,b,c,d,e,f,g=7b1111110;,4d1:a,b,c,d,e,f,g=7b0110000;,4d2:a,b,c,d,e,f,g=7b1101101;,4d3:a,b,c,d,e,f,g=7b1111001;,4d4:a,b,c,d,e,f,g=7b0110011;,4d5:a,b,c,d,e,f,g=7b1011011;,4d6:a,b,c,d,e,f,g=7b1011111;,4d7:a,b,c,d,e,f,g=7b1110000;,4d8:a,b,c,d,e,f,g=7b1111111;,4d9:a,b,c,d,e,f,g=7b1111011;,/*4hA:a,b,c,d,e,f,g=7b1110111;,4hB:a,b,c,d,e,f,g=7b0011111;,4hC:a,b,c,d,e,f,g=7b1001110;,4hD:a,b,c,d,e,f,g=7b0111101;,4hE:a,b,c,d,e,f,g=7b1001111;,4hF:a,b,c,d,e,f,g=7b1000111;,*/,default:a,b,c,d,e,f,g=7bzzzzzzz;,endcase,end,endmodule,End,选做一到二题,数字系统设计问题,数字钟实验,设计要求,设计一个能进行时、分、秒计时的十二小时制或二十四小时制的数字钟,并具有定时与闹钟功能,能在设定的时间发出闹铃音,能非常方便地对小时、分钟和秒进行手动调节以校准时间,每逢整点,产生报时音报时。,设计提示,主控电路,计数器模块,扫描显示,主控电路,A、B:模式选择,AB=00为模式0,计时状态;,AB=01为模式1,手动校时状态;,AB=10为模式2,闹钟设置状态。,Turn:turn=0时,在手动校对时,选择调整分钟部分;,turn=1时,在手动校对时,选择调整小时部分。,Change:在手动校时或闹钟设置模式下,每按一次,计数器加1。,Reset:reset=0时,整个系统复位;,reset=1时,系统计时或其它特殊功能操作。,Reset1:reset1=0时,关闭闹铃信号;,reset1=1时,可对闹铃进行设置。,状态显示信号(发光管):,LD_alert:指示是否设置了闹铃功能;,LD_h:指示当前调整的是小时信号;,LD_m:指示当前调整的是分钟信号。,拔河游戏机,设计要求,设计一个能进行拔河游戏的电路。,电路使用15个(或9个)发光二极管表示拔河的“电子绳”,开机后只有中间一个发亮,此即拔河的中心点。,游戏双方各持一个按钮,迅速地、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。,亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。,由裁判下达比赛开始命令后,甲乙双方才能输入信号,否则,输入信号无效。,用数码管显示获胜者的盘数,每次比赛结束自动给获胜方加分。,设计提示,加/减计数器,译码器,得分计数显示电路,数字式竞赛抢答器,设计要求,设计一个可容纳四组参賽的数字式抢答器,每组设一个按钮供抢答使用。抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用;设置一个主持人“复位”按钮,主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,用指示灯显示抢答组别,扬声器发出,秒的音响。,*,设置犯规电路,对提前抢答和超时答题(例如3分钟)的组别鸣笛示警,并由组别显示电路显示出犯规组别。,设置一个计分电路,每组开始预置分,由主持人记分,答对一次加分,答错一次减分。,设计提示,鉴别锁存模块,答题计时模块,计分电路模块,扫描显示模块,1此模块的关键是准确判断出第一抢答者并将其锁存,实现的方法可使用触发器或锁存器,在得到第一信号后将输入封锁,使其它组的抢答信号无效。,2形成第一抢答信号后,用编码、译码及数码显示电路显示第一抢答者的组别,控制扬声器发出音响,并启动答题计时电路。,鉴别锁存模块,洗衣机控制器,设计要求,设计一个洗衣机洗涤程序控制器,控制洗衣机的电机作如下规律运转:,用两位数码管预置洗涤时间(分钟数),洗涤过程在送入预置时间后开始运转,洗涤中按倒计时方式对洗涤过程作计时显示,用LED表示电机的正、反转,如果定时时间到,则停机并发出音响信号。,设计提示,洗涤预置时间编码模块,减法计数显示,时序电路,译码驱动模块,数字频率表,设计要求,1设计一个能测量方波信号频率的频率计,测量结果用十进制数显示。,2.测量的频率范围是1,10KHz,分成两个频段,即1,999Hz,1KHz,10KHz,用三位数码管显示测量频率,用LED显示表示单位,如亮绿灯表示Hz,亮红灯表示KHz。,3.具有自动校验和测量两种功能,即能用标准时钟校验测量精度。,4.具有超量程报警功能,在超出目前量程档的测量范围时,发出灯光和音响信号。,设计提示,脉冲信号的频率就是在单位时间内所产生的脉冲个数,其表达式为f=N/T,f为被测信号的频率,N为计数器所累计的脉冲个数,T为产生N个脉冲所需的时间。所以,在1秒时间内计数器所记录的结果,就是被测信号的频率。,测量/校验选择模块*,计数器模块,送存选择报警模块,锁存模块,扫描显示模块,测量/校验选择模块*,输入信号:选择信号selet,被测信号meas,测试信号test,输出信号:CP1,当selet=0时,为测量状态,CP,1,=meas;,当selet=1时,为校验状态,CP1=test。,校验与测量共用一个电路,只是被测信号CP,1,不同而已。,设置1秒定时信号(周期为2秒),在1秒定时时间内的所有被测信号送计数器输入端。,计数器对CP,1,信号进行计数,在1秒定时结束后,将计数器结果送锁存器锁存,同时将计数器清零,为下一次采样测量做好准备。,设置量程档控制开关K,单位显示信号Y,当K=0时,为1,999Hz量程档,数码管显示的数值为被测信号频率值,Y显示绿色,即单位为Hz;,当K=1时,为1KHz,10KHz量程档,被测信号频率值为数码管显示的数值乘1000,Y显示红色,即单位为KHz。,设置超出量程档测量范围示警信号alert。计数器由四级十进制计数构成(带进位C)。若被测信号频率小于1KHz(K=0),则计数器只进行三级十进制计数,最大显示值为999.Hz,如果被测信号频率超过此范围,示警信号驱动灯光、扬声器报警;若被测信号为1KHz,10KHz(K=1),计数器进行四位十进制计数,取高三位显示,最大显示值为9.99KHz,如果被测信号频率超过此范围,报警。,左第一位,左第一位,电子密码锁,设计要求,设计一个电子密码锁,在锁开的状态下输入密码,密码共4位,用数据开关K1,K10分别代表数字1、2、9、0,输入的密码用数码管显示,最后输入的密码显示在最右边的数码管上,即每输入一位数,密码在数码管上的显示左移一位。可删除输入的数字,删除的是最后输入的数字,每删除一位,密码在数码管的显示右移一位,并在左边空出的位上补充“0”。用一位输出电平的状态代表锁的开闭状态。为保证密码锁主人能打开密码锁,设置一个万能密码,在主人忘记密码时使用。,设计提示,密码输入删除控制模块,寄存模块,比较模块,扫描显示 模块,脉冲按键 按键显示器,设计要求,设计一个具有7位显示的 按键显示器,显示器应能正确反映按键数字,显示器显示从低位向高位前移,逐位显示按键数字,最低位为当前显示位,七位数字输入完毕后, 接通,扬声器发出“嘟嘟”接通声响,直到有接听信号输入,若一直没有接听,10秒钟后,自动挂断,显示器清除显示,扬声器停止,直到有新号码输入。,设计提示,号码输入显示控制模块,主控制模块,扫描显示模块,乒乓球比赛游戏机,任务与要求,设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。,用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。,当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。,一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。,设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。,甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球才有效。,设计思路,用双向移位寄存器的输出端控制LED显示来模拟乒乓球运动的轨迹,先点亮位于某一方的第1个LED,由击球者通过按钮输入开关信号,实现移位方向的控制。,也可用计数译码方式实现乒乓球运动轨迹的模拟,如利用加/减计数器的2个时钟信号实现甲、乙双方的击球,由表示球拍的按钮产生计数时钟,计数器的输出状态经译码驱动LED发亮。,任何时刻都保持一个LED发亮,若发亮的LED运动到对方的终点,但对方未能及时输入信号使其向相反方向移动,即失去1分。,控制电路决定整个系统的协调动作,必须严格掌握各信号之间的关系。,交通信号灯控制器,任务与要求,设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。,用红、绿、黄发光二极管作信号灯,用传感器或逻辑开关作检测车辆是否到来的信号。,主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。,主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。,在每次
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!