本帖最后由 MAMAM 于 2012-8-27 15:49 编辑
--文件名:TLC7524.VHD
--功能:产生156.25KHz的正弦波。
library ieee;
use ieee.std_logic_arith.all;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity TLC7524 is
port( clk :in std_logic; --系统时钟
rst :in std_logic; --复位信号
data_out : out std_logic_vector(7 downto 0)); --波形数据
end TLC7524;
architecture behav of TLC7524 is
signal b:integer range 0 to 63; --地址计数器
signal q:integer range 0 to 4; --计数器
signal d:integer range 0 to 255; --波形数据寄存器
begin
process(clk) --此进程通过对系统时钟的分频,完成的地址计数器的循环计数
begin
if rst='1' then b<=0; --复位时,对地址寄存器清零
elsif clk'event and clk='1' then
if q=4 then q<=0; --此IF语句完成对系统时钟的5分频
if b=63 then b<=0; --此IF语句完成对地址的循环计数
else b<=b+1;
end if;
else q<=q+1;
end if;
end if;
end process;
process(b) --此进程存储了正弦波64个采样点的波形数据
begin
case b is
when 00=> d<=255; when 01=> d<=254;when 02=> d<=252;when 03=> d<=249;
when 04=> d<=245; when 05=> d<=239;when 06=> d<=233;when 07=> d<=225;
when 08=> d<=217; when 09=> d<=207;when 10=> d<=197;when 11=> d<=186;
when 12=> d<=174; when 13=> d<=162;when 14=> d<=150;when 15=> d<=137;
when 16=> d<=124; when 17=> d<=112;when 18=> d<= 99;when 19=> d<= 87;
when 20=> d<= 75; when 21=> d<= 64;when 22=> d<= 53;when 23=> d<= 43;
when 24=> d<= 34; when 25=> d<= 26;when 26=> d<= 19;when 27=> d<= 13;
when 28=> d<=8; when 29=> d<=4 ;when 30=> d<=1;when 31=> d<=0;
when 32=> d<=0; when 33=> d<=1;when 34=> d<=4;when 35=> d<=8;
when 36=> d<= 13; when 37=> d<= 19;when 38=> d<= 26;when 39=> d<= 34;
when 40=> d<= 43; when 41=> d<= 53;when 42=> d<= 64;when 43=> d<= 75;
when 44=> d<= 87; when 45=> d<= 99;when 46=> d<=112;when 47=> d<=124;
when 48=> d<=137; when 49=> d<=150;when 50=> d<=162;when 51=> d<=174;
when 52=> d<=186; when 53=> d<=197;when 54=> d<=207;when 55=> d<=217;
when 56=> d<=225; when 57=> d<=233;when 58=> d<=239;when 59=> d<=245;
when 60=> d<=249; when 61=> d<=252;when 62=> d<=254;when 63=> d<=255;
when others=> null;
end case;
end process;
data_out<=conv_std_logic_vector(d,8); --正弦波波形数据输出
end behav;
.
|