基于FPGA的直接数字(3)

2019-03-22 11:35

青岛大学本科生毕业论文(设计) 系统电路的原理及设计

Quartus II软件是Altera公司新一代PLD开发软件,适合大规模FPGA的开发,支持Altera最新的FPGA和CPLD,其向导界面如图2.2所示,Quartus II软件用来进行所有新的设计。MAX+PLUS II 软件适用于已经做过的设计,对于新设计不推荐使用。Quartus II软件目前包括一个MAX+PLUS II用户界面设置,用户能够轻松的从MAX+PLUS II软件转换到Quartus II。

Quartus II是本设计所应用的核心工具,提供从设计输入到器件编程的全部功能,用来完成DDS的核心部分的设计与仿真,支持Altera最新的FPGA和CPLD和几乎所有老的器件系列[5]。Quartus II可以产生并识别EDIF网表文件、VHDL网表文件和Verilog HDL网表文件,为其他EDA工具提供了方便的接口;可以在Quartus II集成环境中自动运行其他EDA工具。

利用Quartus II软件的开发流程可概括为以下几步,如图2.3所示: ① 设计输入

设计输入包括使用硬件描述语言HDL、状态图与原理图输入三种方式。HDL设计方式是现今设计大规模数字集成电路的良好形式,除IEEE标准中VHDL与Verilog HDL两种形式外,尚有各自FPGA厂家推出的专用语言,如Quartus下的AHDL。

通常,FPGA厂商软件与第三方软件设有接口,可以把第三方设计文件导入进行处理。如Quartus与Foundation都可以把EDIF网表作为输入网表而直接进行布局布线,布局布线后,可再将生成的相应文件交给第三方进行后续处理。

② 设计综合

综合,就是针对给定的电路实现功能和实现此电路的约束条件,如速度、功耗、成本及电路类型等,通过计算机进行优化处理,获得一个能满足上述要求的电路设计方案。也就是是说,被综合的文件是HDL文件(或相应文件等),综合的依据是逻辑设计的描述和各种约束条件,综合的结果则是一个硬件电路的实现方案,该方案必须同时满足预期的功能和约束条件。对于综合来说,满足要求的方案可能有多个,综合器将产生一个最优的或接近最优的结果。因此,综合的过程也就是设计目标的优化过程,最后获得的结构与综合器的工作性能有关。

③ 仿真验证

从广义上讲,设计验证包括功能与时序仿真和电路验证。仿真是指使用设计软件包对

输入原理图/VHDL代码 设计综合 行为仿真 验证 功能仿真及 波形分析 编程下载/配置 和硬件测试 时序分析 FPGA配置 转换映射

图2.3 Quartus II软件设计开发流程图

8

青岛大学本科生毕业论文(设计) 系统电路的原理及设计

已实现的设计进行完整测试,模拟实际物理环境下的工作情况。前仿真是指仅对逻辑功能进行测试模拟,以了解其实现的功能否满足原设计的要求,仿真过程没有加入时序信息,不涉及具体器件的硬件特性,如延时特性;而在布局布线后,提取有关的器件延迟、连线延时等时序参数,并在此基础上进行的仿真称为后仿真,它是接近真实器件运行的仿真。

④ 设计实现

实现可理解为利用实现工具把逻辑映射到目标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输入输出功能连接的布线通道进行连线,并产生相应文件(如配置文件与相关报告)。

在实现过程中可以进行选项设置。因其支持增量设计,可以使其重复多次布线,且每次布线利用上一次布线信息以使布线更优或达到设计目标。在实现过程中应设置默认配置的下载形式,以使后续位流下载正常。

⑤ 时序分析

在设计实现过程中,在映射后需要对一个设计的实际功能块的延时和估计的布线延时进行时序分析;而在布局布线后,也要对实际布局布线的功能块延时和实际布线延时进行静态时序分析。从某种程序来讲,静态时序分析可以说是整个FPGA设计中最重要的步骤,它允许设计者详尽地分析所有关键路径并得出一个有次序的报告,而且报告中含有其它调试信息,比如每个网络节点的扇出或容性负载等。静态时序分析器可以用来检查设计的逻辑和时序,以便计算各性能,识别可靠的踪迹,检测建立和保持时间的配合,时序分析器不要求用户产生输入激励或测试矢量。

⑥ 下载验证

下载是在功能仿真与时序仿真正确的前提下,将综合后形成的位流下载到具体的FPGA芯片中,也叫芯片配置。FPGA设计有两种配置形式:直接由计算机经过专用下载电缆进行配置;由外围配置芯片进行上电时自动配置。[6]

将位流文件下载到FPGA器件内部后进行实际器件的物理测试即为电路验证,当得到正确的验证结果后就证明了设计的正确性。电路验证对FPGA投片生产具有较大意义。

基本DDS结构的VHDL描述如下:

-- DDSC: DDS主模块 library IEEE;

use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; use ieee.std_logic_arith.all;

entity ddsc is -- DDS主模块

generic( freq_width : integer := 8; -- 输入频率字位宽

adder_width : integer := 8; -- 累加器位宽

romad_width : integer := 8; -- 正弦ROM表地址位宽 rom_d_width : integer := 8); -- 正弦ROM表数据位宽 port( clk: in std_logic; -- DDS合成时钟

9

青岛大学本科生毕业论文(设计) 系统电路的原理及设计

freqin: in std_logic_vector (freq_width-1 downto 0);

-- 频率字输入

ddsout: out std_logic_vector(rom_d_width-1 downto 0));

