VHDL实验1源程序Word文档下载推荐.docx

上传人:b****2 文档编号:5788937 上传时间:2023-05-05 格式:DOCX 页数:16 大小:21.14KB
下载 相关 举报
VHDL实验1源程序Word文档下载推荐.docx_第1页
第1页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第2页
第2页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第3页
第3页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第4页
第4页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第5页
第5页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第6页
第6页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第7页
第7页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第8页
第8页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第9页
第9页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第10页
第10页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第11页
第11页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第12页
第12页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第13页
第13页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第14页
第14页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第15页
第15页 / 共16页
VHDL实验1源程序Word文档下载推荐.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

VHDL实验1源程序Word文档下载推荐.docx

《VHDL实验1源程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VHDL实验1源程序Word文档下载推荐.docx(16页珍藏版)》请在冰点文库上搜索。

VHDL实验1源程序Word文档下载推荐.docx

--半加器描述

(2):

真值表描述方法

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYh_adderIS

PORT(a,b:

INSTD_LOGIC;

co,so:

OUTSTD_LOGIC);

ENDENTITYh_adder;

ARCHITECTUREfh1OFh_adderis

SIGNALabc:

STD_LOGIC_VECTOR(1DOWNTO0);

--定义标准逻辑位矢量数据类型

BEGIN

abc<

=a&

b;

--a相并b,即a与b并置操作

PROCESS(abc)

CASEabcIS--类似于真值表的CASE语句

WHEN"

00"

=>

so<

='

;

co<

;

01"

10"

11"

WHENOTHERS=>

NULL;

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREfh1;

实验4——全加器VHDL描述

--半加器描述

(1):

布尔方程描述方法

