实验一实用计数器的VHDL设计说明.docx

上传人:b****6 文档编号:5287880 上传时间:2022-12-14 格式:DOCX 页数:26 大小:629.92KB
下载 相关 举报
实验一实用计数器的VHDL设计说明.docx_第1页
第1页 / 共26页
实验一实用计数器的VHDL设计说明.docx_第2页
第2页 / 共26页
实验一实用计数器的VHDL设计说明.docx_第3页
第3页 / 共26页
实验一实用计数器的VHDL设计说明.docx_第4页
第4页 / 共26页
实验一实用计数器的VHDL设计说明.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

实验一实用计数器的VHDL设计说明.docx

《实验一实用计数器的VHDL设计说明.docx》由会员分享,可在线阅读,更多相关《实验一实用计数器的VHDL设计说明.docx(26页珍藏版)》请在冰豆网上搜索。

实验一实用计数器的VHDL设计说明.docx

实验一实用计数器的VHDL设计说明

实验一实用计数器的VHDL设计

一.实验目的

熟悉quartusII的VHDL文本设计流程全过程,学习计数器的设计,仿真,进一步了解异步的概念。

二.实验原理

实用的D触发器除含有时钟端CLK外,还含有异步清零端CLR和时钟使能端ENA。

这里的异步并非时序逻辑的异步,而是指独立于时钟控制的复位控制端,在任何时候,只要CLR=’1’,此时D触发器的输出端即可清零,与时钟信号无关。

三.程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT10IS

PORT(CLK,RST,EN,LOAD:

INSTD_LOGIC;

DATA:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

COUT:

OUTSTD_LOGIC);

ENDCNT10;

ARCHITECTUREBEHAVOFCNT10IS

BEGIN

PROCESS(CLK,RST,EN,LOAD)

VARIABLEQ:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFRST='0'THENQ:

=(OTHERS=>'0');

ELSIFCLK'EVENTANDCLK='1'THEN

IFEN='1'THEN

IF(LOAD='0')THENQ:

=DATA;ELSE

IFQ<9THENQ:

=Q+1;

ELSEQ:

=(OTHERS=>'0');

ENDIF;

ENDIF;

ENDIF;

ENDIF;

IFQ="1001"THENCOUT<='1';

ELSECOUT<='0';

ENDIF;

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:

INSTD_LOGIC;

clock:

INSTD_LOGIC;

data:

INSTD_LOGIC_VECTOR(3DOWNTO0);

sload:

INSTD_LOGIC;

updown:

INSTD_LOGIC;

cout:

OUTSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCNT4B;

ARCHITECTURESYNOFt4bIS

SIGNALsub_wire0:

STD_LOGIC;

SIGNALsub_wire1:

STD_LOGIC_VECTOR(3DOWNTO0);

COMPONENTlpm_counter

GENERIC(

lpm_direction:

STRING;

lpm_modulus:

NATURAL;

lpm_port_updown:

STRING;

lpm_type:

STRING;

lpm_width:

NATURAL

);

PORT(

sload:

INSTD_LOGIC;

clk_en:

INSTD_LOGIC;

aclr:

INSTD_LOGIC;

clock:

INSTD_LOGIC;

cout:

OUTSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

data:

INSTD_LOGIC_VECTOR(3DOWNTO0);

updown:

INSTD_LOGIC

);

ENDCOMPONENT;

BEGIN

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的流水线乘法累加器设计

一.实验目的

熟悉调用quartusII中的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文本设计流程全过程,学习计数器的设计,仿真和硬件测试,掌握原理图与文本混合设计方法

二.实验原理

实用的D触发器除含有时钟端CLK外,还含有异步清零端CLR和时钟使能端ENA。

这里的异步并非时序逻辑的异步,而是指独立于时钟控制的复位控制端,在任何时候,只要CLR=’1’,此时D触发器的输出端即可清零,与时钟信号无关。

三.设计过程

(1)程序分析

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT10IS

PORT(CLK,RST,EN,LOAD:

INSTD_LOGIC;

DATA:

INSTD_LOGIC_VECTOR(3DOWNTO0);--4位预置数

DOUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);--计数值输出

COUT:

OUTSTD_LOGIC);--计数进位输出

ENDCNT10;

ARCHITECTUREBEHAVOFCNT10IS

BEGIN

PROCESS(CLK,RST,EN,LOAD)

VARIABLEQ:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFRST='0'THENQ:

=(OTHERS=>'0');--复位低电平时,计数寄存器清0

ELSIFCLK'EVENTANDCLK='1'THEN--测试时钟上升沿

IFEN='1'THEN--计数使能高电平,允许计数

IF(LOAD='0')THENQ:

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

IFQ<9THENQ:

=Q+1;--计数小于9,继续累加

ELSEQ:

=(OTHERS=>'0');--否则计数清0

ENDIF;

ENDIF;

ENDIF;

ENDIF;

IFQ="1001"THENCOUT<='1';--当计数位9时,进位输出1

ELSECOUT<='0';

ENDIF;--否则进位输出0

DOUT<=Q;--计数寄存器的值输出端口

ENDPROCESS;

ENDBEHAV;

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

第一个IF语句是非完整性条件语句,因而将产生计数器时序电路;第二个IF语句产生一个纯组合逻辑的多路选择器。

