一、lpm_fifo的使用方法
1、建立.mif格式文件
首先在Quartus II中打开ROM数据文件的编辑窗口,即:File——New命令。并在New窗口中选择Memory Initialization File选项,单击OK按钮后产生ROM数据文件的选项窗口如图1-1.完成后,选择File-Save As命令,保存此数据文件,在这里可取名为fifod.Mif。
1-1a
1-1b
图1-1
2、制定lpm_fifo元件的制定
打开Mega WizardPlug-In Manager初始化对话框。选择Tools——Mega Wizard Plug-In Manager命令,打开如图1-2a的对话框
1
图1-2a
如图选择Cerate a......选项,单击next,制定一个新的模块。如图1—2b
图1-2b
3、选择ROM控制线、地址线和数据线。
在Memory Compiler下的FIFO,一路单击next,如图1-3a,1-3b,1-3c,1-3d,1-3e,1-3f,1-3g,1-3h。
2
1-3a
3
1-3b
4
1-3c
5
1-3d
6
1-3e
7
1-3f
8
1-3g
1-3h
4、单击YES,最后生成的ROM_FIFO文件如下所示:
LIBRARY ieee;
USE ieee.std_logic_11.all;
9
LIBRARY altera_mf; USE altera_mf.all; 4
ENTITY data IS PORT ( clock : IN STD_LOGIC ; data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); rdreq : IN STD_LOGIC ; wrreq : IN STD_LOGIC ; empty : OUT STD_LOGIC ; full : OUT STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); usedw : OUT STD_LOGIC_VECTOR (5 DOWNTO 0) ); END data;
ARCHITECTURE SYN OF data IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (5 DOWNTO 0); SIGNAL sub_wire1 : STD_LOGIC ; SIGNAL sub_wire2 : STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL sub_wire3 : STD_LOGIC ; COMPONENT scfifo GENERIC ( add_ram_output_register : STRING; intended_device_family : STRING; lpm_numwords : NATURAL; lpm_showahead : STRING; lpm_type : STRING; lpm_width : NATURAL; lpm_widthu : NATURAL; overflow_checking : STRING; underflow_checking : STRING; use_eab : STRING ); PORT ( usedw : OUT STD_LOGIC_VECTOR (5 DOWNTO 0);
10
rdreq : IN STD_LOGIC ; empty : OUT STD_LOGIC ; clock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); wrreq : IN STD_LOGIC ; data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); full : OUT STD_LOGIC ); END COMPONENT;
BEGIN usedw <= sub_wire0(5 DOWNTO 0); empty <= sub_wire1; q <= sub_wire2(7 DOWNTO 0); full <= sub_wire3; scfifo_component : scfifo GENERIC MAP ( add_ram_output_register => \"OFF\ intended_device_family => \"Cyclone III\ lpm_numwords => , lpm_showahead => \"OFF\ lpm_type => \"scfifo\ lpm_width => 8, lpm_widthu => 6, overflow_checking => \"ON\ underflow_checking => \"ON\ use_eab => \"ON\" ) PORT MAP ( rdreq => rdreq, clock => clock, wrreq => wrreq, data => data, usedw => sub_wire0, empty => sub_wire1, q => sub_wire2, full => sub_wire3 );
END SYN;
11
5、参量的含义和设置方法
12
13
二、lpm_shifreg 模块的使用方法
1:建立.mif 格式文件
首先在QuartusⅡ中打开File 菜单下的New命令,并在New窗口中选择 Memory Initialization File 选项,单击OK按钮后产生数据大小选择窗口,如下图1.1所示。
1.1更具数据情况,可选择lpm_shiftreg 的数据大小,单击OK键确定,将出现如图1.2所示的.mif数据表格,表格中的数据格式可以通过右击窗口边缘的地址数据所弹出的窗口中选择。完成后,选择File 下的Save as 命令,保存此数据文件,这里取名为data.mif。 2:利用Mega Wizard Plug-In Manager 定制lpm_shiftreg 元件 (1)、选择Tools 下的 Mega Wizard Plug-In Manager 命令,打开如图1.3所示的对话框,选中 create a new custom megafunction variation 单选按钮,即定制一个新的模块。单击Next
14
按钮后,打开如图1.4所示的对话框,在storage文件夹下选择 LPM_SHIFTREG 项,然后在右边选择Cyclone Ⅲ器件系列和VHDL语言方式;最后输入文件存放的路径和文件名,以.vhd 为后缀名 保存
1.3
3、选择ROM控制线、地址线和数据线。
在Memory Compiler下的FIFO,一路单击next,如图1-3a,1-3b,1-3c,1-3d,1-3e,1-3f,1-3g,1-3h。
15
1.4
1-5
16
1-6
17
1-7
18
1-8
19
1-9
出现添加工程的提示框,单击是,如图1-10
1-10
4、最后在开始菜单中打开已建立好的lpm_fifo文件,如下:
20
LIBRARY ieee;
USE ieee.std_logic_11.all;
LIBRARY lpm; USE lpm.all;
ENTITY shifreg IS PORT ( clock : IN STD_LOGIC ; shiftin : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );
END shifreg;
ARCHITECTURE SYN OF shifreg IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);
21
COMPONENT lpm_shiftreg GENERIC ( lpm_direction : STRING; lpm_type : STRING; lpm_width : NATURAL ); PORT ( clock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); shiftin : IN STD_LOGIC ); END COMPONENT;
BEGIN q <= sub_wire0(7 DOWNTO 0); lpm_shiftreg_component : lpm_shiftreg GENERIC MAP ( lpm_direction => \"LEFT\ lpm_type => \"LPM_SHIFTREG\ lpm_width => 8 ) PORT MAP ( clock => clock, shiftin => shiftin, q => sub_wire0 );
END SYN;
22
三、altcam的使用方法、参量含义及设置方法
1、使用方法
与lpm_fifo、lpm_shiftreg使用方法相似。
2、altcam的文件如下:
LIBRARY altera_mf;
USE altera_mf.altera_mf_components.all; component altcam generic (
intended_device_family : string := \"unused\"; lpm_file : string := \"UNUSED\"; lpm_filex : string := \"UNUSED\"; lpm_hint : string := \"UNUSED\"; lpm_type : string := \"altcam\"; match_mode : string := \"MULTIPLE\"; numwords : natural := 0; output_aclr : string := \"ON\";
output_reg : string := \"UNREGISTERED\"; pattern_aclr : string := \"ON\";
pattern_reg : string := \"INCLOCK\"; register_odd_match : string := \"OFF\"; use_eab : string := \"ON\";
use_wysiwyg : string := \"ON\"; width : natural; widthad : natural;
wraddress_aclr : string := \"ON\"; wrcontrol_aclr : string := \"ON\"; wrx_aclr : string := \"ON\"; wrx_reg : string := \"INCLOCK\" ); port(
inaclr : in std_logic := '0'; inclock : in std_logic;
inclocken : in std_logic := '1';
maddress : out std_logic_vector(WIDTHAD-1 downto 0);
mbits : out std_logic_vector(NUMWORDS-1 downto 0);
mcount : out std_logic_vector(WIDTHAD-1 downto 0);
mfound : out std_logic;
mnext : in std_logic := '0'; mstart : in std_logic := '0';
23
outaclr : in std_logic := '0';
outclock : in std_logic := '0'; outclocken : in std_logic := '1';
pattern : in std_logic_vector(WIDTH-1 downto 0); rdbusy : out std_logic;
wraddress : in std_logic_vector(WIDTHAD-1 downto 0) := (others => '0');
wrbusy : out std_logic;
wrdelete : in std_logic := '0'; wren : in std_logic := '0'; wrx : in std_logic_vector(WIDTH-1 downto 0) := (others => '0');
wrxused : in std_logic := '1' );
end component;
3、输入输出端口
Input Ports: 端口名称 需要 描述 wrx[] 否 显示哪个模式位应该被视为“不在乎”比特。1在有点位置表明,相应的模式位应该被视为一个“不在乎”位(这并不影响匹配)。0的有点位置表明,相应的模式位不是一个“不在乎”位(这是用于匹配)。只用在写操作。 wrxused 否 如果虚假、写作需要两个时钟周期完成;如果真的,写作需要三个时钟周期。如果断言在写周期的价值、wrx[]端口使用。否则,该值的wrx[]端口是无效的。 wrdelete 否 表明该模式在wraddress[]端口应该被删除。 删除一个模式需要两个时钟周期。为了成功地删除内容存储在指定的位置wraddress[]港口,wrdelete必须断言在相同的两个时钟周期作为鹪鹩和wraddress[]。该模式[]、[]和wrxused wrx端口是忽略在删除周期。 wraddress[] 否 写地址输入内容寻址存储器(CAM)。 输入端口WIDTHAD宽。 inclock 是 否 否 否 积极的边缘引发了时钟。 如果省略,缺省值是1。 inclocken inaclr 异步清楚寄存器,使用inclock端口。 mstart 触发一个新凸轮搜索在多个匹配模式,和maddress[]第一个匹配的凸轮地址搜索模式。
24
Output Ports: 端口名 maddress[] 需要 编码的地址的电流匹配。 参 数 输出端口WITHAD宽。一种输出端口必须在场。阿尔特拉建议或者使用一个组合的maddress[]和mfound输出端口,或mbits[]输出端口。 mbits[] 地址找到的匹配。 输出端口(NUMWORDS-1 . . 0)宽。一种输出端口必须在场。阿尔特拉建议或者使用一个组合的maddress[]和mfound输出端口,或mbits[]输出端口。 mfound 表明至少有一个匹配。 一种输出端口必须在场。阿尔特拉建议或者使用一个组合的maddress[]和mfound输出端口,或mbits[]输出端口。 mcount[] 匹配总数。 输出端口WITHAD宽。一种输出端口必须在场。阿尔特拉建议或者使用一个组合的maddress[]和mfound输出端口,或mbits[]输出端口。 rdbusy 表明阅读必须持有他们的当前值的港口。 一种输出端口必须在场。阿尔特拉建议或者使用一个组合的maddress[]和mfound输出端口,或mbits[]输出端口。 wrbusy 表明写必须持有他们的当前值的港口。 一种输出端口必须在场。阿尔特拉建议或者使用一个组合的maddress[]和mfound输出端口,或mbits[]输出端口。 4、参数
参数 类型 需要 描述 WIDTHAD 整数 是的 wraddress宽度[]端口。 WIDTHAD应该等于装天花板[得到(NUMWORDS)]。 NUMWORDS 整数 是的 字数存储在内存中。显示的宽度mbits[]端口。一般来说,这个值应该是2 ^(WIDTHAD-1)< NUMWORDS < = 2 ^ 名字的第二个十六进制文件包含RAM的初始化数据(“<文件名徐hex >”)。如果省略,缺省值是“闲置”。一些是1在这个文件中改变的意思位在第一个十六进制文件这样0位在第一个文件成为“不在乎”位,1位成为“从来没有匹配“比特在内容寻址存储器(CAM)模式。0位在这个文件中保存的通常意义对应的位在第一个十六进制文件。 LPM_FILEX 字符串 没有 LPM_FILEX 字符串 没有 允许您指定在VHDL设计altera特定参数文件(vhd)。默认值是“闲置”。
25
26