PORT(a,b:

BEGIN

so<

=NOT(aXOR(NOTb));

co<

=aANDb;

ENDARCHITECTUREfh1;

--或门逻辑描述

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYor2aIS

INSTD_LOGIC;

c:

ENDENTITYor2a;

ARCHITECTUREoneOFor2aIS

c<

=aORb;

ENDARCHITECTUREone;

LIBRARYIEEE;

--1位二进制全加器顶层设计描述

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYf_adderIS

PORT(ain,bin,cin:

cout,sum:

ENDENTITYf_adder;

ARCHITECTUREfd1OFf_adderIS

COMPONENTh_adder--调用半加器声明语句

PORT(a,b:

co,so:

ENDCOMPONENT;

COMPONENTor2a

ENDCOMPONENT;

SIGNALd,e,f:

STD_LOGIC;

--定义3个信号作为内部的连接线。

U1:

h_adderPORTMAP(a=>

ain,b=>

bin,co=>

d,so=>

e);

--例化语句

U2:

e,b=>

cin,co=>

f,so=>

sum);

U3:

or2aPORTMAP(a=>

d,b=>

f,c=>

cout);

ENDARCHITECTUREfd1;

实验5——递减函数发生器VHDL程序

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYdcrsIS

 

PORT(clk,reset:

q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDdcrs;

ARCHITECTUREbhvOFdcrsIS

PROCESS(clk,reset)

VARIABLEtmp:

STD_LOGIC_VECTOR(7DOWNTO0);

IFreset='

THEN

tmp:

="

11111111"

ELSIFclk'

EVENTANDclk='

IFtmp="

00000000"

ELSE

=tmp-1;

ENDIF;

q<

=tmp;

ENDPROCESS;

ENDbhv;

实验6—四选一多路数据选择器VHDL

entityselection41is

port(a,b,c,d:

inSTD_LOGIC_vector(1downto0);

s:

inSTD_LOGIC_VECTOR(1downto0);

y:

outSTD_LOGIC_vector(1downto0));

endentityselection41;

architecturearcofselection41is

begin

process(a,b,c,d)

ifs="

then

y<

=a;

elsifs="

y<

=b;

=c;

else

=d;

endif;

endprocess;

endarchitecturearc;

(参考)实验7---分频器VHDL程序(可通过修改分频数来任意输出方波)

--分频器

--**************库定义、包定义********************

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

--**************实体定义********************

Entitydivis

generic(duty:

integer:

=5);

--类属参数说明语句

--端口说明

port(clk:

instd_logic;

--时钟输入

q:

outstd_logic--分频输出

);

enddiv;

--**************构造体定义********************

Architecturediv20ofdivis

constantperiod:

integer:

=20;

--常数定义,分频数20,可以自行修改

signalcount:

integerrange0toperiod-1;

--信号定义,计数作用

begin

process(clk)--进程,由clk这个信号启动

ifrising_edge(clk)then--上升沿驱动,还有另一种写法,见其他例程

ifcount<

dutythen

q<

count<

=count+1;

elsifcount<

period-1then

else

=0;

endif;

endif;

enddiv20;

(参考)实验8——正弦波发生器VHDL程序(简易函数发生器设计2)

ENTITYsinIS

OUTINTEGERRANGE0TO255);

ENDsin;

ARCHITECTUREbhvOFsinIS

INTEGERRANGE0TO63;

IFtmp=63THEN

=tmp+1;

CASEtmpIS

WHEN00=>

=255;

WHEN01=>

=254;

WHEN02=>

=252;

WHEN03=>

=249;

WHEN04=>

=245;

WHEN05=>

=239;

WHEN06=>

=233;

WHEN07=>

=225;

WHEN08=>

=217;

WHEN09=>

=207;

WHEN10=>

=197;

WHEN11=>

=186;

WHEN12=>

=174;

WHEN13=>

=162;

WHEN14=>

=150;

WHEN15=>

=137;

WHEN16=>

=124;

WHEN17=>

=112;

WHEN18=>

=99;

WHEN19=>

=87;

WHEN20=>

=75;

WHEN21=>

=64;

WHEN22=>

=53;

WHEN23=>

=43;

WHEN24=>

=34;

WHEN25=>

=26;

WHEN26=>

=19;

WHEN27=>

=13;

WHEN28=>

=8;

WHEN29=>

=4;

WHEN30=>

=1;

WHEN31=>

WHEN32=>

WHEN33=>

WHEN34=>

WHEN35=>

WHEN36=>

WHEN37=>

WHEN38=>

WHEN39=>

WHEN40=>

WHEN41=>

WHEN42=>

WHEN43=>

WHEN44=>

WHEN45=>

WHEN46=>

WHEN47=>

WHEN48=>

WHEN49=>

WHEN50=>

WHEN51=>

WHEN52=>

WHEN53=>

WHEN54=>

WHEN55=>

WHEN56=>

WHEN57=>

WHEN58=>

WHEN59=>

WHEN60=>

WHEN61=>

WHEN62=>

WHEN63=>

WHENOTHERS=>

NULL;

ENDCASE;

以下是附加内容:

EDA实验--序列信号发生器VHDL程序

ENTITYsequencerIS

PORT(clk,clr:

y:

BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));

ENDsequencer;

ARCHITECTUREbhvOFsequencerIS

PROCESS(clk,clr)

IFCLK'

EVENTANDCLK='

IFclr='

10000000"

CASEyIS

WHEN"

=>

11000001"

11100000"

00010000"

11111000"

00000011"

11110011"

00000001"

方波信号发生器VHDL程序:

ENTITYsquareIS

q:

OUTSTD_LOGIC);

ENDsquare;

ARCHITECTUREbhvOFsquareIS

VARIABLEcnt:

cnt:

=cnt+1;

IFcnt<

31THEN

考虑低位的2位数值比较器VHDL

ENTITYcompare2wlIS

