摘要: 在FPGA(现场可编程门阵列)的使用中,要将VHDL(甚高速集成电路硬件描述语言)编写的程序配置到EAB(嵌入式阵列块)单元中,会遇到许多问题,配置很难成功。根据配置EAB的经验,详细介绍了正确配置EAB的方法。
0 引言
FLEX10K器件是工业界第一个嵌入式的PLD(可编程逻辑器件),由于其具有高密度、低成本、低功率等特点,成为当今Altera PLD中应用广泛的器件系列。FLEX10K器件主要由EAB(嵌入式阵列块)、LAB(逻辑阵列块)、快速通道线和I/O单元4部分组成。设计输入(图形或VHDL(甚高速集成电路硬件描述语言)等)经过编译后产生的数据格式(网表),大多配置到LAB中。在很多时候,为了提高设计效率、减少LAB的占用等,希望将设计配置到EAB中。要将设计配置到EAB中是一个较为复杂的过程,在这个过程中必须遵守一定的规则,同时,又要对设计的状态、输入、输出
及信号的传递等进行全面分析。根据对EAB配置的经验,本文将详细介绍在MAX+Plus II 9.5编译环境中利用VHDL程序配置EAB的要求及过程。
1 EAB单元的结构特点
EAB单元是在FLEX10系列FPGA(现场可编程门阵列)内部嵌入一些随机存储单元块,这些随机单元块在一定程度上根据电路设计的不同要求,比较灵活地改变电路结构和接口信息,例如可以实现乘法器、RAM、ROM和FIFO等功能。其内部结构见图1。
每个EAB单元主要包括数据区、总线和读写控制等,其中数据区是EAB的核心。每个EAB单元包含2048 bit的RAM/ROM,可以根据数据线/地址线的不同设置将其调整为1024×2bit、5 12×4bit和256×8 bit。对EAB配置时,总线的位数、读写的控制及RAM/ROM的大小,在MAX+Plus II 9.5中是根据用户的设计,自动调用系统中的两个参数化的宏函数(IMPL_eab,altrom)来实现的。换句话说,利用VHDL语言设计的程序要配置到EAB中,在设计上必须满足两个参数化的宏函数(IMPL_eab,altrom)的参数要求。
2 EAB单元的配置
将设计配置到EAB单元中,分为两种方式:一种是将设计中调用的标准元件配置到EBA单元中;另一种是将VHDL编写的程序作为一个独立的单元配置到EAB中。前一种方式比较简单,只需要根据菜单命令的要求做适当的设置就可以;后一种方式比较复杂,与不配置到EAB单元中的程序设计相比,在设计中增加了许多要求,在下面的分析中将能够体会到。
2.1 标准元件配置到EBA单元中的方法
实现标准元件对EAB的配置比较简单,其基本过程是:
a)在设计的层次结构中,选择要配置的模块单元(元件);
b)在菜单Assign中选择Logic Option命令,打开其对话框;
c)在对话框中选择Individuai Logic Options选项,在对话框中选择Impiement in EAB选项,点击OK,回到Logic Option对话框中,在Existing Logic Option Assignments框中显示Impiement in EAB=ON,点击OK,重新对设计编译,选定的标准元件模块被配置到EAB单元中。
2.2 VHDL程序设计配置到EBA单元中的方法
首先,分析一个4位计数器的VHDL程序设计,设计的程序代码如下:
library ieee;
use ieee.std_logic_1164.all;
package mytype is
subtype statej is std_logic_vector(1 downto 0);
constant jish0:statej:="00";
constant jishl:statej: "01";
constant jish2:statej:="10";
constant jish3:statej:="11";
end mytype;
library ieee;
use ieee.std_logic_1164 .all:
use work.mytype.all;
entity jish is
pert(
clk:in std_logic;
out1:out std_logic_vector(1 downto 0));
end jish;
architecture shu of jish is
signal present:statej;
begin
if(clk'event and clk=1)then
case present is
whenjish0=>
present<=jishl;
out1<="00":
whenjishl=>
present<=jish2;
out1<="01";
when jish2=>
present<=jish3;
out1<="10";
when jish3=>
present<=jishO;
out1<="11";
when others=>present<=jish0;
out1<= "00";
end case;
end if;
end process;
end shu;
该4位计数器的VHDL 程序代码配置到FLEX10K10LC84中,占据了4个LAB单元,如图3所示,它不能配置到EAB单元中去。
为了将该段VHDL代码配置到EAB单元中去,需要对程序代码进行改写。在改写过程中需要遵循以下3个基本原则:
将配置到EAB中的设计作为一个独立的模块;
采用层次化设计的方法,其中需配置到EAB单元中的模块作为低层,设计一个顶层结构实现对它调用;
在整个设计中需要建立一个从低层到顶层的反馈路径。
根据这3个原则对上述程序代码中的设计进行改写,使其能配置到EAB单元中去。
a)独立模块的建立。就是使模块具有完全的输入输出。在上述程序代码所示的4位计数器的VHDL程序设计中,从输入来看,状态机有4个状态,需要2bit输入,它构成了模块的输入;从输出来看,由状态机的2 bit输出和OUT1组成模块的输出。上述程序代码改写后的程序代码如下:
library ieee;
use ieee.std_logic_1164.all;
package mytype is
subtype statej is std_logic_vector(1 downto 0);
constant jish0:statej:="O0";
constant jishl:statej:="0l";
constant jish2:statej:="10";
constant jish3:statej:="11";
end mytype ;
library ieee;
use ieee.std_logic_1164 .all;
use work.mytype.all;
entity jishu is
port(
clk:in std_logic;
present:in statej;
next1:out statej;
out1:out std_logic_vector(1 downto 0));
end jishu;
architecture shu of jishu is
begin
process(clk,present)
begin
if(clk'event and clk=1) then
case present is
whenjishO=>
next1<=jish1;
out1<= "O0":
whenjish1=>
next1<=jish2;
out1<="01":
whenjish2=>
next1<=jish3;
out1<= "10"
when jish3=>
next1<=jishO;
out1<="11":
when others=>next1<=jish0;
out1<= "00";
end case;
end if;
end process;
end shu;
b)顶层文件的设计,主要实现对底层模块(4位计数器)的调用,同时建立反馈路径。其程序代码如下:
library ieee;
use ieee.std_logic_1164.all;
use work.mytype.all
entity jishueab is
port(
clk:in std_logic;
out1:out std_logic_vector(1 downto 0));
end jishueab;
architecture shueab of jishueab is
component jishu
port(
clk:in std_logic;
present:in statej;
nextl:out statej;
outl:out std_logic_vector(1 downto 0));
end component;
signal present1,next2: statej;
begin
present1<=next2:
u1:jishu port map(clk=>,present=>present1,nextl=>next2,out1=>out1);
end shueab;
c)EAB单元的配置。建立了独立模块(元件)和设计了顶层文件,并对顶层文件编译之后,程序代码是不会自动配置到EAB单元中的。为了将4位计数器的VHDL程序设计配置到EAB单元中,还需要标准元件配置到EBA单元中的方法设置配置过程。4位计数器的VHDL程序设计配置到FLEX10K10LC84的EAB单元中的情况如图4所示。
为了实现其他VHDL设计配置到EAB单元中,可以通过上述例子举一反三,完成对EAB单元的配置。
3 结束语
对EAB的使用不只局限在存储功能上,它可以用简单的单级逻辑实现函数的功能,因此具有更高的器件效率和更好的性能。许多复杂的功能都能在一个EAB中实现,占用的器件面积更小,并且比逻辑单元的实现延时更短、速度更快。当然,在设计中应该权衡EAB与LAB的利弊,合理地选择设计方法。
文章评论(0条评论)
登录后参与讨论