




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
EDA实验一实验报告一、实验设计思路1、键盘输入状态机设计控制键盘输入的电路分为5个模块:(1)扫描信号电路其状态转换图如下:状态根据扫描频率自动跳转,在S0S3状态下分别输出0001、1000、0100、0010,该电路的输出用于数码管的选通(接位选线)和键盘信号的检测(接H)。(2)键值信号电路该电路的功能是输出按键对应的值,按键按下时,就跳到键值相应的状态,并输出相应的值。(3)按键信号电路电路的状态转换图如下:当数字按键被按下时,状态跳转到S1并输出高电平,如果不长按键,等一小段时间后,状态会自动回到S0并输出低电平。如果长按键,那么状态会停留在S1处,这样就不会重复地输出按键信号了。(4)运算符号电路状态转换图如下:该电路的功能是记录运算符号,按下符号按键就跳转到相应的状态,S0为初始状态,输出为000,当按下数字键时,任何状态都会跳转回S0;S1、S2、S3、S4和S5分别为加、减、与、或和比较运算对应的状态,输出分别为001、010、011、100、101;S6为按下等号键会跳转到的状态,输出为110。(5)控制电路该电路的功能是选择移位寄存器、得到清零信号。当第一次输出数字是,control选通其中一个移位寄存器;当按下运算符号时,电路跳转到下一个状态,control选通另外一个移位寄存器。清零信号在按下等号键(正常规则下)或在得到运算结果后再次输入时,将移位寄存器的数据和运算符号等清空。2、ALU运算逻辑ALU完成高8位和低8位运算的状态转换图,实际上是Process模块的状态转换图。在设计里,ALU只要求完成8位二进制数的运算,其进位、借位的处理由Process模块执行。状态转换图如下(Process模块程序中的S6、S7是无用的状态,这里不画出):(1)状态含义及跳转条件:S0为初始状态,按下数字键或等号键时,停留在S0;按下运算符号键(下称符号键)时,跳转到S1。在S1状态下,按下数字键或符号键时,停留在S1,并取最后输入的运算符号;按下等号键时,跳转到S2。在S2状态下,按下等号键停留在S2,按下数字键跳转到S1,按下符号键跳转到S5,S5是一个记录运算结果用的状态,在S5会立刻跳转到S3。S3和S4的含义和跳转条件与S1、S2类似,是进行继续运算用的状态。当Reset键被按下时,状态S1S4都会跳转回状态S0。(2)各状态下的数据输出:S1状态下,输出给ALU模块的数是两个数(记为A、B)的低8位,carry_in根据运算符号设置,加法为0,减法为1。S2状态下,输出给ALU模块的数是A、B的高8位,carry_in则取S1状态时ALU的carry_out。对于状态S3,输出给ALU模块的数变为记录了的运算结果的低8位和新键入的数的低8位,S4则是两个数的高8位,它们的carry_in的设置与S1、S2类似。(3)ALU的进位、借位设置:ALU的进位、借位根据运算符号和前一步的运算结果的正负来判断,运算结果的正负用D1记录。D1的初值为0,当运算结果为非负数时,D1为0,当运算结果为负数时,D1为1。设计的ALU模块是利用补码进行运算的。进行加法运算时,若D1为0,则运算结果的进位和正负判断作通常处理;若D1为1,则对前一步的运算结果取补码再运算,当新的运算结果的符号位为1时,carry_out为1,且carry_in为1时,运算时将加上二进制数11111111,这其实是向高位借位(符号位为1,说明运算结果为负,所以要借位)。当高8位运算结果的符号位为1时,说明运算结果为负数。进行减法运算时,若D1为0,则借位、结果正负的判断与进行加法运算且D1为1的情况类似,只是carry_out和carry_in的0、1值调转过来。若D1为1,则将补码相加后,在结果不为0的情况下,若符号位为0或者符号位为1但运算结果为0时,carry_out为0,其他情况carry_out为1。符号位为1、运算结果为0是指两个负数的低8位刚好加起来为-256的情况,这个时候应该是有借位的。3、显示模块的控制逻辑显示的功能由Process模块和Seg模块共同实现。其中,Seg模块的功能主要是将运算结果转换为十进制数,并按顺序显示该数的高位、低位。而Process模块的功能则是根据按键的情况选择要显示的数。Process模块的状态转换图已给出,在S0状态下,显示输入的数;在S1状态下,在没有输入新数的情况下,显示原来输入的数,输入后显示新输入的数;在S2状态下,显示运算结果。对于S3、S4,显示的输出类似。对于运算结果的显示,需要根据运算符号和运算结果的正负进行判断。比如,当前一步的结果为非负数,且进行加法运算时,直接显示运算结果;当前一步的结果为非负数,且进行减法运算时,若carry_out为1,则低8位的显示要对运算结果取补(得到原码),若取补后低8位为0,则高8位的显示要取反加一,否则直接取反。4、特殊情况的处理(1)输入超过3位:在移位寄存器的D触发器中,设置了参数count,输入一次数,count加一,输入三次后,count变为3,此时触发器的输出不再变化,再输入数也不会被记入寄存器;(2)长按键:长按键的处理涉及到Clk_test模块的设计,在该模块中也设置了count参数,具体代码如下:always (posedge clks) begin if (H3:0=4b1000) if (V3:0=0) count=count+3b001;else count=0; if (H3:0=4b0100) if (V3:0=0) count=count+3b001;else count=0; if (H3:0=4b0010) if (V3:0=0) count=count+3b001;else count=0; if (H3:0=4b0001) if (V3:0=0) count=count+3b001;else count=0; if (count2:0=3b100) count=0; end可见,在长按键的情况下,count不可能达到100,而状态转换的条件是count达到100,所以长按键时状态不会转换,则输出的信号一直为高电平,不会有新的上升沿出现。(3)非法情况处理:对于连续输入多个运算符号的情况,由于在Process模块中的S1状态会在未按等号时停留,且实际的运算都在S1、S2处进行,所以连续输入多个符号时,实际运算中只取最后一个。对于未输入数便按下符号键的情况,当作0与输入的数进行运算,实际上这与计算器对这种情况的处理方法是相同的。对于完成运算后又按等号键的情况,状态不跳转,显示结果仍为原来的结果,这与某些计算器的处理方法不一样,但跟学生用的计算器对于这种情况的处理方法是一样的。5、音乐模块的工作原理(1)音高产生原理蜂鸣器发出的声音的音高,与输入的信号的频率有关,音高对应的频率,可以通过上网搜索得到。将晶振的频率用cnt参数降至相应的频率,就能使蜂鸣器发出音高正确的声音。具体代码如下:always (posedge CLK) beginif (cnt111274/2)cnt1=cnt1+1b1;elsebegincnt1=0;do=do;end为了得到频率约为2217.5Hz的信号,将25MHz的时钟信号分频。其中,25000000除以11274就约等于2217.5,而由于得到信号的逻辑是将信号翻转,在两倍cnt从0变化到11274的过程中,信号应翻转两次,所以11274要先除以2,这样得到的信号频率才是正确的。(2)节奏产生原理得到音高对应的信号频率后,为了让蜂鸣器按固定节奏发出声音,可以设计一个状态机电路,并输入一定频率的时钟信号,状态根据该时钟信号按顺序转换,且在不同状态下,电路输出不同频率的信号。这样,蜂鸣器就能“哼”出一段乐曲了。时钟信号的设置,与音高信号的设置类似,但频率要低得多,详见timer的设置;电路状态之间的转换,是有一定的规则的,主要是根据乐曲的音长设置,当某音符的音长多于一个时钟周期时,应让该音符占多个状态;当乐曲的某处没有声音发出时,应将输出置为1,使得蜂鸣器在该状态下不发声。二、仿真验证1、键盘输入的仿真波形仿真波形如下:(1)长按键:长按键的情况,就是在h为某一个值时,v总是固定的某一个值,且间隔为一个周期。由波形图可以看出,长按键的情况下,按键信号只会有一个上升沿,且一直保持高电平,直到按键松开才变为低电平(看(2)中的图,在h为1000的情况下,v变为了0000,表明按键已松开,这使得按键信号变为低电平)。(2)多次按同一键:多次按同一键,按键信号会有多个上升沿,但键值信号不变。(3)按键抖动:该仿真波形图是放大后的图,可见在按键抖动的情况下,按键信号仍是只有一个上升沿。(4)同时按多个键:该仿真波形图模拟了同时按数字键5、6、7、8的情形,可见按键信号仍是只有一个上升沿,尽管键值信号在边,由于上升沿只有一个,能输入到寄存器中的数其实只有最初按下的键对应的那个数。2、ALU的仿真波形仿真波形图如下:当CS分别为001、010、011、100、101时,ALU作加法、减法、与、或和比较运算。由于时钟频率设置得较低,结果的变化有延迟。左栏中的倒数第二个是carry_out,倒数第四个是carry_in。可见,五种运算下,结果和进位、借位等都是正确的。三、实验总结1、不同实现方法和创新之处说明为了能让蜂鸣器发出两种不同曲调的声音,我设计了两个音高信号发生器,分别命名为NoteDb和NoteGb,曲调分别为Db和F#(即Gb)。根据网上搜到的音高和频率转换表(如下图),很容易得到曲调相应音高的频率。如Db,它的频率应取表上的2217.5、2489.0、2793.8、2960.0、3322.4、3729.3和4186.0等,分别对应do、re、mi、fa、so、la、xi,F#也可以根据这种规律取频率。2、问题及解决方法(1)设计过程中遇到的一个问题是,何时将储存在寄存器中的数据清零。一开始想要保证运算结果的稳定存在(以便进行后面的继续运算),没有设置适当的清零条件,这使得运算结果不正确。改正后,在得到运算结果以后,若再按等号键,则数据不清零,若按其他键,则数据清零,并事先在Process模块中把运算结果记录下来,这样就没必要担心清零后运算结果丢失的问题了。(2)设计运算符号电路(PM)时,没有进行充分的考虑,因而没有设置按下数字键或等号键时的CS值,导致后面处理电路设计时出现不少麻烦,增加相应CS值后又要修改处理电路。这说明设计电路时最好考虑到后续部分电路的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025甘肃省内铁路系统安检工作人员招聘40人(第二期)笔试参考题库附带答案详解
- 2025年郑州空中丝路文化传媒有限公司招聘实习生7人笔试参考题库附带答案详解
- 2025年中国铁道出版社有限公司招聘(14人)笔试参考题库附带答案详解
- 2025宝鸡机床集团有限公司招聘(25人)笔试参考题库附带答案详解
- 2025四川成都兴城投资集团有限公司招聘11人笔试参考题库附带答案详解
- 2025内蒙古能源集团有限公司招聘55人笔试参考题库附带答案详解
- 2025上海泛象文化发展有限公司招聘5人笔试参考题库附带答案详解
- 危险源安全培训感想课件
- 地铁基础知识培训课件
- 地铁公司级安全培训体会课件
- 《医疗机构基本标准(试行)》2018年版
- 外科品管圈提高外科腹部手术后早期下床的执行率课件
- 石油化工行业检修工程预算定额说明
- 图书销售合同合同
- 除数是整数的小数除法练习课
- 东芝电梯CV180故障诊断
- 毕业设计住宅楼采暖系统设计
- 三年级上册数学课件-5 间隔排列|苏教版
- 退伍军人职业规划课件
- 洗眼器教育培训
- 调查研究方法与调研报告写作讲义课件
评论
0/150
提交评论