实验七状态机逻辑电路设计_第1页
实验七状态机逻辑电路设计_第2页
实验七状态机逻辑电路设计_第3页
实验七状态机逻辑电路设计_第4页
实验七状态机逻辑电路设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、EDA课程课程 实验七实验七状态机逻辑电路设计状态机逻辑电路设计EDA课组一、实验目的:一、实验目的:1、了解状态机状态机逻辑电路设计原理及逻辑电路设计原理及特点;2、学习使用使用状态机状态机逻辑电路设计逻辑电路设计方法。二、实验内容二、实验内容2、通过仿真软件进行验证仿真通过仿真软件进行验证仿真 。1、 设计设计两种两种典型典型状态机状态机逻辑电路系统逻辑电路系统;三、实验原理三、实验原理有限状态机是一个广义的时序电路,它能将复杂逻辑分解为众多状态来完成,有限状态机是一个广义的时序电路,它能将复杂逻辑分解为众多状态来完成,使复杂逻辑层次分明,是设计复杂电路的方法。使复杂逻辑层次分明,是设计复

2、杂电路的方法。根据输入与输出机状态之间的关系,状态机分为两类:摩尔型(根据输入与输出机状态之间的关系,状态机分为两类:摩尔型(moore)状态)状态机和米里型(机和米里型(Mealy)。)。摩尔型(摩尔型(Moore)状态机)状态机 米里型(米里型(Mealy)状态机)状态机 三、实验步骤三、实验步骤1、序列检测器的设计序列检测器是一种用来监测一组或多组序列信号的电路,在数据通信、雷达、遥感、遥测等领域中广泛应用主要用于检测同步识别标志。下面通过Mealy型状态机设计由输入信号中检测010序列,状态编码采用格雷编码。dinclkresetdouts0s2s11/00/11/01/00/00/0

3、框图状态图状态表当前状态当前状态下一状态下一状态din=0din=1s0=00s1,0s0,0s1=01s1,0s2,0s2=11s1,1s0,0由输入信号检测010序列Verilong程序module mealyfsm(clk,reset,din,dout, cs_state,ns_state);output dout;output 1:0 cs_state,ns_state;input clk,reset,din;reg dout;/用格雷码编码声明状态值parameter 1:0 s0=2b00,s1=2b10,s2=2b11;reg 1:0cs,ns;assign cs_state=c

4、s,ns_state=ns;always(posedge clk,posedge reset)begin if(reset=1b1) /异步复位,高电平有效 cs=s0;else cs=ns; end/次态计算及输出信号产生,always(cs,din) case(cs)s0:begin dout=1b0; if(din=1bx)ns=s0; else ns=(din)?s0:s1; end s1:begin dout=1b0; ns=(!din)?s1:s2; end s2:begin dout=(din)?1b0:1b1; ns=(din)?s0:s1; end default:begin

5、 dout=1b0; ns=s0; end endcaseendmodulemealy型状态机仿真结果S00S11S210/01/01/01/00/00/1可见输出可见输出dout和次态和次态ns均由状态均由状态cs和输入和输入din共同决。这是共同决。这是mealy状状态机特点。态机特点。2、二进制乘法器设计:、二进制乘法器设计: 实现两个实现两个8位二进制数的乘法运算,被乘数(位二进制数的乘法运算,被乘数(mend)和乘数(和乘数(mplr)存放存放在寄存器在寄存器mcnd_temp和和acc7:0中,乘积为中,乘积为16进制数,运算完后存放在进制数,运算完后存放在16位位寄存器寄存器ac

6、c15:0中。中。shiftaddcomp1initcount8递增countacc右移复位acc初始化countreset=1reset=0如果acc0=1将mcnd加到acc输出done=1count=8乘法状态机的状态图乘法状态机的状态图状态机模型开始处于状态机模型开始处于init状态,并且只要复位信号状态,并且只要复位信号reset为高电平,就停留在为高电平,就停留在该状态。当该状态。当reset为为0时,累加器时,累加器acc清零,计数器清零,计数器count被复位,被乘数被复位,被乘数mcnd和乘数和乘数mplr被加载到寄存器被加载到寄存器mcnd_temp和和acc的低的低8位中

7、,然后进入位中,然后进入add状态。状态。当处于当处于add状态时,只要当乘数的最低位(状态时,只要当乘数的最低位(acc0)为)为1时,将被乘数加到部时,将被乘数加到部分积(分积(acc的高八位)中,然后进入到的高八位)中,然后进入到shift状态中。状态中。在在shift状态时,将部分积(状态时,将部分积(acc)右移一位,并将计数器()右移一位,并将计数器(count)加)加1,如,如果计数器值为果计数器值为8,则进入,则进入compl状态;如果计数器值小于状态;如果计数器值小于8,则返回到,则返回到add状态状态进行下一轮移位相加直到计数器值变为进行下一轮移位相加直到计数器值变为8。c

8、ompl状态表示运算完成,将输出使能信号状态表示运算完成,将输出使能信号done置为高,此时置为高,此时acc内存放的内存放的即为乘法器运算的结果,然后返回即为乘法器运算的结果,然后返回init状态。状态。乘法器状态机Verilog程序module multi8(mplr,mcnd,clk,reset,done,acc,count, mul_state,next_state); output done; output 15:0 acc; output 2:0 count; output 1:0 mul_state,next_state; input 7:0 mplr,mcnd; input c

9、lk,reset; reg 15:0 acc; reg 1:0 cs,ns; reg7:0 mcnd_temp; reg2:0 count; reg done;/定义状态编码为格雷码parameter 1:0 init=2b00,add=2b01,shift=2b11,compl=2b10;assign mul_state=cs;/方便查看状态机状态转换过程assign next_state=ns;always (negedge clk,posedge reset) if(reset) cs=init; else cs=ns;乘法器状态机Verilog程序/次态计算always(cs)begi

10、n ns=init; case(cs) init:ns=add; add:ns=shift; shift:if(count=4b1000)ns=compl; else ns=add; compl:ns=init; endcaseend/产生输出信号always(negedge clk) case(cs) init:begin acc15:8=8b0000_0000; acc7:0=mplr; done=1b0; mcnd_temp7:0=mcnd; count=3b000; end/判断乘数最高位是否为1,/则将被乘数加到部分积中add:if(acc0=1b1) acc=acc+mcnd_temp,8b0000_0000); else acc=a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论