Effective Coding with VHDL: Principles and Best Practice (The MIT Press)

列挙型の名前は単数形にすべし

Jasinski_VHDL_Coding_Style_Guidelines.pdf, R101 非公式訳 列挙型の名前は単数形にすべし 列挙型はそれ以外のスカラー型(integerやrealなど)と違いはありません。したがって他の型と同じく名前は単数形にしてください。VHDLの標準ライブラリーは、boolean…

Consider naming processes with a label.

Jasinski_VHDL_Coding_Style_Guidelines.pdf, R97 非公式訳 R97 ラベルを使ってプロセスに名前をつけるときはよく考えるべし プロセスラベルにはプロセスの意図を示すことができます。また有益なデバッグ情報を示すのにも使用できます。しかしプロセスは、エ…

データオブジェクトの名前

Jasinski_VHDL_Coding_Style_Guidelines.pdf, R83 非公式訳 R84 データオブジェクト(変数、信号、定数、ジェネリック)に名前をつけるときは、そのオブジェクトに何が保持されるのかが名前から分かるようにせよ たとえばINPUT_BITSという名前があるとします。…

Make a name as long as necessary

Jasinski_VHDL_Coding_Style_Guidelines.pdf, R74 非公式訳 必要なら名前はいくらでも長くせよ 理由: 意味のある情報を省いてまで名前を短くする、あるいは読みづらくしてまで名前を短くする、このどちらの手段も選ばないでください。ほとんどの場合、名前が…

20.9 テストベンチのまとめ

20.9 テストベンチのまとめ(非公式訳) 本章にはサンプルコードをいくつか示しました。その目的は、VHDLでテストベンチを作成する方法をざっと説明することにありました。こうしたテストの作成には時間と手間がかかるため、本章の最後にそのコストとメリット…

乱数テスト入力値とファンクショナルカバレッジとを用いたテストベンチ / 3で割る回路

