当前位置:文档之家› EDA实验实验报告

EDA实验实验报告

数字eda实验实验报告学院:计算机科学与工程学院专业:通信工程学号: 0941903207 姓名:薛蕾指导老师:钱强实验一四选一数据选择器的设计一、实验目的1、熟悉quartus ii软件的使用。

2、了解数据选择器的工作原理。

3、熟悉eda开发的基本流程。

二、实验原理及内容实验原理数据选择器在实际中得到了广泛的应用,尤其是在通信中为了利用多路信号中的一路,可以采用数据选择器进行选择再对该路信号加以利用。

从多路输入信号中选择其中一路进行输出的电路称为数据选择器。

或:在地址信号控制下,从多路输入信息中选择其中的某一路信息作为输出的电路称为数据选择器。

数据选择器又叫多路选择器,简称mux。

4选1数据选择器:(1)原理框图:如右图。

d0 、d1、d2、d3 :输入数据 a1 、a0 :地址变量由地址码决定从4路输入中选择哪1路输出。

(2)真值表如下图:(3)逻辑图数据选择器的原理比较简单,首先必须设置一个选择标志信号,目的就是为了从多路信号中选择所需要的一路信号,选择标志信号的一种状态对应着一路信号。

在应用中,设置一定的选择标志信号状态即可得到相应的某一路信号。

这就是数据选择器的实现原理。

三.实验内容1、分别采用原理图和vhdl语言的形式设计4选1数据选择器2、对所涉及的电路进行编译及正确的仿真。

电路图:四、实验程序library ieee;use ieee.std_logic_1164.all; entity mux4 is port( a0, a1, a2, a3 :in std_logic; s :in std_logic_vector (1 downto 0); y :out std_logic ); end mux4; architecture archmux of mux4 is begin y <= a0 when s = 00 else --当s=00时,y=a0 a1 when s = 01 else --当s=01时,y=a1 a2 when s = 10 else --当s=10时,y=a2a3; --当s取其它值时,y=a2end archmux;五、运行结果六.实验总结真值表分析:当js=0时,a1,a0取00,01,10,11时,分别可取d0,d1,d2,d3. 篇二:eda实验报告模版《eda技术》实验报告实验名称:序列检测器设计实验日期:x月xx号指导教师: xxx 姓名: xxxxxx学号: xxxxxx 班级: xxxxxx 杭州电子科技大学一、实验设计要求:实验目的:用状态机实现序列检测器的设计,了解一般状态机的设计与应用。

实验内容:根据8.2.2节有关原理介绍,利用quartus ii对例8-4进行文本编辑输入、仿真并给出仿真波形,了解控制信号的时序,最后进行引脚锁定并完成硬件测试实验。

由于本例中的状态机对于序列的检测不能连续,也就是一旦出现不符合的数字时就会全部归零处理,这样实际上并不是最完备的检测手段,请对例中的代码稍作修改来完成连续序列检测。

二、设计原理:2.1 状态机原理图:图2-1状态机状态转换图图2-2状态机模块示意图2.2 原理解释:状态转换图如上图所示,下面的是模块的示意图。

状态机有几个接口,分别是时钟端clk,数据输入端din,复位端rst和输出端out。

每个时钟上升沿读入外部的一位数据,根据读到的数据,状态机进行当前状态的改变,而复位端的功能是将状态机的状态恢复到初始态。

只有检测到11010011这个数据序列的时候状态机才会输出一个1即高电平信号。

如图的状态转换图可以看出,设计的状态机输入的数据是可重复的,即并不是每次都要依次输入规定的数据进入下一状态,否则就归回初始态;而是可以重复的。

比如要求是检测11010011序列的,可是输入刚开始是1后面一直是1,这时候不会不断地复位,而是会保持在”11”状态也就是第二状态,等待出现0进入下一状态。

三、实验程序:3.1 序列检测状态及电路程序:input包括时钟clk、数据输入din、复位端rst;output包括一个out端,为了表示9个状态,声明了一个4位的寄存器,因为四位可以表示最多16个状态;为了保存次态的信息,又声明了一个4位的寄存器,用来存储次态的信息,为了下次上升沿读取。

主程序中包括两个过程语句,一个是用来对状态机的状态进行操作的,如果复位有效,下一个时钟上升沿就是将状态变成初始态;而如果不是就在下一个时钟上升沿将状态变成次态。

