基于CPLD的三相多波形函数发生器设计
temp:=0;
end if;
end if;
adress<=temp;
end process;
3.4 模360加法器设计
此模块用来产生120°的相移,以形成三相相差为120°的输出波形。由于寻址空间为360字节,故在输出寻址数大于360时,须对360取模。程序如下:
process(adress_in)
variable temp?integer range 0 to 511;
begin
temp:=adress in+120;--相移120°
if temp<360 then;
adress out<=temp?
else
adress_out<=temp-360;--综合工具不支持取模运算,故采用减法器来实现
end if;
end process;
3.5 查找表ROM设计
此模块主要用于存储各种波形数据,以便通过寻址计数器寻址输出并经D/A转换来输出各种波形,其中包括正弦波、三角波、方波以及锯齿波。代码如下:
process(adress,sel)
begin
if sel=“00” then --sel为波形选择端口,选择输出波形,00为正弦波
case adress is
when 000=>data<=0; when 001=>data<=4; ......--正弦波查找表
when others=>null;
end case;
else if sel=“01” then --01输出方波,
if adress<180 then
data<=255;
else
data<=0;
end if;
else if sel=“10” then --锯齿波
data<=adress/2;
else --三角波
if adress<180 then
data<=adress;
else
data<=adress-180;
end if;
end if;
《基于CPLD的三相多波形函数发生器设计(第3页)》