基于CPLD的三相多波形函数发生器设计
begin
if out1(16)=‘1’ then
ad<=out1(15 down to 0); --1号寄存器为幅度控制字
else
freq<=out1(15 downto 0); --0号寄
存器为频率控制字
end if;
end process mux;
end;
图3
3.2 分频比可变的分频器模块设计
该设计主要是根据频率控制字决定分频倍数,从而输出与频率控制字相对应的频率时钟,此模块的输出可作为寻址计数器的时钟。具体代码如下:
process?clk? --clk为外部时钟(如晶振)
variable temp,fen:std_logic_vector(15 down to 0);?
constant temp1:std_logic_vector(15 down to 0):=“1111111111111111”;
variable a:std_logic;
begin
fen:=temp1-fen_in; --使分频后的频率正比于频率控制字
if clk=‘1’ and clk'event then
if temp=(‘0’&fen(15 down to 1)) then --相当于除2运算
a:=not a;
temp:=temp+1;
elsif temp=fen then
a:=not a;
temp:=“0000000000000000”;
else
temp:=temp+1;
end if;
end if;
fen out<=a; --fen out 为输入时钟的频率fen倍分频
end process;
3.3 寻址计数器设计
寻址计数器主要用于产生对ROM寻址输出波形数据的寻址信号,寻址空间为360字节,具体的程序代码如下:
process(clk)
variable temp:integer range 0 to 359;
begin
if clk=‘1' and clk'event then
if temp<359 then
temp:=temp+1;
《基于CPLD的三相多波形函数发生器设计(第2页)》