四.编译仿真波形

(图一)

(图二)

五.原理图示意图

六.原理图时序仿真

七.分析结果

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

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

一.实验目的

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

二.实验原理

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

 

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

或:

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

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

三.设计过程

(1)RTL图

(2)Symbol图

四.仿真波形

五.分析结果

当s=0时 y=a1;

当s=1时 y=a1;

当s=2时 y=a2;

当s=3时 y=a3;

六.程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux21aIS

PORT(a,b,c,d:

INSTD_LOGIC;

s:

INSTD_LOGIC_VECTOR(1DOWNTO0);

y:

OUTSTD_LOGIC);

ENDENTITYmux21a;

ARCHITECTUREoneOFmux21aIS

BEGIN

y<=aWHENs="00"ELSE

bWHENS="01"ELSE

cWHENs="10"ELSE

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)状态图

四.程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYFSM_EXPIS

PORT(CLK,reset:

INSTD_LOGIC;

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;

BEGIN

REG:

PROCESS(reset,clk)BEGIN

IFreset='0'THENc_st<=s0;

ELSIFCLK='1'ANDCLK'EVENTTHENc_st<=next_state;

ENDIF;

ENDPROCESSREG;

COM:

PROCESS(c_st,state_inputs)BEGIN

CASEc_stIS

WHENs0=>comb_outputs<=5;

IFstate_inputs="00"THENnext_state<=S0;

ELSEnext_state<=S1;ENDIF;

WHENs1=>comb_outputs<=8;

IFstate_inputs="01"THENnext_state<=S1;

ELSEnext_state<=S2;ENDIF;

WHENs2=>comb_outputs<=12;

IFstate_inputs="10"THENnext_state<=S0;

ELSEnext_state<=S3;ENDIF;

WHENs3=>comb_outputs<=14;

IFstate_inputs="11"THENnext_state<=S3;

ELSEnext_state<=S4;ENDIF;

WHENs4=>comb_outputs<=9;next_state<=S0;

WHENOTHERS=>next_state<=S0;

ENDcase;

ENDPROCESSCOM;

ENDbehav;

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

一.实验目的

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

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

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

二.实验原理

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

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

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

三.设计程序

见附录

四.设计结果及分析

(1)生成symbol

(2)时序波形图

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

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

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

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

(3)状态图

五.附录

libraryieee;

useieee.std_logic_1164.all;

entityADC0809is

port(d:

instd_logic_vector(7downto0);

clk,rst:

instd_logic;

eoc:

instd_logic;

ale:

outstd_logic;

start,oe:

outstd_logic;

adda,lock_t:

outstd_logic;

q:

outstd_logic_vector(7downto0));

endADC0809;

architecturebehavofADC0809is

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

signalcs,next_state:

states:

=s0;

signalregl:

std_logic_vector(7downto0);

signallock:

std_logic;

begin

adda<='0';lock_t<=lock;

:

process(cs,eoc)begin

casecsis

whens0=>ale<='0';start<='0';oe<='0';lock<='0';next_state<=s1;

whens1=>ale<='1';start<='1';oe<='0';lock<='0';next_state<=s2;

whens2=>ale<='0';start<='0';oe<='0';lock<='0';

if(eoc='1')thennext_state<=s3;

elsenext_state<=s2;endif;

whens3=>ale<='0';start<='0';oe<='1';lock<='0';next_state<=s4;

whens4=>ale<='0';start<='0';oe<='1';lock<='1';next_state<=s0;

whenothers=>ale<='0';start<='0';oe<='0';lock<='0';next_state<=s0;

endcase;

endprocess;

reg:

process(clk,rst)begin

ifrst='1'thencs<=s0;

elsifclk'eventandclk='1'thencs<=next_state;endif;

endprocessreg;

latch1:

process(lock)begin

iflock='1'andlock'eventthenregl<=d;endif;

endprocesslatch1;

q<=regl;

endbehav;

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

一.实验目的

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

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

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

二.实验原理

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

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

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

三.设计程序(见附录)

四.设计过程及结果分析

(1)产生的symbol

(2)时序波形图

(3)状态图

五.附录

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYSCHKIS

PORT(DIN,CLK,RST:

INSTD_LOGIC;

SOUT:

OUTSTD_LOGIC);

ENDSCHK;

ARCHITECTUREbehavOFSCHKIS

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

SIGNALST,NST:

states:

=s0;

BEGIN

COM:

PROCESS(ST,DIN)BEGIN

CASESTIS

WHENs0=>IFDIN='1'THENNST<=s1;ELSENST<=s0;ENDIF;

WHENs1=>IFDIN='1'THENNST<=s2;ELSENST<=s0;ENDIF;

WHENs2=>IFDIN='0'THENNST<=s3;ELSENST<=s0;ENDIF;

WHENs3=>IFDIN='1'THENNST<=s4;ELSENST<=s0;ENDIF;

WHENs4=>IFDIN='0'THENNST<=s5;ELSENST<=s0;ENDIF;

WHENs5=>IFDIN='0'THENNST<=s6;ELSENST<=s0;ENDIF;

WHENs6=>IFDIN='1'THENNST<=s7;ELSENST<=s0;ENDIF;

WHENs7=>IFDIN='1'THEN

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

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1