6と10のリビジョン間の差分 (その間の編集: 4回)
2011-05-09 16:05:47時点のリビジョン6
サイズ: 1770
編集者: TakuyaKuwahara
コメント:
2011-05-11 00:41:59時点のリビジョン10
サイズ: 3246
編集者: TakuyaKuwahara
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 21: 行 21:
 *配布されているfull-Adderのシミュレーションファイルについて。  *配布されているフルアダーの部品定義ファイルについて。
4fulladr.vhd中の

{{{
type IX is range 4 to 7;
  subtype I16 is INTEGER range 0 to 15;
  type J16 is range 0 to 15;
  type BIT_STREAM is array(I16 range<>) of BIT;
  type MEMORY_COMMAND is (NOP, READ, WRITE);
  type DECODE_TABLE is array(I16) of BIT;
  type std_logic_vector2 is array(NATURAL range <>, NATURAL range <>) of std_logic;
  signal TST : DECODE_TABLE;
  signal MC :MEMORY_COMMAND;

  signal BS : std_logic_vector(15 downto 0);
  signal BS2 : std_logic_vector2(7 downto 0, 3 downto 0);
  signal message : string(1 to 5) := "HELLO";
  signal OCTET : BIT_VECTOR(7 downto 0);
  constant OCTET2 : BIT_VECTOR := ('0', '1', '0', '1', '0', '1', '0', '1');
  signal address_buffer : std_logic_vector(63 downto 0);
type MEMORY_TRANSACTION is
  record
    comm : MEMORY_COMMAND;
    address : std_logic_vector(63 downto 0);
    data : std_logic_vector(63 downto 0);
  end record;

  signal MT : MEMORY_TRANSACTION;
}}}

の箇所と、STRUCTURE中の

{{{

MC <= NOP;

  MT.comm <= READ;
  MT.data <= (others => '0');
  MT.address <= address_buffer;

}}}

の部分はフルアダーと全く関係ないです。(つまり、この部分まるまる削除しても普通にシミュレーションが通る)

ここを削除するとコードがかなり読みやすくなるのでオススメ。





 *配布されているフルアダーのシミュレーションファイルについて。
行 30: 行 80:
{{{
行 34: 行 84:
}}}
行 38: 行 88:
{{{
行 42: 行 92:
}}}
行 46: 行 96:
{{{
行 48: 行 98:
}}}
行 52: 行 102:
{{{
行 54: 行 104:
}}}

ハードウェア実験Tips

第3回課題

  • iseでコンパイルが通らない。

配布ファイルがデフォルト設定に合っていない。 top.ucfの1行目、

CONFIG PART=5VLX50TFF1136-1 ;

CONFIG PART=xc5VLX50TFF1136-2 ;

に書き変えるか、プロジェクト設定のSpeedを末尾の数字に合わせる。(頭のxcは無くても通りはするよ)

第4回課題

  • 配布されているフルアダーの部品定義ファイルについて。

4fulladr.vhd中の

type IX is range 4 to 7;
  subtype I16 is INTEGER range 0 to 15;
  type J16 is range 0 to 15;
  type BIT_STREAM is array(I16 range<>) of BIT;
  type MEMORY_COMMAND is (NOP, READ, WRITE);
  type DECODE_TABLE is array(I16) of BIT;
  type std_logic_vector2 is array(NATURAL range <>, NATURAL range <>) of std_logic;
  signal TST : DECODE_TABLE;
  signal MC :MEMORY_COMMAND;

  signal BS : std_logic_vector(15 downto 0);
  signal BS2 : std_logic_vector2(7 downto 0, 3 downto 0);
  signal message : string(1 to 5) := "HELLO";
  signal OCTET : BIT_VECTOR(7 downto 0);
  constant OCTET2 : BIT_VECTOR := ('0', '1', '0', '1', '0', '1', '0', '1');
  signal address_buffer : std_logic_vector(63 downto 0);
type MEMORY_TRANSACTION is
  record
    comm    : MEMORY_COMMAND;
    address : std_logic_vector(63 downto 0);
    data    : std_logic_vector(63 downto 0);
  end record;

  signal MT : MEMORY_TRANSACTION;

の箇所と、STRUCTURE中の

MC <= NOP;

  MT.comm <= READ;
  MT.data <= (others => '0');
  MT.address <= address_buffer;

の部分はフルアダーと全く関係ないです。(つまり、この部分まるまる削除しても普通にシミュレーションが通る)

ここを削除するとコードがかなり読みやすくなるのでオススメ。

  • 配布されているフルアダーのシミュレーションファイルについて。

課題で必須ではないですが、確認のため走らせようとしてもなぜかそのままでは通らないのでちょっと加筆。

配布ファイル3つ(ハーフアダー・フルアダー・シミュレーション用)をダウンロードしてコンパイルしても、 そのままだとフルアダー定義ファイルのポート名とシミュレーション用ファイル中にコンポーネントとして宣言されたフルアダーのポート名との間に整合がとれておらず、おそらくコンパイルが通ってもシミュレートできません。

配布されているシミュレーション用ファイル(4drvfa.vhd)の

 port (IN0,IN1,CIN : in std_logic;

          S,COUT : out std_logic);

の箇所を

port (A,B,CIN : in std_logic;

          S,CO : out std_logic);

に改変し、

port map (A=>IN0,B=>IN1,CIN=>CIN,S=>S,CO=>COUT);

の部分も

port map (A=>A,B=>B,CIN=>CIN,S=>S,CO=>CO);

と変えて、元のフルアダーのポート名と合わせてやるとシミュレーションが通ります。-- TakuyaKuwahara


Categoryノート

ハードウェア実験/Tips (最終更新日時 2011-06-07 07:00:27 更新者 fujima)