基于cpld的信号发生器设计
摘要:本文给出了一种采用cpld作为主控器的信号发生器设计方案。由于采用eda技术进行设计,该方案具有工作速度快,硬件体积小,可靠性高等优点。
关键词:信号发生器;vhdl ;eda ;cpld
1 引言。随着社会的发展,人们对生活的要求也逐步提高,也越来越希望在各个方面都有很大的提高,尤其是在信号方面,信号发生器作为提供测试用电信号的仪器必不可少。传统信号发生器要用模拟器件来实现,后来出现了用数字电路来设计的方案,例如采用单片机等。
eda技术的出现与可编程器件的应用改变了数字电路的设计方法。采用可编程器件进行项目开发具有费用低、开发时间短的特点,有利于新产品占领市场。本文给出了一种采用cpld作为主控部件的信号发生器设计方案,在设计输入时采用vhdl进行描述,再连入外围电路与cpld构建起整个系统。
2 系统设计。
2.1 设计要求。
信号发生器能够产生正弦波、方波、三角波,并可通过开关选择输出波形。
2.2 设计思路
根据设计要求,智能信号发生器由4部分组成,既电源模块、时钟信号发生器、主控器、d/a转换模块,系统结构如图1所示。晶体振荡器产生稳定度很高的时钟信号,在时钟信号的作用下,主控器产生频率可变的波形数据信号,经数/摸转换电路最终输出所需要的波形。
图1 系统结构框图
2.3 模块设计。
2.3.1 主控器设计。
在主控器内部也共有四个模块,既三角波模块,正弦波模块,方波模块和一个控制模块,通过编程可以分别设计这四个模块。
图3 cpld内部控制原理图。
2.3.1.1 三角波模块
三角波模块是在设计时置一变量作为工作状态标志,在此变量全为0时,当检测到时钟的上升沿时进行加同一个数操作,全为0时,进行减同一个数操作。由于a/d转换采用12位的adc7545芯片,且设64个时钟为一个三角波周期,输出每次加/减8。设计程序如下:
library ieee;
use use
entity delta is
port(clk,reset:in std_logic;
q: out std_logic_vector(7 downto 0));
end delta ;
architecture beh**e of delta is
beginprocess(clk,reset)
variable tmp: std_logic_vector(7 downto 0);
variable a: std_logic;
beginif reset=’0’then
tmp:=”00000000”;
elsif clk’event and clk=’1’then
if a=’0’ then
if tmp=”11111110”then
tmp:=”11111111”;
a:=’1’;
elsetmp:=tmp+1递增运算。
end if;
elseif tmp=”00000001”then
tmp:=”00000000”;
a:=’0’;
elsetmp:=tmp-1递减运算。
end if;
end if;
end if;
q<=tmp;
end process;
end beh**e;
2.3.1.2 正弦波模块
正弦波模块是对一个正弦波周期分为64个采样点,然后量化为8位2进制数据,最大值为255,最小值为0,由此得到正弦波表,经d/a转换得到波形。设计程序为:
library ieee;
use use
entity sin is
port(clk,clr:in std_logic;
d: out integer range 0 to 255);
end sin;
architecture beh**e of sin is
beginprocess(clk,clr)
variable tmp: integer range 0 to 63;
beginif clr=’0’then
d<=0;
elsif clk’event and clk=’1’then
if tmp=63 then一个周期取64点。
tmp:=0;
elsetmp:=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;
end case;
end if;
end process;
end beh**e;
2.3.1.3 方波模块
方波模块设计是交替送出全0和全1,并以32个延时实现,64个时钟为一个周期。设计程序为:
library ieee;
use entity square is
port(clk,clr:in std_logic;
q: out integer range 0 to 255);
end square;
architecture beh**e of square is
signal a:bit;
beginprocess(clk,clr)
variable cnt: integer ;
EDA课程设计
题目一 数字钟设计 学号1 15 一 实验目的。学习并掌握数字钟的原理 设计方法。二 实验内容。计数始终由模60秒计数器 模60分计数器 模24小时计数器 报时模块 分 时设定模块及输出显示模块构成。可以采用同步计数器或异步计数器设计方法。三 实验要求。计时范围为0小时0分0秒至23小时59分59秒...
eda课程设计
哈尔滨工业大学 威海 信电学院电子信息工程。一 软硬件介绍。1软件部分介绍。1.1 quartus ii 是altera公司的综合性pld fpga开发软件,支持原理图 vhdl veriloghdl以及ahdl altera hardware description language 等多种设计输...
eda课程设计
目录。1 引言 2 1.1 课程设计的目的与任务 2 1.2 课程设计的内容 2 1.3课程设计仪器设备 2 1.4 课程设计的题目 2 1.5 方案的选择 2 2设计方案 3 2.1 设计原理 3 2.2各功能模块的原理及其源程序 3 2.2.1控制模块 3 2.2.2分频模块 4 2.2.3计时...