可编程逻辑器件控制VHDL 结课作业 结课论文.docx

上传人:b****6 文档编号:4691696 上传时间:2022-12-07 格式:DOCX 页数:11 大小:200.96KB
下载 相关 举报
可编程逻辑器件控制VHDL 结课作业 结课论文.docx_第1页
第1页 / 共11页
可编程逻辑器件控制VHDL 结课作业 结课论文.docx_第2页
第2页 / 共11页
可编程逻辑器件控制VHDL 结课作业 结课论文.docx_第3页
第3页 / 共11页
可编程逻辑器件控制VHDL 结课作业 结课论文.docx_第4页
第4页 / 共11页
可编程逻辑器件控制VHDL 结课作业 结课论文.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

可编程逻辑器件控制VHDL 结课作业 结课论文.docx

《可编程逻辑器件控制VHDL 结课作业 结课论文.docx》由会员分享,可在线阅读,更多相关《可编程逻辑器件控制VHDL 结课作业 结课论文.docx(11页珍藏版)》请在冰豆网上搜索。

可编程逻辑器件控制VHDL 结课作业 结课论文.docx

可编程逻辑器件控制VHDL结课作业结课论文

 

可编程逻辑电路原理与设计作业

 

 

姓名:

蔺子杰

学号:

10021202

专业:

电子信息工程

完成日期:

2012年12月

 

一.实验报告

1.实验题目

3×8译码器的VHDL设计

2.实验说明

译码器:

把输入的数码解出其对应的数码。

NxM译码器:

N条输入线及M条输出线

设计原理:

先判断使能端口EN状态,当其满足高电平时,判断三个输入端口A2,A1,A0的状态来决定输出。

若使能端口为低电平则固定输出不受逻辑输出A2,A1,A0的影响。

使能有效时按照三个输入状态决定八个输出的状态。

3.实验步骤

1)创建新工程:

打开QuartusII软件,在主界面中执行FILE—>NewprojectWizard在向导的第一页设置工程文件夹,工程名称及顶层实体名称。

点击Next按钮,进入添加设计文件对话框。

点击Next进入选择目标芯片对话框,ACEX1K系列EP1K30QC208-3。

点击Next进入EDA工具设置页面。

在新建工程向导最后,QuartusII给出新建工程摘要信息,点击Finish完成向导。

2)程序输入:

程序代码:

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

entitydemois

Port(A:

inSTD_LOGIC_VECTOR(2downto0);

EN:

inSTD_LOGIC;

Y:

outSTD_LOGIC_VECTOR(7downto0));

enddemo;

architectureDECofdemois

signalindata:

STD_LOGIC_VECTOR(2downto0);

begin

process(A,EN)

begin

indata(0)<=A(0);

indata

(1)<=A

(1);

indata

(2)<=A

(2);

if(EN='1')then

caseindatais

when"000"=>Y<="00000001";

when"001"=>Y<="00000010";

when"010"=>Y<="00000100";

when"011"=>Y<="00001000";

when"100"=>Y<="00010000";

when"101"=>Y<="00100000";

when"110"=>Y<="01000000";

when"111"=>Y<="10000000";

whenothers=>Y<="11111111";

endcase;

endif;

endprocess;

endDEC;

3)编译:

启动编译:

执行菜单processing->startcompilation。

在编译结束后,会出现以下编译报告:

 

4)仿真:

执行File->NEW,选中OtherFiles中vectorwaveformfile,点击OK新建空白文件,名位waveform.vwf,执行file->saveas保存。

默认仿真时间1us.

在波形编辑器左边Name列空白处双击,打开添加仿真信号对话框。

点击Nodefinder打开对话框,从filter列表中pins:

all,然后点击list,添加节点。

通过波形编辑器左侧的信号设置工具栏,编辑输入波形。

当需要设定某段波形时,将其用鼠标拖黑,然后用工具栏中的按钮赋值。

信号波形编辑完成后存盘。

执行processing-startsimulation.从波形图判断输入、输出状态是否符合设计要求。

输出状态如下图所示,符合要求。

在仿真后,会输出符合状态的波形:

5)对器件进行处理:

执行assignments-assignmenteditor,打开管脚分配图,选择左边上角pin进行管脚分配。

