工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> VHDL

VHDLのsigned/unsigned型マスター:実践ガイド

VHDLにおいて、signedとunsignedはデータバス上で算術演算を行える特殊なビットベクトルです。std_logic_vectorが信号配線に適しているのに対し、これらの型はコンパイラによって数値として解釈されます。

std_logic_vectorを加算しようとすると、コンパイルエラーNo feasible entries for infix operator "+"が発生します。ツールが生のビットパターンを数値としてどう扱うか判断できないためです。

Basic VHDL Tutorialsシリーズの一部。

算術を可能にするには、ベクトルをsignedまたはunsignedで宣言:


signal <name> : signed(<N-1> downto 0) := <initial_value>;
signal <name> : unsigned(<N-1> downto 0) := <initial_value>;

範囲はtoまたはdowntoどちらでも可ですが、downto 0が最も一般的。初期値は省略可能で、省略時は全ビット'U'になります。

なぜ従来のintegerよりsigned/unsignedを好むのか? デジタル設計者はビット幅を精密に制御する必要が多いためです。これらのベクトル型はオーバーフロー時にラップアラウンドしますが、integerは限界超過でランタイムエラーを発生させます。さらに、ベクトルは'U'や'X'などのメタ値を含められ、設計バグを早期発見できます。

ビデオデモンストレーション

付属ビデオでは、signedとunsigned信号がどのように類似し、どこで異なるかを探ります。

サンプルコード

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity T12_SignedUnsignedTb is
end entity;
architecture sim of T12_SignedUnsignedTb is
  signal UnsCnt : unsigned(7 downto 0) := (others => '0');
  signal SigCnt : signed(7 downto 0) := (others => '0');
  signal Uns4 : unsigned(3 downto 0) := "1000";
  signal Sig4 : signed(3 downto 0) := "1000";
  signal Uns8 : unsigned(7 downto 0) := (others => '0');
  signal Sig8 : signed(7 downto 0) := (others => '0');
begin
  process is
  begin
    wait for 10 ns;
    -- ラップアラウンドカウンタ
    UnsCnt <= UnsCnt + 1;
    SigCnt <= SigCnt + 1;
    -- 信号加算
    Uns8 <= Uns8 + Uns4;
    Sig8 <= Sig8 + Sig4;
  end process;
end architecture;

波形分析

ModelSim波形(主要イベントにズームイン)はすべての値を16進で表示:

VHDLのsigned/unsigned型マスター:実践ガイド

カウンタ例では、UnsCntとSigCntともに0から始まり、FF(10進255)までインクリメント後、0にラップバック。同一のラップ動作を示します。

4ビット信号Uns4とSig4はともに二進1000を保持。これは符号なしで10進8、符号付き(2の補数)で-8です。

これら4ビット数を8ビットアキュムレータに加算すると、符号拡張が働きます。符号なし数はゼロでパディング、符号付き数は符号ビットでパディングされます。結果としてUns8は8増加、Sig8は8減少します。

符号拡張プロセスを視覚化:

VHDLのsigned/unsigned型マスター:実践ガイド

VHDLのsigned/unsigned型マスター:実践ガイド

重要なポイント

次のチュートリアルで更なる洞察を得ます。

VHDL

  1. PIC18マイクロコントローラ:特徴、性能、使い方
  2. リファレンスデシグネータの理解:PCBアセンブリ接続をラベル付けする方法
  3. VHDLにおけるSignedとUnsigned型の使い分け:実践的洞察
  4. プロセス内プロシージャでVHDLステートマシンをクリーンに設計
  5. VHDLにおける不純関数の活用:FSMの可読性と保守性向上
  6. VHDL関数マスター:効率的な設計のための実践ガイド
  7. VHDLプロシージャ活用:再利用可能なコードで設計をシンプルに
  8. VHDLで定数とジェネリックマップを活用し柔軟なモジュール設計を実現
  9. VHDLポートマップインスタンス化マスター:実践ガイド
  10. VHDLのCase-When文マスター:効率的なマルチプレクサ設計
  11. 無料VHDLシミュレータ&エディタ導入ガイド:学生向けステップバイステップ