-- DDS输出

end entity ddsc;

architecture behave of ddsc is

signal acc : std_logic_vector(adder_width-1 downto 0); signal romaddr : std_logic_vector(romad_width-1 downto 0); signal freqw : std_logic_vector(freq_width-1 downto 0); begin process (clk) begin

if(clk'event and clk = '1') then

freqw <= freqin;

-- 频率字输入同步

acc <= acc + freqw;

-- 相位累加器

end if; end process;

romaddr <=acc(adder_width-1 downto 0); -- sinrom

sim_rom : lpm_rom -- LPM_rom调用 generic map (lpm_width => rom_d_width,

lpm_widthad => romad_width,

lpm_address_control => \lpm_outdate => \

lpm_file => \ ) --指向rom文件 PORT MAP ( outclock => clk,address => romaddr,q => ddsout ); end architecture behave;

这段程序中的正弦ROM查找表是采用了Altera的LPM_ROM模块,所以该程序必须在Altera含有EAB(嵌入式阵列块)的器件上使用,如FLEX10K系列,也可以经过适当的转化,在其他FPGA上实现时,使用其他FPGA厂家的ROM模块。

“sin_rom.mif”是正弦ROM中的值,放置幅度-相位的查表值。

在上面的程序中大量使用了generic语句,是为了便于在DDS主模块调用时更改设计,并放大使VHDL程序便于阅读。

在Quartus II 编译环境中,设计的累加器模块如图2.4所示。

10

青岛大学本科生毕业论文(设计) 系统电路的原理及设计

Parameteradder_widthromad_widthrom_d_widthddscclksel[3..0]ddsout[rom_d_width-1..0]ledout[3..0]Value888inst 图2.4 相位累加器模块

下面给出一个实际的正弦信号发生器的源程序,调用了DDS主模块。

-- 简易频率合成器

-- DDS(10bit频率字,1024 points 10bit out) library ieee;

use ieee.std_logic_1164.all; entity ddsall is

port( sysclk : in std_logic; -- 系统时钟

ddsout : out std_logic_vector(9 downto 0);-- DDS输出 fpin : in std_logic_vector(9 downto 0)); end ddsall;

architecture behave of ddsall is

component ddsc is

generic( freq_width : integer := 10; -- 输入频率字位宽

adder_width : integer := 10; -- 累加器位宽

romad_width : integer := 10; -- 正弦ROM表地址位宽 port(clk:in std_logic; -- DDS合成时钟 freqin:in std_logic_vector(freq_width-1 downto 0); -- 频率字输入 ddsout:out std_logic_vector(rom_d_width-1 downto 0));-- DDS输出

end component ddsc;

signal clk : std_logic;

signal freqind : std_logic_vector(9 downto 0); -- 频率字 begin

i_ddsc : ddsc -- 例化DDSC

port map(clk => clk,ddsout => ddsout,freqin => freqind); clk <= sysclk;

process(sysclk)

begin

if(sysclk'event and sysclk = '1') then

freqind(9 downto 0) <= fpin;

11

青岛大学本科生毕业论文(设计) 系统电路的原理及设计

end if; end process; end behave;

2.2.2 基于FPGA的 ROM查找表

FPGA的结构是由基于半定制门陈列的设计思想而得到的。从本质上讲, FPGA是一种比半定制还方便的ASIC 设计技术。FPGA的结构主要分为三部分: 可编程逻辑块、可编程IO 模块、可编程内部连线。

查找表型FPGA的可编程逻辑单元是由功能为查找表的SRAM构成逻辑函数发生器, 实现与其它功能块的可编程连接。在此,选用ACEX1K系列EP1K30TC-144的FPGA作为目标芯片。EP1K30芯片属于Altera公司的ACEX系列,采用0.18微米混合工艺,密度达100 000门,兼容64bit,66MHz的PCI,并支持锁相环电路。ACEX1K采用查找表(LUT)和嵌入式阵列块(EAB)想结合的结合的结构,可用来实现存储器、专用逻辑功能和通用逻辑功能,每个EAB能提供4 096比特的存储空间,每个LE包含四个输入LUT、一个可编程的触发器、进位链和一个层叠链。合理运用进位链能够提高系统运行速度。EP1K30TC-144的最大系统门数为119 000,它有1 728个逻辑宏单元和五个嵌入式阵列块,最大可提供2Kbde ROM/RAM位,因而可完全满足DDS的设计要求。另外Altera还在它们公司的VHDL设计平台Quartus II上提供了LPM ROM核,利用MAX+PLUS综合可以自动编译包含LPM ROM元件的文件, 在ACEX1K的EAB上产生ROM功能。本设计利用LPM ROM核预置正弦查找表在FPGA上[4]。

在Quartus II中自定义ROM模块,如下图2.5所示

图2.5 自定义ROM查找表模块

设定ROM的输入宽度,输出宽度,本设计均为8位。 配置查找表文件sin_rom.mif,如下图2.6所示

12


基于FPGA的直接数字(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2008年全国中考数学压轴题精选1--6

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: