实验一 实用计数器的VHDL设计Word下载.docx

上传人:b****2 文档编号:4758788 上传时间:2023-05-04 格式:DOCX 页数:30 大小:645.33KB
下载 相关 举报
实验一 实用计数器的VHDL设计Word下载.docx_第1页
第1页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第2页
第2页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第3页
第3页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第4页
第4页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第5页
第5页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第6页
第6页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第7页
第7页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第8页
第8页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第9页
第9页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第10页
第10页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第11页
第11页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第12页
第12页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第13页
第13页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第14页
第14页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第15页
第15页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第16页
第16页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第17页
第17页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第18页
第18页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第19页
第19页 / 共30页
实验一 实用计数器的VHDL设计Word下载.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

实验一 实用计数器的VHDL设计Word下载.docx

《实验一 实用计数器的VHDL设计Word下载.docx》由会员分享,可在线阅读,更多相关《实验一 实用计数器的VHDL设计Word下载.docx(30页珍藏版)》请在冰点文库上搜索。

实验一 实用计数器的VHDL设计Word下载.docx

=Q+1;

ELSEQ:

ENDIF;

ENDIF;

ENDIF;

ENDIF;

IFQ="

1001"

THENCOUT<

='

;

ELSECOUT<

DOUT<

=Q;

ENDPROCESS;

ENDBEHAV;

四.程序分析

该程序的进程语句中含有两个独立的IF语句。

第一个IF语句是非完整性条件语句,因而将产生计数器时序电路;

第二个IF语句产生一个纯组合逻辑的多路选择器。

五.RTL电路图

六.工作时序图

通过对上图的观察可知:

(1)当计数器使能EN为高电平时允许计数;

RST低电平时计数器被清零。

(2)图中出现的加载信号LOAD由于是同步加载控制信号,其第一个负脉冲恰好在CLK的上升沿处,故将5加载于计数器,此后由5到9,出现了第一个进位脉冲。

由于LOAD第二个负脉冲未在CLK上升沿处,故没有发生加载操作,而第3,第4个负脉冲都出现了加载操作,这是因为它们都处于CLK上升沿处。

 

实验二LPM计数器模块使用方法

熟悉调用quartusII中的LPM计数器,掌握流程的设置以及时序仿真。

掌握LPM计数器的调用方法,流程的测试,同类宏模块的一般使用方法及不同特性的仿真测试方法。

三.设计过程

(1)LMP_COUNTER计数器模块文本调用

(2)生成的计数器文件

LIBRARYieee;

USEieee.std_logic_1164.all;

LIBRARYlpm;

USElpm.all;

ENTITYCNT4BIS

PORT

aclr:

INSTD_LOGIC;

clk_en:

clock:

data:

INSTD_LOGIC_VECTOR(3DOWNTO0);

sload:

updown:

cout:

OUTSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCNT4B;

ARCHITECTURESYNOFcnt4bIS

SIGNALsub_wire0:

STD_LOGIC;

SIGNALsub_wire1:

STD_LOGIC_VECTOR(3DOWNTO0);

COMPONENTlpm_counter