管脚分配图,如图所示:

在这部分实验中,除了管脚分配之外,还包括对器件进行编程:

将ByteBlaster电缆一端与PC机并口延长线相连,另一端与试验箱JTAG下载口相连,并打开试验箱电源。

执行Tools->programmer,打开编程器窗口。

点击Hardwaresetup,在其下拉列表中选择ByteBlasterMVorByteBlasterII。

在编程窗口中,勾选program/configure,然后点击start,再进行一次编译,最后进行程序下载。

3.实验结果

通过实验台上的开关控制点亮希望点亮的灯,即3-8译码器的硬件模拟功能。

 

2.BPSK的调制、解调的VHDL设计

1.BPSK原理:

BPSK使用了基准的正弦波和相位反转的波浪,使一方为0,另一方为1,从而可以同时传送接受2值(1比特)的信息。

由于最单纯的键控移相方式虽抗噪音较强但传送效率差,所以常常使用利用4个相位的QPSK和利用8个相位的8PSK。

在大多数情况下,数字调制是利用数字信号的离散值去键控载波。

对载波的幅度、频率或相位进行键控,便可获得ASK、FSK、PSK等。

这三种数字调制方式在抗干扰噪声能力和信号频谱利用率等方面,以相干PSK的性能最好,目前已在中、高速传输数据时得到广泛应用。

2.BPSK调制解调原理:

调相信号是通过载波的相位变化来传输消息的,它具有恒定的包络,而且频率上也无法分离,所以不能采用包络解调,只能采用相干解调。

原理图如下:

3.BPSK调制:

程序代码如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitylynis

port(mux_clock:

instd_logic;

m_sel:

instd_logic_vector(1downto0);

ref_clk:

outstd_logic;

data_out:

outstd_logic;

bpsk_out:

outstd_logic

);

endentity;

architecturebehaveoflynis

componentdff

port(d,clk:

instd_logic;

q:

outstd_logic);

endcomponent;

signala:

std_logic_vector(0to3);

signaltemp0:

std_logic;

signalout0,out1,out2,out3:

std_logic;

signalref_clock:

std_logic;

begin

ref_clock<=mux_clock;

ref_clk<=ref_clock;

data0:

process(mux_clock)--产生时钟信号的八分频

variablecnt:

integerrange0to8;

begin

ifmux_clock'eventandmux_clock='1'then

cnt:

=cnt+1;

ifcnt<=4then

out0<='1';

elsifcnt<8then

out0<='0';

else

cnt:

=0;

endif;

endif;

endprocessdata0;

data1:

process(mux_clock)--时钟信号十六分频电路

variablecnt:

integerrange0to16;

begin

ifmux_clock'eventandmux_clock='1'then

cnt:

=cnt+1;

ifcnt<=8then

out1<='1';

elsifcnt<16then

out1<='0';

else

cnt:

=0;

endif;

endif;

endprocessdata1;

a(0)<=temp0;--反馈系数为23的七位伪码序列

u13_1:

dffportmap(a(0),mux_clock,a

(1));

u13_2:

dffportmap(a

(1),mux_clock,a

(2));

u13_3:

dffportmap(a

(2),mux_clock,a(3));

temp0<=not(a

(2)xora(3));

out2<=nota(3);

out3<='0';--获取全零序列

output:

process(mux_clock)--通过m_sel选择某一输出信号,并对其进行BPSK编码

begin

casem_selis

when"00"=>data_out<=out0;bpsk_out<=out0xorref_clock;

when"01"=>data_out<=out1;bpsk_out<=out1xorref_clock;

when"10"=>data_out<=out2;bpsk_out<=out2xorref_clock;

when"11"=>data_out<=out3;bpsk_out<=out3xorref_clock;

whenothers=>data_out<=out3;bpsk_out<=out3xorref_clock;

endcase;

endprocessoutput;

endbehave;

仿真后的波形如图所示:

 

4.BPSK解调

程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_arith.ALL;

USEIEEE.STD_LOGIC_unsigned.ALL;

ENTITYliIS

PORT(clk:

INstd_logic;

start:

INstd_logic;

a:

INstd_logic;

b:

OUTstd_logic);

