組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

VHDL記述のポイント:numeric_stdを使う(std_logic_arithを避ける)

設計内容分類FPGA

実現したい仕様・課題

VHDLの算術演算パッケージには、IEEE標準のnumeric_stdと、ベンダ由来の非標準パッケージ(std_logic_arith、std_logic_unsigned/std_logic_signed)が混在して使われてきました。非標準パッケージを使うと、同名関数の多重定義によるコンパイルエラーや、符号解釈がパッケージ依存になる曖昧さが生じ、ツール間の移植性も損なわれます。算術演算の基盤を標準に統一したいというのが課題です。

設計のポイント

算術演算にはIEEE標準のnumeric_stdパッケージを使用し、std_logic_arith・std_logic_unsigned・std_logic_signedは新規コードでは使わない方針とします。numeric_stdはunsigned型とsigned型を定義し、符号の解釈を「型」で明示するため、同じビット列でも符号なし/符号付きの扱いがコード上で一意に定まります。一方、std_logic_unsignedはstd_logic_vector自体に符号なし演算を定義するもので、std_logic_signedと同一設計内に混在するとstd_logic_vectorの解釈が文脈依存になり、危険です。また非標準パッケージとnumeric_stdを同時にuseすると、演算子の多重定義が衝突してコンパイルエラーの原因になります。numeric_stdでは、カウンタやアドレスなどの演算対象はunsigned/signed型で宣言し、加減算・比較を型どおりに記述します。整数リテラルとの演算(cnt + 1 など)も直接記述できます。既存コードが非標準パッケージを使っている場合も、新規モジュールから段階的にnumeric_stdへ統一していくことで、資産全体の移植性と保守性が向上します。

【コード例】
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all; — 標準パッケージ

signal cnt : unsigned(7 downto 0);

if rising_edge(clk) then
cnt <= cnt + 1; — 整数との演算も可
if cnt = 200 then cnt <= (others => ‘0’); end if;
end if;

VHDL記述のポイント:numeric_stdを使う(std_logic_arithを避ける) | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、FPGA設計に関するポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

FPGA設計のポイント

>>ダウンロードはこちら!

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