GENERIC(

lpm_direction:

STRING;

lpm_modulus:

NATURAL;

lpm_port_updown:

lpm_type:

lpm_width:

NATURAL

PORT(

sload:

clk_en:

aclr:

clock:

cout:

q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

data:

updown:

INSTD_LOGIC

ENDCOMPONENT;

cout<

=sub_wire0;

q<

=sub_wire1(3DOWNTO0);

lpm_counter_component:

lpm_counter

GENERICMAP(

lpm_direction=>

"

UNUSED"

lpm_modulus=>

12,

lpm_port_updown=>

PORT_USED"

lpm_type=>

LPM_COUNTER"

lpm_width=>

4

PORTMAP(

sload=>

sload,

clk_en=>

clk_en,

aclr=>

aclr,

clock=>

clock,

data=>

data,

updown=>

updown,

cout=>

sub_wire0,

q=>

sub_wire1

ENDSYN;

四.时序仿真

五.原理图输入设计

实验三基于LPM的流水线乘法累加器设计

一.实验目的

通过一个八位流水线乘法累加器的实例介绍顶层原理图工程,VHDL文本描述和宏功能块为原理图元件的输入和设计方法。

二.实验原理

通过TOOLS中的MegaWizardPlug-InManager命令分别生成LPM加法器模块,乘法模块及寄存器模块。

最后有序的将他们连接在一起构成八位乘法累加器顶层文件。

三.设计过程

(1)LPM加法器模块设置调用

(2)LPM乘法器模块设置调用

(3)各模块的symbol

ADD16B

MULT8B

FF8B

四.8位乘法累加器顶层设计

五.乘法累加器的时序仿真

由上述波形可知:

在clk的第四个上升沿后才得到第一个计算数据,之前都是0,这就是流水线结构的计算结果。

第四个上升沿得到结果为

,而第五个上升沿后得到结果为

,第六个上升沿后得到的结果为

实验四全加器

熟悉quartusII的原理图输入设计方法,学会进行底层元件设计和层次化设计的主要步骤。

1位全加器可以用两个半加器及一个或门链接而成,而一个半加器是由两个输入端,两个输出端,一个与门及一个异或门。

三.实验内容

(1)半加器原理图

(2)半加器仿真波形

(3)半加器元件

(4)全加器原理图

(5)全加器时序仿真波形

实验五异步清零和同步加载与时钟使能的计数器

熟悉quartusII的VHDL文本设计流程全过程,学习计数器的设计,仿真和硬件测试,掌握原理图与文本混合设计方法

(1)程序分析

--4位预置数

--计数值输出

--计数进位输出

--复位低电平时,计数寄存器清0

THEN--测试时钟上升沿

THEN--计数使能高电平,允许计数

ELSE--预置控制低电平,允许加载

--计数小于9,继续累加

--否则计数清0

--当计数位9时,进位输出1

--否则进位输出0

--计数寄存器的值输出端口

四.编译仿真波形

(图一)

(图二)

五.原理图示意图

六.原理图时序仿真

七.分析结果

选用CycloneIII系列高速FPGA出现的时序仿真图(如图一),没有出现毛刺现象,而选择Cyclone系列FPGA就会出现毛刺现象(如图二)

实验六4选1多路选择器设计

进一步熟悉QuartusII的VHDL文本设计流程,组合电路的设计仿真和测试。

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

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

或:

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

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

(1)RTL图

(2)Symbol图

四.仿真波形

五.分析结果

当s=0时 

y=a1;

当s=1时 

当s=2时 

y=a2;

当s=3时 

y=a3;

六.程序

ENTITYmux21aIS

PORT(a,b,c,d:

s:

INSTD_LOGIC_VECTOR(1DOWNTO0);

y:

OUTSTD_LOGIC);

ENDENTITYmux21a;

ARCHITECTUREoneOFmux21aIS

BEGIN

y<

=aWHENs="

00"

bWHENS="

01"

cWHENs="

10"

d;

ENDARCHITECTUREone;

实验六VHDL有限状态机设计

1.进一步熟悉和掌握Quartus软件的各模块功能的使用方法。

2.加深对VHDL语言的了解,熟悉VHDL语言的语法特点深刻了解Quartus软件仿真中出现的各种问题并能加以解决。

3.学习使用和查看状态转换图

本设计说明部分中使用type语句定义新的数据类型。

状态变量(如现态和次态)应定义为信号,便于信息传递,并将状态变量的数据类型定义为含有既定状态元素的新定义的数据类型。

其中新定义的数据类型名是FSM_ST,其元素类型分别为s0,s1,s2,s3,s4,使其恰好表述状态机的五个状态。

在此设计模块说明部分,定义了五个文字参数符号,代表五个状态。

对于此程序,如果异步清零信号reset有过一个复位脉冲,当前状态即可被异步设置为S0;

与此同时,启动组合进程,“执行”条件分支语句。

三.设计结果及分析

(1)生成symbol

(2)时序波形图

通过分析波形,进一步了解状态机的工作特性。

需要注意,reset信号是低电平有效的,而clk是上升沿有效的,所以reset有效脉冲后的第一个时钟脉冲是第二个clk脉冲,第三个脉冲的上升沿后,现态c_st即进入状态S1.同时输出8,即“1000”。

(3)状态图

四.程序

ENTITYFSM_EXPIS

PORT(CLK,reset:

state_inputs:

INSTD_LOGIC_VECTOR(0TO1);

comb_outputs:

OUTINTEGERRANGE0TO15);

ENDFSM_EXP;

ARCHITECTUREbehavOFFSM_EXPIS

TYPEFSM_STIS(s0,s1,s2,s3,s4);

SIGNALc_st,next_state:

FSM_ST;

REG:

PROCESS(reset,clk)BEGIN

IFreset='

THENc_st<

=s0;

ELSIFCLK='

ANDCLK'

EVENTTHENc_st<

=next_state;

ENDPROCESSREG;

COM:

PROCESS(c_st,state_inputs)BEGIN

CASEc_stIS

WHENs0=>

comb_outputs<

=5;

IFstate_inputs="

THENnext_state<

=S0;

ELSEnext_state<

=S1;

ENDIF;

WHENs1=>

=8;

=S2;

WHENs2=>

=12;

=S3;

WHENs3=>

=14;

11"

=S4;

WHENs4=>

=9;

next_state<

WHENOTHERS=>

next_state<

ENDcase;

ENDPROCESSCOM;

ENDbehav;

实验八ADC采样控制设计及多进程结构状态机

1、进一步熟悉和掌握Quartus软件的各模块功能的使用方法。

2、加深对VHDL语言的了解,熟悉VHDL语言的语法特点,深刻了解Quartus软件仿真中出现的各种问题并能加以解决。

3、学习使用和查看状态转换图

本设计中的组合过程可以分为两个组合进程:

一个负责状态译码和状态转换,另一个负责对外控制信号输出,从而构成一个三进程结构的有限状态机,其功能与前者一样,但程序结构更加清晰,功能分工更加明确。

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

三.设计程序

见附录

四.设计结果及分析

上图显示了一个完整的采样周期。

复位信号后即进入状态s0,第二个时钟上升沿后,状态机进入状态s1(即cs=s1),由start、ale发出启动采样和地址选通的控制信号。

之后,eoc由高电平变为低电平,0809的8位数据输出端呈现高阻态“ZZ”。

在状态s2,等待clk数个时钟周期之后,eoc变为高电平,表示转述结束。

五.附录

libraryieee;

useieee.std_logic_1164.all;

entityADC0809is

port(d:

instd_logic_vector(7downto0);

clk,rst:

instd_logic;

eoc:

ale:

outstd_logic;

start,oe:

adda,lock_t:

q:

outstd_logic_vector(7downto0));

endADC0809;

architecturebehavofADC0809is

typestatesis(s0,s1,s2,s3,s4);

signalcs,next_state:

states:

signalregl:

std_logic_vector(7downto0);

signallock:

std_logic;

begin

adda<

lock_t<

=lock;

com:

process(cs,eoc)begin

casecsis

whens0=>

ale<

start<

oe<

lock<

next_state<

=s1;

whens1=>

=s2;

whens2=>

if(eoc='

)thennext_state<

=s3;

elsenext_state<

endif;

whens3=>

=s4;

whens4=>

whenothers=>

endcase;

endprocesscom;

reg:

process(clk,rst)begin

ifrst='

thencs<

elsifclk'

eventandclk='

endprocessreg;

latch1:

process(lock)begin

iflock='

andlock'

eventthenregl<

=d;

endprocesslatch1;

q<

=regl;

endbehav;

实验九序列检测器之状态机设计

3、学习使用和查看状态转换图。

状态机用于序列检测器的设计比之其他方法更能显示其优越性。

序列检测器可用于一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。

由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。

三.设计程序(见附录)

四.设计过程及结果分析

(1)产生的symbol

五.附录

ENTITYSCHKIS

PORT(DIN,CLK,RST:

SOUT:

ENDSCHK;

ARCHITECTUREbehavOFSCHKIS

TYPEstatesIS(s0,s1,s2,s3,s4,s5,s6,s7,s8);

SIGNALST,NST:

states:

PROCESS(ST,DIN)BEGIN

CASESTIS

IFDIN='

THENNST<

ELSENST<

=s5;

WHENs5=>

=s6;

WHENs6=>

=s7;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2