IPカタログを使ってカウンターを自動生成する / 下位VHDLをcompnent宣言してから実体化する
(テキストとは無関係)
前回はテキストどおりにカウンターを一から記述したが、今度はIPカタログを使って自動生成した。モジュロ48 M、モジュロ10の2つのカウンターを生成して、あとは接続するだけでよい。非常にスッキリ書ける。自前のint_to_seven_seg()
函数は引数がnatural
なので、ieee.numeric_std.all
を利用してunsigned
にキャストしてからto_integer()
でinteger
に変換した。動作は前回と同じ。
トップレベル:
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use work.seven_segment_pkg.all; entity slow_counter is port( reset_n, clock: in std_logic; seven_seg : out std_logic_vector(6 downto 0) ); end; architecture rtl of slow_counter is component counter_48M is PORT( aclr : IN STD_LOGIC; clock: IN STD_LOGIC; cout : OUT STD_LOGIC ); end component; component counter_10 is PORT( aclr : IN STD_LOGIC ; cin : IN STD_LOGIC ; clock: IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ); end component; signal timer_1_sec: std_logic; signal digit : std_logic_vector(3 downto 0); begin c1: counter_48M port map( aclr => not reset_n, -- リセットはLo有意にした。 clock => clock, cout => timer_1_sec ); c2: counter_10 port map( aclr => not reset_n, -- リセットはLo有意にした。 cin => timer_1_sec, clock => clock, q => digit ); seven_seg <= int_to_seven_seg(to_integer(unsigned(digit))); end;