ENDli;

ARCHITECTUREbehaveOFliIS

SIGNALc:

integerRANGE0TO3;

BEGIN

PROCESS(clk)

BEGIN

IF(clk'eventANDclk='1')THEN

IFstart='0'THENc<=0;

ELSIFc=0THENc<=c+1;

IFa='1'THENb<='1';

ELSEb<='0';

ENDIF;

ELSIFc=3THENc<=0;

ELSEc<=c+1;

ENDIF;

ENDIF;

ENDPROCESS;

ENDbehave;

仿真后的波形为:

由上图可知:

当输入的已调波信号a相位为0时,输出的基带信号b为高电平。

当输入的相位为π时,输出的基带信号b为低电平。

说明解调成功。

 

 

三.八位七段数码管动态显示的VHDL设计

1.七段显示器显示原理

七段显示器可用来显示单一的十进制或十六进制的数字,它是由八个发光二极管所构成的(每一个二极管依位置不同而赋予不同的名称,请参见图4.1)。

我们可以简单的说,要产生数字,便是点亮特定数据的发光二极管。

例如要产生数字「0」,须只点亮A、B、C、D、E、F等节段的发光二极管;要产生数字「5」,则须点亮A、C、D、F、G等节段发光二极管,以此类推,参见图4.6。

因此,以共阳极七段显示器而言,要产生数字「0」,必须控制CycloneIIFPGA芯片接连至A、B、C、D、E、F等接脚呈现“低电位”,使电路形成通路状态。

表4.1则为共阳极七段显示器显示之数字编码。

本实验要求完成的任务是在时钟信号的作用下,通过输入的键值在数码管上显示相应的键值。

2.程序代码解析

libraryieee;

  useieee.std_logic_1164.all;

  useieee.std_logic_arith.all;

  useieee.std_logic_unsigned.all;

  entityexp4is--exp4为实体名

  port(clk:

instd_logic;--定义动态扫描时钟信号

  key:

instd_logic_vector(3downto0);--定义四位输入信号

  ledag:

outstd_logic_vector(6downto0);--定义七位输出信号

  del:

outstd_logic_vector(2downto0)--定义八位数码管位置显示信号

  endexp4;--结束实体

  

  architecturewhbkrcofexp4is--whbkrc为结构体名

  begin--以begin为标志开始结构体的描述

  process(clk)--进程,clk变化时启动进程

  variabledount:

std_logic_vector(2downto0);--变量,计数

  begin

  ifclk'eventandclk='1'then--检测时钟上升沿

  dount:

=dount+1;--计数器dount累加

  endif;

  del<=dount;--片选信号

  endprocess;--结束进程

  process(key)--进程,key变化时启动进程

  begin

  casekeyis

  when"0000"=>ledag<="0111111";--七段数码管显示0

  when"0001"=>ledag<="0000110";--1

  when"0010"=>ledag<="1011011";--2

  when"0011"=>ledag<="1001111";--3

  when"0100"=>ledag<="1100110";--4

  when"0101"=>ledag<="1101101";--5

  when"0110"=>ledag<="1111101";--6

  when"0111"=>ledag<="0000111";--7

  when"1000"=>ledag<="1111111";--8

  when"1001"=>ledag<="1101111";--9

  when"1010"=>ledag<="1110111";--R

  when"1011"=>ledag<="1111100";--b

  when"1100"=>ledag<="0111001";--C

  when"1101"=>ledag<="1011110";--d

  when"1110"=>ledag<="1111001";--E

  when"1111"=>ledag<="1110001";--F

  whenothers=>null;

  endcase;

  endprocess;--结束进程

  endwhbkrc;--结束结构体

说明:

程序有三部分构成,其为:

库和包library(设计资源);实体entity(外部端口);结构体architecture(内部结构)

在此程序中:

实体说明主要描述对象的外貌,即对象的输入和输出(I/O)的端口信息,它并不描述器件的具体功能。

结构体具体指明了该设计实体的行为,定义了该设计实体的功能,规定了该设计实体的数据流程,指派了实体中内部元件的连接关系。

编辑输入端口波形:

 

仿真后得到的波形:

 

 

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

当前位置:首页 > 高中教育 > 理化生

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

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