3.2 产生三角波的各部分电路设计
3.2.1 频率预置与调节电路
(1) 相位累计器
相位累计器包括加法器和累加寄存器。在时钟的作用下,相位累计器不断对频率控制字进行线性相位累计。相位累计器在每一个时钟脉冲输入时,把频率控制字累加一次,相位累计器输出的数据就是合成信号的相位,相位累计器的溢出频率就是DDS输出的信号频率。
用相位累计器输出的数据作为波形存储器(ROM)的相位取样地址,这样就可把存储在ROM中的波形抽样值(二进制编码)经查找表查出,完成相位到幅值转换。
累加寄存器设计程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY leijiajicun IS
PORT(D:IN STD_LOGIC_VECTOR(11 DOWNTO 0);
CLK:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(11 DOWNTO 0));
END leijiajicun;
ARCHITECTURE ART OF leijiajicun IS
BEGIN
PROCESS(CLK)IS
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
Q<=D;
END IF;
END PROCESS;
END ARCHITECTURE ART;
仿真结果如图3.2.1.1所示:
图 3.2.1.1 累加寄存器仿真结果
我们也可以采用原理图输入法设计,原理图如下图3.2.1.2所示:
图3.2.1.2 累加寄存器原理图
在Quartus II中仿真后,结果如图所3.2.1.3示:
图3.2.1.3 累加寄存器仿真结果
从上图可以发现,虽然有一定的时延,但是该模块能实现寄存功能。
(2) 加法器
用Verilog编写累加器的程序如下,完成两路12位数据的相加:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY jiafa IS
PORT( A1: IN STD_LOGIC_VECTOR(11 DOWNTO 0);
B1: IN STD_LOGIC_VECTOR(11 DOWNTO 0);
S1: OUT STD_LOGIC_VECTOR(11 DOWNTO 0));
END jiafa;
ARCHITECTURE BEHAV OF jiafa IS
BEGIN
S1 <= A1+B1;
END BEHAV;
在Quartus II软件中仿真后,结果如图3.2.1.4示:
图3.2.1.4 加法器的Quartus II软件仿真结果
3.2.2 波形存储器
ROM,即波形存储器,存储着所要生成的三角波的所有参数。当新建Memory Initialization file后会生成一个类似Excel的表单,我们只需在每个的地址位置填上相应的数据即可。但是,手工填写很费时,最好的方法就是参照mif文件的格式,用程序或软件生成一个mif文件,比如用matlab。或者在matlab中运行完后,直接将变量y1和y2中的数据(如下图3.2.2.1所示)全部拷贝到rom中即可。matlab程序如下:
>> i=0:1/256:0.5;
>> y1=4*i-1;
>> plot(i,y1)
>> t=0.5:1/256:1;
>> y2=-4*t+3;
>> plot(t,y2)
>> y1=y1*(2^7-1);
>> y1=fix(y1);
>> y2=y2*(2^7-1);
>> y2=fix(y2);
运行后,得到参数y1和y2如下图3.2.2.1示:
图3.2.2.1 y1、y2数值
我们只需直接将变量y1和y2中的数据(图3.2.2.1所示)全部拷贝到rom中即可。生成rom模块如图3.2.2.2所示:
图3.2.2.2 ROM模块图
3.3 总体电路设计
按照DDS的基本原理图,设计得到生成三角波的总体电路模块图如图3.3.1所示:
图3.3.1 生成三角波的总体模块图
仿真结果如图3.3.2所示: 基于FPGA的多普勒滤波器设计+文献综述(5):http://www.751com.cn/tongxin/lunwen_3506.html