PORT(a,b:

INSTD_LOGIC_VECTOR(1DOWNTO0);

i:

INSTD_LOGIC_VECTOR(2DOWNTO0);

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDcompare2wl;

ARCHITECTUREarcOFcompare2wlIS

PROCESS(a,i)

IF(a

(1)>

b

(1))THEN

y<

100"

ELSIF(a

(1)<

010"

ELSIF(a

(1)=b

(1))THEN

IF(a(0)>

b(0))THEN

ELSIF(a(0)<

ELSIF(a(0)=b(0))THEN

IF(i="

)THEN

ELSIF(i="

ELSE

001"

ENDarc;

分频器VHDL

ENTITYclk_divIS

PORT(clk_in:

INBIT;

clk_out:

BUFFERBIT);

ENDclk_div;

ARCHITECTUREbhvOFclk_divIS

SIGNALcounter:

STD_LOGIC_VECTOR(25DOWNTO0);

PROCESS(clk_in)

CONSTANTcnt:

INTEGER:

=50_000_000;

IFCLK_IN'

EVENTANDCLK_IN='

counter<

=counter+1;

IFcounter=cnt/2-1THEN

clk_out<

=NOTclk_out;

=(OTHERS=>

'

);

函数信号发生器的VHDL设计

--------------------------------------------------------------------------------

信号发生器在电子测量和自动控制领域应用十分广泛,常用的信号发生器大多由模拟电路构成,由于电路复杂、调试麻烦且精度低等缺点,一些复杂模拟电路已被数字电路所代替。

随着计算机软、硬件的发展,计算机与外设之间的数据通信越来越频繁,也越来越便利,虚拟仪器应运而生。

本文介绍基于SOPC实现的函数信号发生器部分原理。

1 SOPC的简介

SOPC技术是美国Altrea公司于2000年最早提出的,并同时推出了相应的开发软件QuartusII。

SOPC是基于FPGA解决方案的SOC,SOPC的设计是以IP为基础的,以硬件描述语言VHDL为主要设计手段,借助于以计算机为平台的EDA工具进行的。

与传统的专用集成电路设计技术相比,SOPC的设计全程,包括电路系统描述、硬件设计、仿真测试、综合、调试、系统软件设计,直至整个系统的完成,都由计算机完成。

其设计技术直接面向用户,使系统级专用集成电路的实现有了更多的途径,即除传统的ASIC器件外,还能通过大规模FPGA等可编程器件来实现。

SOPC设计包括以32位Nios软核处理器为核心的嵌入式系统的硬件配置、硬件设计、硬件仿真、软件设计、软件调试等。

SOPC系统设计的基本软件工具主要有:

QuartusII,用于完成Nios系统的综合、硬件优化、适配、编程下载和硬件系统测试;

SOPCbuilder是AlteraNios嵌入式处理器开发软件包,用于实现Nios系统的配置、生成、Nios系统相关的监控和软件调试平台的生成;

ModelSim用于对SOPCBuilder生成的Nios的HDL描述进行系统功能仿真;

Matlab/DSPBuilder,可借助于生成Nios系统的硬件加速器,进而为其定制新的指令;

GNUPro用于进行软件调试。

2 函数信号发生器的设计步骤与实现

(1)设计步骤

用VHDL语言结合原理图设计实现一个函数信号发生器,输出正弦波、方波和三角波三种波形。

将频率控制、分频、三角波、正弦波、方波发生各个模块分别用VHDL语言编程为一个子程序,并把每一个模块转换成图形文件,然后在原理图编辑框调用这些图形模块

(2)原理实现

frqload.vhd:

把四位频率控制字f〔3...0〕转换为相对应的整数输出q,用于分频计数使用;

frq_div.vhd:

把输入的时钟CLK进行分频,对分频计数a逐次减一,当分频计数a被减到零时,给出一个输出q;

作为三角波模块(delta_gen)、方波模块(square_gen)、正弦波模块(sin_gen)的时钟clk,实现了对输入时钟CLK的a分频。

delta_gen.vhd:

设定一个变量num,定义其范围为“00000111”到“11111000”,每到一个脉冲,分别对它进行+8或-8,然后把改变后的num送到输出q,生成了三角波信号。

square_gen.vhd:

设定一个变量num,每到一个脉冲,检测它是否小于512,若小于512,则把高电平送到输出,并对num+1,否则就输出低电平,并赋值num为0,生成了方波信号。

sin_gen.vhd:

通过定义正弦数据表,每到一个脉冲,逐次查找并输出相应的正弦数据,生成了正弦波形。

mkgrp.vhd:

用于控制输出波形的选通,若只有sin输入高电平,则输出正弦波,以此类推,假若

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

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

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

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