内容发布更新时间 : 2024/11/8 6:40:27星期一 下面是文章的全部内容请认真阅读。
华南理工大学广州学院
数字系统设计(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 is
port(clk,reset: in std_logic;
q:out std_logic_vector(7 downto 0)); end square;
architecture behav of square is signal a:std_logic; begin
process(clk,reset)
variable tmp:std_logic_vector(7 downto 0); begin
if reset='0'then a<='0';
elsif rising_edge(clk) then if tmp=\ tmp:=\ else tmp:=tmp+1; end if;
if tmp<=\ a<='1'; else
a<='0'; end if; end if; end process; process(clk,a) begin
if rising_edge(clk)then if a='1' then q<=\ else
q<=\ 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 角波结构体
--程序包 --定义三角波
--定义三