MegaWizard Plug-In. Managerには屈しない.
QuartusはRAMとかFIFOとかPLLはIPで用意されている. RAMは記述から推測されるので, HDLでそのまま記述できる[1].
しかしFIFOやPLLは記述で推測させる事はできないので, 基本的にはQuartusを起動してGUI(MegaWizard Plug-In. Manager)でポチポチするしかない. といってもQuartusから生成されるHDLを参考にすれば, コンポーネントからIPの呼び出しができる.
以下, ソースコード.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- ===================================================================== | |
-- Title : Quartus FIFO IP | |
-- | |
-- File Name : FIFO_IP.vhd | |
-- Project : | |
-- Block : | |
-- Tree : | |
-- Designer : toms74209200 | |
-- Created : 2019/06/07 | |
-- ===================================================================== | |
library ieee; | |
use ieee.std_logic_1164.all; | |
use ieee.std_logic_unsigned.all; | |
library altera_mf; | |
use altera_mf.all; | |
entity FIFO_IP is | |
port( | |
-- System -- | |
CLK : in std_logic; --(p) Clock | |
nRST : in std_logic; --(n) Reset | |
-- Control -- | |
WR : in std_logic; --(p) Data write | |
RD : in std_logic; --(p) Data read | |
EMPTY : out std_logic; --(p) FIFO empty | |
FULL : out std_logic; --(p) FIFO full | |
WDAT : in std_logic_vector(7 downto 0); --(p) Write data | |
RDAT : out std_logic_vector(7 downto 0) --(p) Read data | |
); | |
end FIFO_IP; | |
architecture RTL of FIFO_IP is | |
-- parameter -- | |
constant device_family : string := "MAX 10"; | |
constant num_word : integer := 1024; | |
-- components -- | |
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 ( | |
clock : IN STD_LOGIC ; | |
data : IN STD_LOGIC_VECTOR (WDAT'range); | |
rdreq : IN STD_LOGIC ; | |
wrreq : IN STD_LOGIC ; | |
empty : OUT STD_LOGIC ; | |
full : OUT STD_LOGIC ; | |
q : OUT STD_LOGIC_VECTOR (RDAT'range) | |
); | |
END COMPONENT; | |
begin | |
-- *********************************************************** | |
-- Component connection | |
-- *********************************************************** | |
U_SCFIFO : scfifo | |
GENERIC MAP ( | |
add_ram_output_register => "OFF", | |
intended_device_family => device_family, | |
lpm_numwords => num_word, | |
lpm_showahead => "ON", | |
lpm_type => "scfifo", | |
lpm_width => WDAT'length, | |
lpm_widthu => 10, | |
overflow_checking => "ON", | |
underflow_checking => "ON", | |
use_eab => "ON" | |
) | |
PORT MAP ( | |
clock => CLK, | |
data => WDAT, | |
rdreq => RD, | |
wrreq => WR, | |
empty => EMPTY, | |
full => FULL, | |
q => RDAT | |
); | |
end RTL; -- FIFO_IP |
https://github.com/toms74209200/FIFO_IP
Intel(altera)[2]のユーザーガイドにある通りに設定していけば良い. というか上のソースコードはほとんどQuartusから生成されたHDLをそのままパク...利用させていただいた.
設定するところなんてビット幅とワード数とshowaheadくらいなので, 圧倒的に楽. intended_device_familyはきちんと設定しなくてもコンパイルできる. 設定させる意味とは.
PLLも同じようにコンポーネントから呼び出すことができるが, 設定がものすごく多いのでけっこう大変そう.
0 件のコメント:
コメントを投稿