ディジタル回路設計とコンピュータアーキテクチャ
t6o_o6t.icon
2025/02/13
19ページ
駆動側
受信側
雑音余裕
駆動側のハイレベル閾値と受信側のハイレベル閾値との差。
また、駆動側のローレベル閾値と受信側のローレベル閾値との差
駆動側からの出力が最悪ケースであっても雑音余裕があれば誤作動を抑えられる。
VHDLの実行環境を用意する
4章からはSystem VerilogとVHDLの解説が始まる。
しかし、この書籍にはインストールやシミュレーション実行に関する詳しい説明がない。
GHDLのインストール
VHDLファイルを.vcdファイルにコンパイルするために使用する。
GitHubのReleasesのうち、Nightlyではないものを見つける
https://github.com/ghdl/ghdl/releases
以下の手順をWindows環境で踏むことで、PowerShellからghdlを呼べることを確認できたがt6o_o6t.icon
1. Assetsからghdl-MINGW32.zipをダウンロード。
2. .zipを解凍して、任意の場所に配置する。
3. フォルダ内のbinフォルダのパスを環境変数PATHに追加する
フォルダ名にMINGWと入っているのが気になる。MinGWのインストールが必要だったの?
シミュレーションを実行する
4章冒頭からのVHDLを実際にシミュレーションしながら学んでいきたいt6o_o6t.icon
しかし、紹介されているコードは入力が必要である。
「4.9 テストベンチ」で紹介されているようにテストベンチを記述すれば、シミュレーションを実行することができる。
テストベンチの構文を詳しく理解したい場合は、次のような記事が良いかもしれない
https://www.macnica.co.jp/business/semiconductor/articles/intel/110609/
invでの例
4ビットのテストベンチを書くのは大変そうだったので、幅を2ビットに変更してinv.vhdlに保存しました。
この作業をもっとに簡単にしたいt6o_o6t.icon
次に、テストベンチを書きました。
code:inv_tb.vhdl
library IEEE; use IEEE.STD_LOGIC_1164.all;
entity inv_tb is
end;
architecture sim of inv_tb is
component inv
port(a: in STD_LOGIC_VECTOR(1 downto 0);
y: out STD_LOGIC_VECTOR(1 downto 0));
end component;
signal a, y: STD_LOGIC_VECTOR(1 downto 0);
begin
dut: inv port map(a, y);
process
begin
a <= "00"; wait for 1 ns;
assert y = "11" report "00 Failed.";
a <= "01"; wait for 1 ns;
assert y = "10" report "01 Failed.";
a <= "10"; wait for 1 ns;
assert y = "01" report "10 Failed.";
a <= "11"; wait for 1 ns;
assert y = "00" report "11 Failed.";
wait;
end process;
end;
単純作業なので簡単にしたい...t6o_o6t.icon
テストベンチに対してElaborateする
$ ghdl -e inv_tb
このときAnalyzeが済んでいなければ失敗してエラーが出る。
指示の通りに、ghdl -a inv.vhdlなどを実行する(一例である。指示を読めばよい)
シミュレーションを実行してVCDを生成する
$ ghdl -r inv_tb --vcd=inv_tb.vcd
--vcdオプションは、生成したVCDの出力先ファイル名。
GTKWaveでVCDを表示する
https://scrapbox.io/files/67b1ed2b597e422ae4e6dcbb.png
SSTペインからaとyを選択して、Wavesペインに表示させる。
Vectorの場合、Signalsペインの該当箇所をダブルクリックすると各ビットの挙動を表示する行が出現するようだ。
signalは内部変数
2025/02/19
4章面白かった!t6o_o6t.icon
演習の回答
https://booksite.elsevier.com/9780123944245/
Odd-numbered solutionsのリンク先にPDFが置いてある。
グローバルデータセグメントのアクセスはgpとの相対アドレスで行う規約。
この規約に従っていれば、リンカがアドレスを解決してくれる。
1つしかオブジェクトファイルが存在しない例だけが示されていることに注意。
リンカの説明はそれ以上行われていない。