genericでstd_logic_vectorの幅をコントロールする

VHDLを使って気になっていたことがあるのでちょっと実験してみました。

気になっていた事というのは、「コンポーネントとして設計した部品のデータ幅を使用時に変えることが出来るか」という点です。たとえば、DDSをコンポーネントとしたときに、利用する度に12bit, 16bitのようにかえられるでしょうか。

「そりゃ変えられるでしょう」

と、当然思いますが、なにしろVHDLはいろいろ予想を裏切ってくれたのできちんと実験してみました。

作ったのは以下のようなコンポーネントです。

--------------------------------------------------------------------------------
-- Entity: num_std_test
-- Date:2016-09-18  
-- Author: takemasa     
--
-- Description: 
--------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity generic_test is
    generic (
        maxbit :integer;
        d : in signed(maxbit downto 0)
    );
    port  (
        a : in signed(maxbit downto 0);        
        b : in signed(maxbit downto 0);
        c : out signed(maxbit downto 0)
    );
end generic_test;

architecture rtl of generic_test is
begin
        c <= a + b + d;
end rtl;

 

内部では他ビット精度の演算をしていますが、ビット数はgenericの引数として与えられるmaxbitによって変えることが出来ます。また、genericが引数として受取る値のビット幅が変えられるかどうかも確かめられます。これがコンパイルを通ればOKです。

結果はコンパイルOKでした。当然と言えば当然の結果です。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください