EDA课程设计DDS信号源文档格式.docx
《EDA课程设计DDS信号源文档格式.docx》由会员分享,可在线阅读,更多相关《EDA课程设计DDS信号源文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
四.总体设计方案
函数信号发生器主要由波形选择部分,波形发生部分和输出部分组成,其硬件结构图如下图。
五.电路图
六.单元电路设计
一.频率控制模块
代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYFREQUENCYIS
PORT(CLK:
INSTD_LOGIC;
A:
INSTD_LOGIC_VECTOR(4DOWNTO0);
--设置A的初值
FOUT:
OUTSTD_LOGIC);
END;
ARCHITECTUREoneOFFREQUENCYIS
SIGNALFULL:
STD_LOGIC;
BEGIN
P_REG:
PROCESS(CLK)
VARIABLECNT1:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
IFCLK'
EVENTANDCLK='
1'
THEN
IFCNT1="
11111"
THEN
CNT1:
=A;
--当CNT1计数计满时,输入数据D被同步预置给计数器CNT1
FULL<
='
;
--同时使溢出标志信号FULL输出为高电平
ELSECNT1:
=CNT1+1;
--否则继续作加1计数
0'
--且输出溢出标志信号FULL为低电平
ENDIF;
ENDPROCESSP_REG;
P_DIV:
PROCESS(FULL)
VARIABLECNT2:
IFFULL'
EVENTANDFULL='
CNT2:
=NOTCNT2;
--如果溢出标志信号FULL为高电平,D触发器输出取反
IFCNT2='
THENFOUT<
ELSEFOUT<
ENDPROCESSP_DIV;
模块元件图
二.按键选择模块
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYBUTTONIS
PORT(d:
INSTD_LOGIC_VECTOR(2DOWNTO0);
a,b,c:
OUTSTD_LOGIC);
ARCHITECTUREONEOFBUTTONIS
BEGIN
PROCESS(d)
CASEdIS
WHEN"
000"
=>
NULL;
WHENOTHERS=>
a<
=d(0);
--dlt
b<
=d
(1);
--sqr
c<
=d
(2);
--sin
ENDCASE;
ENDPROCESS;
END;
模块元件图
三.三角波信号产生模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitydeltais
port(clk:
instd_logic;
clr:
instd_logic;
q:
outstd_logic_vector(7downto0));
enddelta;
architectureoneofdeltais
begin
process(clk,clr)
variablenum:
std_logic_vector(7downto0);
variableff:
std_logic;
ifclr='
then
num:
="
00000000"
elseifclk'
eventandclk='
then--时钟信号有上升沿时有效
ifff='
ifnum="
11111000"
ff:
='
else
=num+8;
endif;
--以上,ff=0时,上升,直至num加到11111000时,使ff=1
00000111"
=num-8;
--以上,ff=1时,下降,直至num减到00000111时,使ff=0
q<
=num;
--每一次脉冲,将num的值给q以输出
endprocess;
end;
四.方波信号产生模块
entityaquareis
endaquare;
architectureoneofaquareis
signalff:
bit;
p1:
std_logic_vector(5downto0);
ff<
then--当时钟脉冲有一个上升沿
ifnum<
31then
=num+1;
000000"
=notff;
--num每次加1,加32次ff取反1次
endprocessp1;
p2:
process(clk,ff)
begin
ifclk'
11111111"
--ff=1时输出高电平
--ff=0时输出低电平
endprocessp2;
五.正弦波信号产生模块
entitysinis
--正弦信号的相位
d:
--正弦函数值
end;
architectureoneofsinis--结构体开始
process(clk,clr)
d<
111111"
--每加到111111时清零
casenumis--四个输入,共有16总相位可能360/64=5.625
when"
=CONV_STD_LOGIC_VECTOR(128,8);
--每5.625取一个点
000001"
=CONV_STD_LOGIC_VECTOR(141,8);
--共64个点
000010"
=CONV_STD_LOGIC_VECTOR(153,8);
000011"
=CONV_STD_LOGIC_VECTOR(165,8);
000100"
=CONV_STD_LOGIC_VECTOR(177,8);
000101"
=CONV_STD_LOGIC_VECTOR(188,8);
000110"
=CONV_STD_LOGIC_VECTOR(199,8);
000111"
=CONV_STD_LOGIC_VECTOR(209,8);
001000"
=CONV_STD_LOGIC_VECTOR(218,8);
001001"
=CONV_STD_LOGIC_VECTOR(227,8);
001010"
=CONV_STD_LOGIC_VECTOR(234,8);
001011"
=CONV_STD_LOGIC_VECTOR(240,8);
001100"
=CONV_STD_LOGIC_VECTOR(246,8);
001101"
=CONV_STD_LOGIC_VECTOR(250,8);
001110"
=CONV_STD_LOGIC_VECTOR(253,8);
when"
001111"
=CONV_STD_LOGIC_VECTOR(254,8);
010000"
=CONV_STD_LOGIC_VECTOR(255,8);
010001"
010010"
010011"
010100"
010101"
010110"
010111"
011000"
011001"
011010"
011011"
011100"
011101"
011110"
011111"
100000"
100001"
=CONV_STD_LOGIC_VECTOR(115,8);
100010"
=CONV_STD_LOGIC_VECTOR(103,8);
100011"
=CONV_STD_LOGIC_VECTOR(91,8);
100100"
=CONV_STD_LOGIC_VECTOR(79,8);
100101"
=CONV_STD_LOGIC_VECTOR(68,8);
100110"
=CONV_STD_LOGIC_VECTOR(57,8);
100111"
=CONV_STD_LOGIC_VECTOR(47,8);
101000"
=CONV_STD_LOGIC_VECTOR(38,8);
101001"
=CONV_STD_LOGIC_VECTOR(29,8);
101010"
=CONV_STD_LOGIC_VECTOR(22,8);
101011"
=CONV_STD_LOGIC_VECTOR(16,8);
101100"
=CONV_STD_LOGIC_VECTOR(10,8);
101101"
=CONV_STD_LOGIC_VECTOR(6,8);
101110"
=CONV_STD_LOGIC_VECTOR(3,8);
101111"
=CONV_STD_LOGIC_VECTOR(1,8);
110000"
=CONV_STD_LOGIC_VECTOR(0,8);
110001"
110010"
110011"
110100"
110101"
110110"
110111"
111000"
111001"
111010"
111011"
111100"
111101"
111110"
whenothers=>
null;
endcase;
endprocess;
六.波形选择器
entitychangeris
port(dlt,sqr,sin:
dltd,sqrd,sind:
instd_logic_vector(7downto0);
endchanger;
architectureoneofchangeris
process(dlt,dltd,sqr,sqrd,sin,sind)
variabletemp:
std_logic_vector(2downto0);
--variablea,b:
std_logic_vector(9downto0);
--variablec,d,e:
temp:
=dlt&
sqr&
sin;
casetempis
100"
=dltd;
--a00输出三角波
010"
=sqrd;
--0b0输出方波
001"
=sind;
--00c输出正弦波
null;
endcase;
七.实验调试结果
三角波波形
方波波形
正弦波波形
八.实验总结
从仿真及实验结果可以看出,本设计较好地满足了设计要求。
同时,由于采用模块化的设计方法,系统中的各个电路均可独立实现各自的功能从而使系统具有较强的可移植性和维护性,这也为系统的功能扩展和升级提供了很大的便利。