VHDL-WAVE课程设计报告.doc_第1页
VHDL-WAVE课程设计报告.doc_第2页
VHDL-WAVE课程设计报告.doc_第3页
VHDL-WAVE课程设计报告.doc_第4页
VHDL-WAVE课程设计报告.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华南理工大学广州学院数字系统设计(VHDL)课程报告 题目:简易波形发生器 姓 名: 曾祥安 学 号: 201130085225 序 号: 1 学 院: 电子信息工程学院 班 级: 11级电信2班 指导老师: 李 欣 完成时间: 2014-01-02 简易波形发生器一、 功能及原理介绍 本课设选择了“简易波形发生器”作为课设题目。波形的产生有很多种方法,比如有DDS芯片产生波形,单片机产生波形,可编程逻辑器件产生等。FPGA是可编程门阵列,它能通过硬件描述语言如VHDL和Verilog对实体器件的功能描述实现各种功能的电路模块。从规模上说,小到可以点一盏灯,大到可以做出一个复杂的芯片内核。作为FPGA的课程设计,我当然是要选用FPGA来实现波形的产生的了。课设并没有使用实验室的实验箱作为硬件平台,而是选用了自己买的板,使用的芯片是Cyclone II的EP2C8Q208C8N。 在我的设计中,我产生了五种波形,分别是方波、三角波、减锯齿波、增锯齿波还有正弦波。其中前四种波形是直接通过编写VHDL文件来实现的,而正弦波的实现则通过LPM_ROM的方法间接产生的。LPM_ROM的方法是在Quartus ii的开发界面中按照一定的操作步骤先建立一个ROM,我设定的ROM大小为128*8Byte,即是说这个ROM能放128个字节。通过MIF maker软件生成包含128个正弦波数据点的mif文件,然后把这个文件在创建ROM的某个步骤中选中,把这些数据在生成ROM的同时也把波形数据烧写进去,于是乎ROM里面就含有了正弦波的数据了。要想产生正弦波就需要在7根地址线上通过ROM地址自增器由0000000到1111111的线性递增来实现。选中波形存储的某个单元,某个单元的数据就会被输出,于是就能达到产生正弦波的目的。除了五个波形产生的模块,还需要一个数据选择器来对五路波形有选择性地单个输出。在我的FPGA开发板上,我使用了四个拨码开关,三个用来选择波形,一个用来控制异步复位信号。二、 VHDL编程实现(1)方波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity square isport(clk,reset: in std_logic;q:out std_logic_vector(7 downto 0);end square;architecture behav of square issignal a:std_logic;beginprocess(clk,reset)variable tmp:std_logic_vector(7 downto 0);beginif reset=0thena=0;elsif rising_edge(clk) thenif tmp=11111111thentmp:=00000000;else tmp:=tmp+1;end if;if tmp=10000000thena=1;elsea=0;end if;end if;end process;process(clk,a)begin if rising_edge(clk)thenif a=1 thenq=11111111;elseq=00000000;end if;end if;end process;end behav;(2)三角波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-程序包entity triangle is-定义三角波实体port(clk,reset:in std_logic;q:out std_logic_vector(7 downto 0);end triangle;architecture behav of triangle is-定义三角波结构体beginprocess(clk,reset)-进程开始variable tmp:std_logic_vector(7 downto 0);-定义中间变量tmp、avariable a:std_logic;beginif reset=0then-复位信号设置tmp:=00000000;elsif rising_edge(clk) then-捕捉时钟信号上升沿if a=0then-a=0时依次输出三角波上升沿if tmp=11111110thentmp:=11111111;a:=1;else tmp:=tmp+1;end if;else-a=1时依次输出三角波下降沿if tmp=00000001thentmp:=00000000;a:=0;else tmp:=tmp-1;end if;end if;end if;q=tmp;-输出信号q=tmpend process;end behav;-结构体结束(3)减锯齿波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sawtooth_minus isport(clk,reset:in std_logic;q:out std_logic_vector(7 downto 0);end sawtooth_minus;architecture behav of sawtooth_minus isbeginprocess(clk,reset)variable tmp:std_logic_vector(7 downto 0);beginif reset=0thentmp:=11111111;elsif rising_edge(clk) thenif tmp=00000000thentmp:=11111111;else tmp:=tmp-1;end if;end if;q=tmp;end process;end behav;(4)增锯齿波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all; -程序包entity sawtooth_adder isport(clk,reset:in std_logic;-定义clk、reset为输入信号q:out std_logic_vector(7 downto 0);-定义q为输出信号end sawtooth_adder; -实体architecture behav of sawtooth_adder isbeginprocess(clk,reset)-定义进程variable tmp:std_logic_vector(7 downto 0);-定义变量,8位beginif reset=0then-如果复位信号为0,tmp为0tmp:=00000000;elsif rising_edge(clk) then-捕捉时钟上升沿if tmp=11111111then-如果tmp递增至最大,增归零tmp:=00000000;else -否则,tmp继续递增tmp:=tmp+1;end if;end if;q=tmp;-q等于变量tmpend process;-进程结束end behav;-结构体结束(5)正弦波(建立ROM时自动生成的VHDL)LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY ROM128_8 ISPORT(address: IN STD_LOGIC_VECTOR (6 DOWNTO 0);clken: IN STD_LOGIC := 1;clock: IN STD_LOGIC := 1;q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);END ROM128_8;ARCHITECTURE SYN OF rom128_8 ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (7 DOWNTO 0);COMPONENT altsyncramGENERIC (clock_enable_input_a: STRING;clock_enable_output_a: STRING;init_file: STRING;intended_device_family: STRING;lpm_hint: STRING;lpm_type: STRING;numwords_a: NATURAL;operation_mode: STRING;outdata_aclr_a: STRING;outdata_reg_a: STRING;ram_block_type: STRING;widthad_a: NATURAL;width_a: NATURAL;width_byteena_a: NATURAL);PORT (clocken0: IN STD_LOGIC ;clock0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (6 DOWNTO 0);q_a: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);END COMPONENT;BEGINq NORMAL,clock_enable_output_a = NORMAL,init_file = sin.mif,intended_device_family = Cyclone II,lpm_hint = ENABLE_RUNTIME_MOD=NO,lpm_type = altsyncram,numwords_a = 128,operation_mode = ROM,outdata_aclr_a = NONE,outdata_reg_a = CLOCK0,ram_block_type = M4K,widthad_a = 7,width_a = 8,width_byteena_a = 1)PORT MAP (clocken0 = clken,clock0 = clock,address_a = address,q_a = sub_wire0);END SYN;(6)5选1选择器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-程序包entity mux51 is-定义实体port(sel:in std_logic_vector(2 downto 0);-信号选择端口seld1,d2,d3,d4,d5: in std_logic_vector(7 downto 0);-d1d2d3d4分别连接四个波形发生模块q: out std_logic_vector(7 downto 0);-定义输出信号端口end mux51;architecture behav of mux51 is-结构体beginprocess(sel)begincase sel is-case when语句进行信号位的选择when 001=qqqqqnull;end case;end process;-进程结束end behav;-结构体结束(7)ROM地址自增器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all; -程序包entity sin_selfadd isport(clk:in std_logic;-定义clk、reset为输入信号add:out std_logic_vector(6 downto 0);-定义q为输出信号end sin_selfadd; -实体architecture behav of sin_selfadd isbeginprocess(clk)-定义进程variable tmp:std_logic_vector(6 downto 0);-定义变量,8位beginif rising_edge(clk) then-捕捉时钟上升沿if tmp=1111111then-如果tmp递增至最大,增归零tmp:=0000000;else -否则,tmp继续递增tmp:=tmp+1;end if;end if;add=tmp;-q等于变量tmpend process;-进程结束end behav;-结构体结束三、 仿真波形图(1) 方波 时序仿真 signalTap仿真(2) 三角波 时序仿真 signalTap仿真(3) 减锯齿波 时序仿真 signalTap仿真(4) 增锯齿波 时序仿真signalTap仿真(5) 正弦波时序仿真 signalTap仿真四、 引脚设置图五、 下载测试结果分析接通电源,烧写程序,点击signalTap仿真按钮:当拨码开关选择001时,signalTap仿真中的q0.7组输出的模拟波形是方波;当拨码开关选择010时,signalTap仿真中的q0.7组输出的模拟波形是三角波;当拨码开关选择011时,signalTap仿真中的q0.7组输出的模拟波形是减锯齿波;当拨码开关选择100时,signalTap仿真中的q0.7组输出的模拟波形是增锯齿波;当拨码开关选择001时,signalTap仿真中的q0.7组输出的模拟波形是正弦波;实验结果证明简易波形发生器工作正常,可选择性地产生5种波形。六、 心得体会这次的课程设计对自己的FPGA编程能力真的能有较大的提高,就像之前的C语言大作业一样,一个工程不是简简单单的一个小文件,而是有好几个这样的文件搭和而成的。我从“简易波形发生器”课设中发现,原来我也可以制作一个ROM,真的是很神奇的事情!我以为这些器件都是深不可测的东西,竟然用一种硬件语言就可以编出一个ROM来,对我来说真的很神奇,当然也就挑逗了我的好奇心。我在课设中使用的硬件平台不是实验室的实验箱,而是我自己买的一块FPGA开发板。买板的最大初衷就是近距离地学

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论