三、相关模块具体程序实现
? 正斜率斜波设计模块:
process(clk,reset)is begin
if(reset='1') then tmp<=\ elsif(clk'event and clk='1') then
if(tmp<\
tmp<=tmp+'1';
--未达最大值以正斜率递增
--异步复位
else
tmp<=\
--达最大值后维持高电平
end if;
end if; Q<=tmp; end process;
? 正弦波设计模块:
DAC0832的分辨率是8位,这样,将模拟信号的正弦波在一个周期内平均分成255
份,由于已经确定每周期的取样点数为64 ,所取的值为该点对应的正弦值,可用加法计数器和译码电路完成。首先对幅度为1的正弦波的一个周期分为64个采样点,根据正弦波的函数关系计算得到每一点对应的幅度值,然后量化为8位二进制数据,最大值为255,最小值为0,以此得到正弦波波表。加法计数器生成译码电路的64个输入值,译码电路查波表输出。具体进程如下: process(clk,reset)is begin
if(reset='1') then tmp<=31;
--异步复位
--clk、reset分别为时钟和复位信号
elsif(clk'event and clk='1') then
if(tmp=63) then
tmp<=0;
else
10
tmp<=tmp+1;
end if; case tmp 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 if;
Q<=conv_std_logic_vector(d,8); end process;
11
--整形数据强制转换为8位位矢量
? 锯齿波设计模块:
锯齿波在一个周期内的波形也是线性增长的,所以锯齿波的取值可以从0递加到
最大值,再返回到0,循环实现。 process(clk,reset)is begin
if(reset='1') then tmp<=\ elsif(clk'event and clk='1') then
if(tmp<\
tmp<=tmp+'1';
--异步复位 --检测时钟上升沿
--clk、reset分别为时钟和复位信号
else
tmp<=\
--输出最大是降为零
end if;
end if; Q<=tmp;
? 方波设计模块:
由于方波的占空比是50%,且只有两个状态,所以方波的取样比较简单。即前半周
期取样点取值为低电平“00000000”,后半周期取样点取值为高电平“11111111”就可以了。通过与“11111111”异或,交替送出8位全0和全1,并给以10个时钟延时实现,20个时钟为一个周期。 process (clk,reset) is begin
if(reset='1') then tmp<=\ elsif(clk'event and clk='1') then
if(cc<9) then
cc<=cc+1;
--异步复位 --检测时钟上升沿
else
cc<=0;
end if;
if cc=9 then tmp<=tmp xor \
12
--异或取反
end if;
end if;
Q<=tmp; end process;
? 波形信号选择控制模块:
波形数据信号选择器通过设置四位选择开关,根据四位外部开关的状态,选择调
用上述设计的四种波形模块的一种或其中二者的组合。用CASE语句设计完成要求信号选择,在外接开关的控制下选择输出一种波形数据输出,或完成两种波形的线性组合。波形组合是将波形每一时刻的数值相加,为了不超出DAC0832的输出范围,做相应的除2操作 。
process (ob,si,dl,sq) is begin
tmp<=ob&si&dl&sq; case tmp is
--将四位开关并置为四位信号数组
--斜波选择 --正弦波选择 --锯齿波选择 --方波选择
when \ when \ when \ when \
when \组合波形 when \ when \ when \ when \ when \ when others=>null; end case; end process;
? 顶层模块主要部分设计:
13
1.元件定义及例化
元件定义语句在结构体说明部分进行描述如下(以选择模块元件定义为例):
component chs is
port(ob,si,dl,sq: in std_logic;
obl,sin,dlt,squ: in std_logic_vector(7 downto 0);
Q:out std_logic_vector(7 downto 0)); end component chs;
之定义元件对应的元件例化语句置于结构主体中:
u4: chs port map(ob,si,dl,sq,JJ,KK,LL,ZZ,Q);
2.进程启动DAC832: process(clk)is begin
if(clk'event and clk='1') then
if(reset='1') then wr<='1'; else wr<='0'; end if;
end if; end process;
3.信号衰减选择与衰减档位显示进程 process(tc,J,K,L,Z)is begin case tc is
--检测选择信号 --不衰减
--2倍衰减
--4倍衰减
when \
when \
LL<='0'&L(7 downto 1);ZZ<='0'&Z(7 downto 1);
when \LL<=\
14
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库任意波形信号发生器 - 图文(3)在线全文阅读。
相关推荐: