课题设计 基于FPGA的多功能波形发生器的设计
更新时间:2023-10-07 11:48:01 阅读量: 综合文库 文档下载
- 课题设计的主要内容包括推荐度:
- 相关推荐
课题实训 基于FPGA的多功能波形发生器的设计
一、实训目的
1. 懂得利用FPGA芯片实现多种波形的产生方法 2. 懂得多功能波形发生器的结构组成 3. 懂得一种复杂FPGA电路的设计 二、实训器材
1.EDA实验箱 1台 2.微型计算机 1台 3.MAX+PLUSII10.2软件 1套 4.下载电缆 1条 三、实训原理
设计一个多功能波形发生器。该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。具体要求如下:
(1)具有产生正弦波、方波、三角波、锯齿波4种周期性波形的功能。 (2)用键盘输入编辑生成上述4种波形(同周期)的线性组合波形。 (3)具有波形存储功能。
(4)输出波形的频率范围为100Hz~200kHz;重复频率可调,频率步进间隔≤100Hz。
(5)输出波形幅度范围0~5V(峰-峰值),可按步进0.1V(峰-峰值)调整。 (6)具有显示输出波形的类型、重复频率(周期)和幅度的功能。
(7)用键盘或其他输入装置产生任意波形。多功能波形发生器系统由以下四部分组成.输入部分、FPGA部分、DAC、显示部分组成。
多功能波形发生器方框图
37
四、设计程序(参考程序)
--功能:实现4种常见波形正弦、三角、锯齿、方波(A、B)的频率、幅度可控输出(方波
--A的占空比也是可控的),可以存储任意波形特征数据并能重现该波形,还可完成 --各种波形的线形叠加输出。
--说明: SSS(前三位)和SW信号控制4种常见波形种哪种波形输出。4种波形的频率、
--幅度(基准幅度A)的调节均是通过up、down、set按键和4个BCD码置入器以及一
--个置入档位控制信号(ss)完成的(AMP的调节范围是0~5V,调节量阶为1/51V)。 --其中方波的幅度还可通过u0、d0调节输出数据的归一化幅值(AMP0)进行进一步
--细调(调节量阶为1/(51*255)V)。方波A的占空比通过zu、zp按键调节(调节
--量阶1/64*T)。系统采用内部存储器——RAM实现任意输入波形的存储,程序只支
--持键盘式波形特征参数置入存储,posting 为进入任意波置入(set)、清除(clr)状态
--控制信号,SSS控制存储波形的输出。P180为预留端口, --最后修改日期:2004.3.26。 library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity mine4 is
port(clk : in std_logic; --时钟信号输入
set, clr, up, down, zu, zd : in std_logic; --各个波形特征的调节触发信号
posting : in std_logic; --任意波键盘置入信号 u0,d0,sw : in std_logic; --方波A、B的切换sw,和方波B的幅度调节按键
ss : in std_logic_vector( 3 downto 0 ); --档位选择信号 sss : in std_logic_vector( 4 downto 0 ); --波形选择信号 Data3, Data2, Data1,Data0 : in std_logic_vector(3 downto 0); --BCD码输入 p180 : out std_logic; --预留接口 lcd : out std_logic_vector(7 downto 0); --显示输出
38
shift : out std_logic_vector(3 downto 0); --位码输出
dd, a : out std_logic_vector( 7 downto 0)); --波形、幅度数据输出
end mine4;
architecture behav of mine4 is
subtype word is std_logic_vector( 7 downto 0 ); type unit is array(63 downto 0) of word; signal ram : unit;
signal qqq : integer range 0 to 250000000; signal qq : integer range 0 to 78125000; signal tmp : integer range 0 to 9999;
signal coun : integer range 0 to 78125000; signal coun0 : integer range 0 to 250000000; signal b : integer range 0 to 78125000; signal c : integer range 0 to 500000000; signal z, con : integer range 0 to 63; signal f : std_logic_vector( 7 downto 0 );
signal amp, amp0, d : std_logic_vector(7 downto 0); signal bcd0,bcd1,bcd2,bcd3 : integer range 0 to 9; signal bcd01,bcd11,bcd21,bcd31 : integer range 0 to 9; signal bcd00,bcd10,bcd20,bcd30 : integer range 0 to 9; signal y : integer range 0 to 9; signal addr : integer range 0 to 63; begin
qq<=781250 when ss=\ 7812500 when ss=\ 78125000 when ss=\ 78125;
--qq信号对应SW=0时的档位选择信号SS,实现方波A和其他三种波形的频率预置
qqq<= 500000 when ss=\ 5000000 when ss=\ 50000000 when ss=\
50000;
--qqq信号对应SW=1时的档位选择信号SS,实现方波B的频率预
置
process(clk)
--此进程分别描述了各种波形的频率、幅度(方波A的占空比)调节以及各种波形的任意
39
线
--形叠加等。
variable count4 : integer range 0 to 6250000; variable count : integer range 0 to 78125000; variable count3 : integer range 0 to 250000000; variable count1 : integer range 0 to 12500000; variable count0 : integer range 0 to 3249999; variable ddd : std_logic_vector(9 downto 0);
variable dd0,dd1,dd2,dd3,dd4 : integer range 0 to 255; variable adr : integer range 0 to 63; begin
if rising_edge(clk) then
if posting='1' then if count4=6249999 then count4:=0;
adr:=conv_integer(Data3)*10+conv_integer(Data2);--存储单位地址
if adr<64 then
if set='1' then ram(adr)<=conv_std_logic_vector((conv_integer(Data1)*10
+conv_integer(Data0))*2,8); --对置入的任意波形数据进行储
存 elsif clr='1' then adr:=0; --存储器所有单元清零 for i in 0 to 63 loop ram(i)<=(others=>'0'); end loop; end if; end if;
else count4:=count4+1; end if; else
if set='1' then coun<=0; b<=0; coun0<=0;c<=0;z<=31;amp0<=\
tmp<=conv_integer(Data3)*1000+conv_integer(Data2)*100
+conv_integer(Data1)*10+conv_integer(Data0); --频率数据
amp<=\ --幅值
else
if tmp>0 then if sw='0' then
if coun else 40 if count=b then count:=1; if f=63 then f<=\ else f<=f+1; end if; if sss=\ --方波A if con<=z then dd<=amp0; con<=con+1; elsif con=63 then con<=0; dd<=\ else con<=con+1; dd<=\ end if; dd0 elsif sss=\ --正弦波 elsif sss=\ --锯齿波 elsif sss=\三角波 if f>31 then dd<=(\ else dd<=f(5 downto 0)&\ end if; elsif sss=\ --任意波 if addr<63 then dd<=ram(addr); addr<=addr+1; elsif addr=63 then dd<=ram(63); addr<=0; end if; else --完成5种波形的线形叠加 if sss(1)='1' then if con<=z then con<=con+1; dd0:=conv_integer(amp0); --方波波形数据 else con<=con+1; dd0:=0; end if; end if; if sss(4)='1' then dd1:=conv_integer(d); --正弦波波形数据dd1 end if; if sss(2)='1' then dd2:=conv_integer(f(5 downto 0)&\ --锯齿波波形数据dd2 end if; if sss(3)='1' then if f>31 then dd3:=conv_integer((\ else dd3:=conv_integer(f(5 downto 0)&\三角波波形数据dd3 end if; end if; if sss(0)='1' then if addr<63 then dd4:=conv_integer(ram(addr)); addr<=addr+1; 41
正在阅读:
以沟通为话题的作文600字02-05
新休假制度05-07
江西师大附中、临川一中2013届高三12月联考理科数学试卷10-01
速卖通考试2015 08 1205-30
又是一年春来到作文600字07-01
充满希望的词语02-21
我的车迷爸爸作文600字06-29
蒲公英成长记作文600字07-16
乡村见闻作文500字07-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 设计
- 波形
- 发生器
- 课题
- 多功能
- 基于
- FPGA