另一个过程语句是用来对次态的状态进行赋值、改变的。

它根据现在的状态检测输入的数据的高低电平来决定次态是什么样的状态,并将次态用寄存器保存起来。

声明两个寄存器的,就是为了一个用来保存次态信息,一个用来保存现态。

moduleseries_chk(din,out,clk,rst); input clk,din,rst; output out; reg[3:0] st,nst; parameter s0=07, s1=08, s2=09,s3=10, s4=11, s5=12, s6=13, s7=14, s8=15;//------------------------------------------------------------------------------------------------------------------// always@(posedge clk or posedge rst)begin /*只有在时钟的上升沿来到时, next_state才被保存为current_state*/ end//------------------------------------------------------------------------------------------------------------------// always@(st or din)begin /* next_state 根据current_state 的状态一直在变化并且跟时钟是独立的,不依赖于时钟*/ end//------------------------------------------------------------------------------------------------------------------// assign out = (st==s8); case(st)s0 : if(din==1)nst<=s1; else nst<=s0; s1 : if(din==1)nst<=s2; elsenst<=s0; s2 : if(din==0)nst<=s3; else nst<=s2; s3 : if(din==1)nst<=s4;else nst<=s0; s4 : if(din==0)nst<=s5; else nst<=s2; s5 :if(din==0)nst<=s6; else nst<=s1; s6 : if(din==1)nst<=s7; else nst<=s0;s7 : if(din==1)nst<=s8; else nst<=s0; s8 : if(din==1)nst<=s2; elsenst<=s3; default : nst<=s0; if(rst==1)st<=s0; else st<=nst; endcase endmodule四、编译结果及仿真:4.1 编译资源使用情况:器件型号为stratix ⅲ。

可见,使用了9个组合自适应查找表单元;9个专用逻辑寄存器;4个管脚;一共使用了0 bits的内存块单元。

4.2 仿真的波形:端口的解释:rst:状态清零端; clk:时钟输入端; out:信号输出端;时钟信号选取的是100mhz,首先让rst高电平清零,这时状态机没有正常工作,一直都是初态;然后rst置低,状态机开始工作,输入是在时钟上升沿的时候触发的,观察图中的上升沿,可以看到首先赋的是1,然后又是1,后是0、1,后是0011,然后的确在out上输出了一个高电平表示序列检测成功。

然后为了测试序列可重复的功能是否实现了,因而之后是这么加信号的,因为上个序列11010011最后是11,也就是第二状态,现在输入01,进入了第四状态了,这时本来应该输入0011的,但是我输入了1,这时按理就会跳到第二状态了,因为出现了连续的11,之后再输入010011的确能输出一个高电平,说明重复功能是正常的可用的。

五、总结:5.1 、状态机的类型从状态机的信号输出方式上分,有mealy型和moore型两种状态机。

从状态机的描述结构上分,有单过程状态机和多过程状态机。

从状态机表达方式上分:有符号化状态机和确定状态编码的状态机。

从状态机编码方式上分,可以分为顺序状态机、一位热码编码状态机或其他编码方式状态机。

5.2 、状态变量的表示:有两种的表示方式:1. 各状态元素用参数说明关键词parameter来定义的,其中各状态元素所取的具体数值或编码必须写上,如设s1=1或s1=3’b101等;如下所示:parameter [2:0] s0=1, s1=2, s2=3, s3=4, s4=5; //定义所有的元素及其代表的数;reg[2:0] current_state, next_state;2. 在后来改进了的verilog hdl已经可以使用枚举变量来表示状态元素了,具体的写法如下:typedef enum {s0, s1, s2, s3, s4} type_user; //定义枚举类型type_user;type_user current_state, next_state; //使用枚举类型声明两个状态变量;5.3、mealy型和moore型的状态机区别:若从输出时序上看,前者属于同步输出状态机,而后者属于异步输出状态机。

mealy型状态机的输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的,不依赖时钟的同步。

moore型状态机的输出则仅仅为当前状态的函数,这类状态机在输入发生变化时还必须等待时钟的到来,时钟使状态发生变化时才导致输出的变化,所以比mealy型要多等待一个时钟。

这两种可以看做mealy是实时输出的状态机,而后者moore是按时钟时刻输出的状态机。

相关主题