EDA实验实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字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=a2
a3; --当s取其它值时,y=a2
end 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位的寄存器,用来存储次态的信息,为了下次上升沿读取。主程序中包括两
个过程语句,一个是用来对状态机的状态进行操作的,如果复位有效,下一个时钟上升沿就
是将状态变成初始态;而如果不是就在下一个时钟上升沿将状态变成次态。
另一个过程语句是用来对次态的状态进行赋值、改变的。它根据现在的状态检测输入的
数据的高低电平来决定次态是什么样的状态,并将次态用寄存器保存起来。声明两个寄存器
的,就是为了一个用来保存次态信息,一个用来保存现态。module
series_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
//------------------------------------------------------------------------------