pp.561 今度は ↓ この回路のためのテストベンチ。シフトと加算と乗算だけで整数を3で割る回路である。アルゴリズムはまったく理解できない。 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity div_by_3 is port ( dividend: in…

20.6.5 Coverage Bins

p.560 非公式訳 20.6.5 カバレッジビン 乱数テスト入力値を使ったテストでは、シミュレーション中にどの値が観測されるのかを前もって知ることはできません。注目すべき値によってテストベンチ全体のどこがテストされたのかを知る手段として、テストベンチは…

20.6.4 Intelligent Coverage

pp.559-559 非公式訳 20.6.1 インテリジェントカバレッジ 乱数テスト入力値は一般に、検証プランに示したテストケースが生成できるよう、制約を課すことのできる乱数ジェネレーターで生成します。カバレッジモニターと乱数ジェネレーターとが互いに勝手に作…

20.6.3 Random-Based Verification

p.559 非公式訳 20.6.3 乱数を用いた検証 「ディレクテッドテスト」とは別のもう1つの方法は、まずDUVが正しく機能しているどうかを教えてくれるチェックメカニズムを記述しておいてから、注目すべき状態がすべて現れるまで乱数テスト入力値をDUV に与えると…

20.6.2 Directed Testing

p.559 非公式訳 20.6.2 ディレクテッドテスト ファンクショナルカバレッジを100%にするための方法は主に2つあります。1つは、検証プランに並んでいる個々の項目を確認するためのテストを大量に記述することです。この種のテストでは、必要なテスト入力信号を…

20.6.1 Functional Coverage

p.559 非公式訳 20.3.1 ファンクショナルカバレッジ 検証プランが出来てしまえば、あとはそのプランどおりにDUVを動かしてその挙動を確かめるためのコードを書くだけです。 検証プラン全体のどこまで完了したのかを示す指標のことを「ファンクショナルカバレ…

シフトと加算と乗算だけで整数を3で割る

p.561 Hacker's Delight (邦訳: ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか)に載っているとの由。理窟はまったく分からない。 ↓ テキストのVHDLをPythonに書き換えた。 def div_by_3(dividend): d = dividend q = 0 r = 0 q = (d >> 2) +…

ファイルI/Oを利用したテストベンチ / ハッシュ生成器 / モジュラーテストベンチ

pp.557-558 今度はstimulus generatorとresponse checkerとを分ける。さらに、ファイル操作の処理をプロシージャ化してstimulus generatorから分ける。 library ieee; use ieee.std_logic_1164.all; use std.textio.all; entity hash_calculator_tb is end; …

ファイルI/Oを利用したテストベンチ / ハッシュ生成器 / リニアテストベンチ

stimulus、stimuliはテストベンチからDUVへ与える信号、値のこと。 pp.556-557 ↓ 左がDUVに与えるメッセージ。右がDUVから出力されるであろう期待値。 hartj09sq7shh60gxrupgwy2jus9mizc 11100001001001011001100011100101 e6aifwgcyf42f8yucde5j4xdh1a3byu6…

ファイルI/Oを利用したテストベンチ / ハッシュ生成器

pp.555-556 今度はファイルI/Oを利用したテストベンチ。 ↓ これが今回のDUV。任意の長さの文字列(ここでは32文字)に何らかの演算を適用して任意のビット数の数値(ここでは32ビット)に変換する。character'pos(文字)はcharacterタイプに事前定義されている各…

FSMのためのテストベンチ / 自販機 / モジュラーテストベンチ

pp.551-555 stimulus generatorが、投入される一連のコインに相当するトランザクションを生成する。 ドライバーがコインを1個ずつDUVに与える。 スコアボードがDUVの入出力をモニタリングする。 スコアボード内部では、プレディクターがDUV出力の期待値を決…

FSMのためのテストベンチ / 自販機 / リニアテストベンチ

pp.549-551 ここでは、想定されるすべてのケースのうち3つのみをテストする(テキストにはないダイム、ダイムを足した)。 library ieee; use ieee.std_logic_1164.all; entity vending_machine_fsm_tb is end; architecture testbench of vending_machine_fsm…

FSMのためのテストベンチ / 自販機

pp.547-548 ここでは下の自販機をDUVとして試す。 投入できる貨幣は5セント硬貨(ニッケル)と10セント硬貨(ダイム)のみ。 投入された合計金額をamountポートに出力する。 投入額が15セント以上になったらdispenseポートからパルスを出す(投入金額が15セントを…

クロック同期回路のためのテストベンチ / UART RXモジュール / モジュラーテストベンチ

pp.544-547 前回は、テストデータの生成と、DUVを動かすための低レベル処理とがごっちゃになっていた。今度は、DUVと直接やり取りする働きをdriverに担わせる。 ↓ これがテストベンチ: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all…

表10.1 wait文の使用例

p.249 非公式訳 表10.1 wait文の使用例 文 説明 wait; 無条件に停止する。再開することはない。 wait on 信号; 信号にイベントの発生するまで実行を停止する。 wait until 信号; 信号にイベントが発生して、かつその値がtrueになるまで実行を停止する。 wait…

信号'transaction属性

pp.177-178 非公式訳 属性 適用先 返値の型 返値の値 S'transaction 信号 bit 信号 S にトランザクションの発生するたびにトグルする信号(bitタイプ)を返す 信号の事前定義属性 一部の属性は信号に直接適用されます。信号属性は、それ以外の事前定義属性とは…

クロック同期回路のためのテストベンチ / UART RXモジュール / リニアテストベンチ

pp.542-544 以降シミュレーションだけなのでDUVのコードはテキストとまったく同じものを使う。ここではデータを1バイトだけDUVに与え、正しく受信できたことを確かめる。 ↓ これがDUV。 library ieee; use ieee.std_logic_1164.all; use ieee.math_real.all;…

クロック同期回路のためのテストベンチ / UART RXモジュール / DUVの動作を実機で確認

pp.541-542 ――――――――――――――――――――――――――――――――――――― 2018年6月に3万円弱で買ったロジアナが2022年8月3日時点で7万円を超えている。 2018年6月: 2022年8月: ――――――――――――――――――――――――――――――――――――― 今度はUART RXモジュールを題材に順序論理回路のテストベン…

組み合わせ論理回路のためのテストベンチ / カップリングを解消したテストベンチ

pp.539-540 前回はstimuli_generatorとresponse_checkerとがカップリングしていたが今度は分ける。 ↓ これがテストベンチ: library ieee; use ieee.std_logic_1164.all; entity bcd_to_7seg_tb is end; architecture testbench of bcd_to_7seg_tb is signal …

monitor、predictor

/mɑ́(ː)nəṭɚ | mɔ́nɪtə/ /prɪdɪ́ktɚ | -tə/ pp.539-540 改善その3: couplingを解消したテストベンチ (非公式訳) (略)。DUVの入出力を観測してそれをもっと上位のトランザクションへと移し替えるコンポーネントのことをテストベンチの世界では「モニター」と…

組み合わせ論理回路のためのテストベンチ / モジュラーテストベンチ

pp.539-541 組み合わせ論理回路のためのテストベンチ / リニアテストベンチ -のときは、DUVへ与える信号の生成部と、DUVから出力された信号の照合部とを1つのプロセスにしていたが、今度は下のように個別のプロセスに分ける。ただしTEST_DATA排列を介して両…

信号'stable属性

p.29 (非公式訳) 属性 適用先 返値の型 返値の値 S'stable(t) 信号 ブール 過去 t 時間だけ信号 S に何のイベントも起きなかった場合にtrueを返す。

組み合わせ論理回路のためのテストベンチ / リニアテストベンチ

(ModelSimの使いかたは動かしてわかる CPUの作り方10講, pp.154-159) pp.530-536 下のモジュールは、入力された0~9の値に応じて7セグメントLED用の信号を出力する回路である。このモジュールのためのテストベンチを作る。 library ieee; use ieee.std_logic…

19.4.5 RAM Memories / 非公式訳

pp.515-516 RAMは、排列信号、排列変数のどちらを使っても簡単に記述できます。合成ツールは一般に、排列がRAMとして使われていればそのことが認識できるため、適切なハードウェア構造を導き出してくれます。合成ツールは、適切なハードウェア構造を導き出し…

19.4.4 ROM Memories / 非公式訳

動かしてわかる CPUの作り方10講, p.196のリストは下の「定数排列を使う方法」でプログラムメモリーを構築している。 pp.513-515 ROMをモデル化する方法は2つあります。1つは定数排列を使う方法、もう1つはcase文を使う方法です。リスト19.1に、排列を使って…