电子设计实验补充资料GWDA2C.docx
- 文档编号:24905669
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:24
- 大小:161.13KB
电子设计实验补充资料GWDA2C.docx
《电子设计实验补充资料GWDA2C.docx》由会员分享,可在线阅读,更多相关《电子设计实验补充资料GWDA2C.docx(24页珍藏版)》请在冰豆网上搜索。
电子设计实验补充资料GWDA2C
电子设计实验补充资料
【实验1】等精度频率/脉宽测试仪设计
测频率、脉宽和占空比,详见《EDA技术实验讲义》
【实验2】移相正弦信号发生器设计
1.实验目的:
学习直接数字综合器DDS及基于此模块的数字信号发生器的设计和实现。
2.实验原理:
图1是此电路模型图,其中“FWORD”是8位频率控制字,控制输出正弦信号的相移量;其“PWORD”是8位相移控制字,控制输出正弦信号的相移量;ADDER32B和ADDER10B分别为32位和10位加法器;SIN_ROM是存放正弦波数据的ROM,10位数据线,10位地址线,其中的数据文件是LUT10X10.mif,可由MATLAB直接生成;REG32B和REG10B分别是32位和10位寄存器;POUT和FOUT分别为10位输出,可以分别与两个高速D/A相接,他们分别输出参考信号和可移相正弦波信号。
图1基于DDS的数字移相信号发生器电路模型图
图2数字式移相信号发生器完整结构
3.实验内容1:
首先利用VHDL完成10位输出数据宽度的移相信号发生器的设计,其中包括设计正弦波形数据MIF文件(数据深度1024、数据类型是10进制数);给出仿真波形。
最后进行硬件测试,对于GW48系统,选择模式1:
CLK接clock0,接12MHz;用键4、3控制相位字PWORD输入,键2、1控制频率字FWORD输入。
观察他们的李萨如图形。
4.实验内容2:
修改设计,增加幅度控制电路(可以用一乘法器控制输出幅度)。
5.实验内容3:
利用MATLAB和DSPBuilder完成图1的设计,和硬件实现。
图3为此项设计的MATLAB电路模型:
图3基于DDS模型移相信号发生器Simulink模型
6.实验思考题:
如果频率控制字宽度直接用32位,相位控制字宽度直接用10位,输出仍为10位,时钟为20MHz,计算频率、相位和幅度3者分别的步进精度是多少?
给出输出频率的上下限。
给出一个设计方案,用单片机来控制此DDS模块,既能保证步进精度,又能随意设置指定的输出值。
7.实验报告:
根据以上的实验要求、实验内容和实验思考题写出实验报告。
数字移相信号发生器VHDL参考程序如下:
【例1】数字移相信号发生器顶层设计文件
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYDDS_VHDLIS--顶层设计
PORT(CLK:
INSTD_LOGIC;--系统时钟
FWORD:
INSTD_LOGIC_VECTOR(7DOWNTO0);--频率控制字
PWORD:
INSTD_LOGIC_VECTOR(7DOWNTO0);--相位控制字
FOUT:
OUTSTD_LOGIC_VECTOR(9DOWNTO0);--可移相正弦信号输出
POUT:
OUTSTD_LOGIC_VECTOR(9DOWNTO0));--参考信号输出
END;
ARCHITECTUREoneOFDDS_VHDLIS
COMPONENTREG32B--32位锁存器
PORT(LOAD:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDCOMPONENT;
COMPONENTREG10B--10位锁存器
PORT(LOAD:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(9DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(9DOWNTO0));
ENDCOMPONENT;
COMPONENTADDER32B--32位加法器
PORT(A:
INSTD_LOGIC_VECTOR(31DOWNTO0);
B:
INSTD_LOGIC_VECTOR(31DOWNTO0);
S:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDCOMPONENT;
COMPONENTADDER10B--10位加法器
PORT(A:
INSTD_LOGIC_VECTOR(9DOWNTO0);
B:
INSTD_LOGIC_VECTOR(9DOWNTO0);
S:
OUTSTD_LOGIC_VECTOR(9DOWNTO0));
ENDCOMPONENT;
COMPONENTSIN_ROM--10位地址10位数据正弦信号数据ROM
PORT(address:
INSTD_LOGIC_VECTOR(9DOWNTO0);
inclock:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(9DOWNTO0));
ENDCOMPONENT;
SIGNALF32B:
STD_LOGIC_VECTOR(31DOWNTO0);
SIGNALD32B:
STD_LOGIC_VECTOR(31DOWNTO0);
SIGNALDIN32B:
STD_LOGIC_VECTOR(31DOWNTO0);
SIGNALP10B:
STD_LOGIC_VECTOR(9DOWNTO0);
SIGNALLIN10B:
STD_LOGIC_VECTOR(9DOWNTO0);
SIGNALSIN10B:
STD_LOGIC_VECTOR(9DOWNTO0);
BEGIN
F32B(27DOWNTO20)<=FWORD;F32B(31DOWNTO28)<="0000";
F32B(19DOWNTO0)<="00000000000000000000";
P10B(9DOWNTO2)<=PWORD;P10B(1DOWNTO0)<="00";
u1:
ADDER32BPORTMAP(A=>F32B,B=>D32B,S=>DIN32B);
u2:
REG32BPORTMAP(DOUT=>D32B,DIN=>DIN32B,LOAD=>CLK);
u3:
SIN_ROMPORTMAP(address=>SIN10B,q=>FOUT,inclock=>CLK);
u4:
ADDER10BPORTMAP(A=>P10B,B=>D32B(31DOWNTO22),S=>LIN10B);
u5:
REG10BPORTMAP(DOUT=>SIN10B,DIN=>LIN10B,LOAD=>CLK);
u6:
SIN_ROMPORTMAP(address=>D32B(31DOWNTO22),q=>POUT,inclock=>CLK);
END;
【例2】32位加法器,10位加法器略去
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYADDER32BIS
PORT(A:
INSTD_LOGIC_VECTOR(31DOWNTO0);
B:
INSTD_LOGIC_VECTOR(31DOWNTO0);
S:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDADDER32B;
ARCHITECTUREbehavOFADDER32BIS
BEGIN
S<=A+B;
ENDbehav;
【例3】DDS设计中ROM的初始化文件LUT10X10.mif”,注意,此数据文件若用MATLAB和DSPBuilder直接生成最为快捷。
width=10;
depth=1024;
address_radix=dec;
data_radix=dec;
contentbegin
0:
511;
1:
514;
2:
517;
3:
520;
4:
524;
......(略去数据)
1020:
498;
1021:
502;
1022:
505;
1023:
508;
end;
【例4】正弦信号数据ROM
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYaltera_mf;
USEaltera_mf.altera_mf_components.all;
ENTITYsin_romIS
PORT
(address:
INSTD_LOGIC_VECTOR(9DOWNTO0);
inclock:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(9DOWNTO0));
ENDsin_rom;
ARCHITECTURESYNOFsin_romIS
SIGNALsub_wire0:
STD_LOGIC_VECTOR(9DOWNTO0);
COMPONENTaltsyncram
GENERIC(intended_device_family:
STRING;
width_a:
NATURAL;
widthad_a:
NATURAL;
numwords_a:
NATURAL;
operation_mode:
STRING;
outdata_reg_a:
STRING;
address_aclr_a:
STRING;
outdata_aclr_a:
STRING;
width_byteena_a:
NATURAL;
init_file:
STRING;
lpm_type:
STRING);
PORT(clock0:
INSTD_LOGIC;
address_a:
INSTD_LOGIC_VECTOR(9DOWNTO0);
q_a:
OUTSTD_LOGIC_VECTOR(9DOWNTO0));
ENDCOMPONENT;
BEGIN
q<=sub_wire0(9DOWNTO0);
altsyncram_component:
altsyncram
GENERICMAP(intended_device_family=>"Cyclone",
width_a=>10,
widthad_a=>10,
numwords_a=>1024,
operation_mode=>"ROM",
outdata_reg_a=>"UNREGISTERED",
address_aclr_a=>"NONE",
outdata_aclr_a=>"NONE",
width_byteena_a=>1,
init_file=>"./data/LUT10X10.mif",--注意,此路径由修改后获得
lpm_type=>"altsyncram")
PORTMAP(clock0=>inclock,ddress_a=>address,q_a=>sub_wire0);
ENDSYN;
【例5】32位寄存器,10位寄存器略去
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYREG32BIS
PORT(Load:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDREG32B;
ARCHITECTUREbehavOFREG32BIS
BEGIN
PROCESS(Load,DIN)
BEGIN
IFLoad'EVENTANDLoad='1'THENDOUT<=DIN;ENDIF;
ENDPROCESS;
ENDbehav;
演示操作方法参考光盘目录中的README:
●对于GWAK30板,用MaxplusII打开目录:
X:
\CYCLONE_1K30_DEMO\EP1K30_DEMO\PHASE_SHIFTOR_GWDA2C中的工程DDS_VHDL
●对于GWAC3板,用QuartusII打开目录:
X:
\CYCLONE_1K30_DEMO\EP1K30_DEMO\PHASE_SHIFTOR_GWDA2C_VHDL中的工程DDS_VHDL或
X:
\CYCLONE_1K30_DEMO\EP1K30_DEMO\PHASE_SHIFTOR_GWDA2C_MATLAB中的工程DDS_VHDL
【实验3】测相仪设计
原理:
图5是测相仪电路框图。
图5测相仪模型
首先利用实验1的等精度频率计测得占空比
K=N1/(N1+N2)
其中N1是高电平脉宽时间内的计数值,N2是低电平脉宽时间内的计数值,
图6中的模块PTEST的程序如例6所示,其功能和结构与实验1的等精度频率计完全相同,只是在原来的待测频率输入端TCLK接了一个鉴相器模块EPD,它的电路结构如图7所示。
图6测相仪电路原理图(TPAS工程)
图7相位检测原理图
图8鉴相器EPD的仿真波形
由图8可知,两路同频率不同相位的时钟信号PA和PB通过鉴相器EPD后,将输出一路具有不同占空比的脉冲波形。
其频率与输入频率相同,而占空比与PB和PA信号上升沿的时间有关。
显然EPD的脉宽等于PB和PA信号上升沿的时间差。
这个时间差即为PB、PA间的相位差。
它正号等于EPD的占空比乘以
,即:
K*
=N1/(N1+N2)
测试步骤:
1、将GWAK30或GWAC3适配板插在GWDVPB电子设计应用板上,并对其上的掉电保护器件编程配置光盘目录中如下编程文件:
A:
对GWAK30板,编程27C020,以如下工程的HEX文件编程:
X:
\GWDVPB\GWDVP_DEMO\GWDVP_T_phase1K30中的工程TPAS对应的HEX文件编程,即将图6所示电路配置进GWDVPB板上的FPGA;
B:
对GWAC3板,编程EPCS1,以如下工程的POF文件编程:
X:
\GWDVPB\GWDVP_DEMO\GWDVP_T_phase1C3中的工程TPAS对应的POF文件编程,即将图6所示电路配置进GWDVPB板上的FPGA。
2、连上接地线,两路被测信号进入GWDVPB板上的PIO16和PIO17,按键1测频率、键2测占空比、键3测鉴相后的脉冲信号的脉宽、鉴4测此两路信号的相位差。
3、为了得到两路移相信号,在GW48系统上插上对应的适配板,如实验2的操作,用示波器测出两路正弦信号,使输出峰峰值不大于4V;
4、用两接线及一地线将由GW48主系统上的两路正弦信号(严格情况下要求整形)接到GWDVPB板上的两个输入端口(PIO16/PIO17),以便测他们的频率和相差。
PTEST模块的VHDL程序示例:
【例6】PTEST模块的VHDL完整程序
LIBRARYIEEE;---
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYPTESTIS
PORT(BCLK:
INSTD_LOGIC;--标准频率时钟信号
TCLK:
INSTD_LOGIC;--待测频率时钟信号
CLR:
INSTD_LOGIC;--清零和初始化信号:
CL:
INSTD_LOGIC;--当SPUL为高电平时,CL为预置门控信号,用于测频计数时间控制
--当SPUL为低电平时,CL为测脉宽控制信号,CL高电平时测高电平脉宽
--而当CL为低电平时,测低电平脉宽。
SPUL:
INSTD_LOGIC;--测频或测脉宽控制
START:
OUTSTD_LOGIC;--
EEND:
OUTSTD_LOGIC;--由低电平变到高电平时指示脉宽计数结束,
SEL:
INSTD_LOGIC_VECTOR(2DOWNTO0);--两个32位计数器计数值分8位读出多路选择控制
DATA:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8位数据读出
ENDPTEST;
ARCHITECTUREbehavOFPTESTIS
SIGNALBZQ:
STD_LOGIC_VECTOR(31DOWNTO0);--标准计数器
SIGNALTSQ:
STD_LOGIC_VECTOR(31DOWNTO0);--测频计数器
SIGNALENA:
STD_LOGIC;--计数使能
SIGNALMA:
STD_LOGIC;
SIGNALCLK1:
STD_LOGIC;
SIGNALCLK2:
STD_LOGIC;
SIGNALCLK3:
STD_LOGIC;
SIGNALQ1:
STD_LOGIC;
SIGNALQ2:
STD_LOGIC;
SIGNALQ3:
STD_LOGIC;
SIGNALBENA:
STD_LOGIC;
SIGNALPUL:
STD_LOGIC;--脉宽计数使能
SIGNALSS:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
START<=ENA;
DATA<=BZQ(7DOWNTO0)WHENSEL="000"ELSE--标准频率计数低8位输出
BZQ(15DOWNTO8)WHENSEL="001"ELSE
BZQ(23DOWNTO16)WHENSEL="010"ELSE
BZQ(31DOWNTO24)WHENSEL="011"ELSE--标准频率计数最高8位输出
TSQ(7DOWNTO0)WHENSEL="100"ELSE--待测频率计数值最低8位输出
TSQ(15DOWNTO8)WHENSEL="101"ELSE
TSQ(23DOWNTO16)WHENSEL="110"ELSE
TSQ(31DOWNTO24)WHENSEL="111"ELSE--待测频率计数值最高8位输出
TSQ(31DOWNTO24);
BZH:
PROCESS(BCLK,CLR)--标准频率测试计数器,标准计数器
BEGIN
IFCLR='1'THENBZQ<=(OTHERS=>'0');
ELSIFBCLK'EVENTANDBCLK='1'THEN
IFBENA='1'THENBZQ<=BZQ+1;
ENDIF;
ENDIF;
ENDPROCESS;
TF:
PROCESS(TCLK,CLR,ENA)--待测频率计数器,测频计数器
BEGIN
IFCLR='1'THENTSQ<=(OTHERS=>'0');
ELSIFTCLK'EVENTANDTCLK='1'THEN
IFENA='1'THENTSQ<=TSQ+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(TCLK,CLR)--计数控制使能触发器,CL为预置门控信号,同时兼作正负脉宽测试控制信号
BEGIN
IFCLR='1'THENENA<='0';
ELSIFTCLK'EVENTANDTCLK='1'THEN
ENA<=CL;
ENDIF;
ENDPROCESS;
MA<=(TCLKANDCL)ORNOT(TCLKORCL);--测脉宽逻辑
CLK1<=NOTMA;CLK2<=MAANDQ1;CLK3<=NOTCLK2;SS<=Q2&Q3;
DD1:
PROCESS(CLK1,CLR)
BEGIN
IFCLR='1'THENQ1<='0';ELSIFCLK1'EVENTANDCLK1='1'THENQ1<='1';
ENDIF;
ENDPROCESS;
DD2:
PROCESS(CLK2,CLR)
BEGIN
IFCLR='1'THENQ2<='0';ELSIFCLK2'EVENTANDCLK2='1'THENQ2<='1';
ENDIF;
ENDPROCESS;
DD3:
PROCESS(CLK3,CLR)
BEGIN
IFCLR='1'THENQ3<='0';ELSIFCLK3'EVENTANDCLK3='1'THENQ3<='1';
ENDIF;
ENDPROCESS;
PUL<='1'WHENSS="10"ELSE--当SS=“10”时,PUL高电平,允许标准计数器计数,
'0';--禁止计数
EEND<='1'WHENSS="11"ELSE--EEND为低电平时,表示正在计数,由低电平变到高电平
'0';--时,表示计数结束,可以从标准计数器中读数据了
BENA<=ENAWHENSPUL='1'ELSE--标准计数器时钟使能控制信号,当SPUL为1时,测频率
PULWHENSPUL='0'ELSE--当SPUL为0时,测脉宽和占空比
PUL;
ENDbehav;
【实验4】逻辑分析仪设计
逻辑分析仪VHDL完整程序示例:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYRESERVIS
PORT(CLK:
INSTD_LOGIC;--采样与扫描时钟
KEY1:
INSTD_LOGIC;--采样与显示控制
TRAG:
OUTSTD_LOGIC_VECTOR(9DOWNTO0);--产生锯齿波消耗
DATAIN:
INSTD_LOGIC_VECTOR(9DOWNTO0);--8路逻辑信号输入
DOUT:
OUTSTD_LOGI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子设计 实验 补充 资料 GWDA2C