(2)具体软件设计:
1. 分频模块FENPINQI:
系统时钟CLK经过分频器后形成64分频后输出CLK1。
entity fenpinqi is
port(clk:in std_logic;--系统时钟做输入。
clk1:out std_logic);
end;
architecture beh of fenpinqi is
signal add:std_logic_vector(12 downto 0);--定义中间累加信号量。
begin
process(clk)
begin
if clk'event and clk='1' then
if add=\"1111111111111\" then add<=\"0000000000000\";--当中间信号add累加到“1111111111111”时归零。
else add<=add+1;--每遇一个clk的上升沿则add加1。
end if;
end if;
clk1<=add(5);--取add(4)时频率高实验箱A上屏幕不能显示,取add(5)将频率再缩小一倍可以显示,取add(5)实现64分频。
end process;
end;
2. 地址生成模块DIZHI:
产生一个八位的二进制地址送给数字信号存储器,一共256个地址对应256个数字码元值。
entity dizhi3 is
port(clk:in std_logic;--经2次分频后的时钟(频率较低的)做输入。
address:out std_logic_vector(7 downto 0));
end;
architecture beh of dizhi3 is
signal add: std_logic_vector(7 downto 0); --定义中间累加信号量。
begin
process(clk)
begin
if clk'event and clk='1' then
if add=\"11111111\" then add<=\"00000000\";--当中间信号add累加到“111”时归零。
else add<=add+1; --每遇一个clk的上升沿则add加1。
end if;
end if;
address<=add;--将中间信号量的值赋给address。
end process;
end;
3. 波形存储器模块LPM_ROM:
由地址生成器产生的地址查表模拟出信号输出。例如在本程序中,在存储器中存储的是十六位二进制数字信号,则模拟出的方波形如图3-2所示(mif文件见附录):
(3)仿真时序图:
图4-2 DDS仿真时序图
因篇幅问题不能全部显示,请点此查看更多更全内容