Circuit Design with VHDL

エイリアス

Circuit Design with VHDL, third edition (The MIT Press), pp.238-239 Effective Coding with VHDL: Principles and Best Practice (The MIT Press), pp.168-171 -- これは単に別名をつけるだけ。 alias new_name is original_name; -- インデックスを指定…

9.1.4 Shift Operators / 非公式訳

/アーパレイタ/ 名詞 /アリすマティク/ 形容詞 /アリすメティク/ p.226 シフト演算子 表9.1で見たようにシフト演算子には論理(logical)シフトと算術(arithmetic)シフトとがあります。シフト演算子には下の6つがあります。 sll: 論理左シフト srl: 論理右シフ…

9.3.1 Attributes of Scalar Types / 非公式訳

9.3.1 スカラー型の属性 この属性を利用すると、スカラー型(表7.2)、スカラー型オブジェクトのいずれについても静的情報が取得できます。表9.7にまとめました。Tは型を、xは型の値か位置のインデックスかいずれかを表します。 temperatureという名前の整数型…

15.2 State Encoding Styles / 非公式訳

p.375 15.2 各ステートにどのように番号を振るか 具体的なステートマシンについて述べる前にもう一つ説明しておくべき大切なことがあります。それは、FSM (有限ステートマシン)の持つ各ステートにどのように番号を振るのか(どのようにエンコードするのか)と…

バイナリー→BCD変換函数を作る(範囲を一般化) / double dabbleアルゴリズム / VHDL

VHDL_for_Quartus_Prime/example_slv_to_bcd at main · ti-nspire/VHDL_for_Quartus_Prime · GitHub 「バイナリー→BCD変換函数を作る / double dabbleアルゴリズム / VHDL -」のときはテキストどおりにunsigned 12ビット値(0d0000~0d4095)を4桁BCD値 (0x000…

14.5 函数とプロシージャとの違い / 非公式訳

p.363 函数とプロシージャとの主な違いをまとめます。 全般的な目的 函数: 型変換、論理演算、算術演算など、よくある処理に使います。合成目的としてはプロシージャよりもよく使います。 プロシージャ: 出力が複数ある処理に使います。値は返さずに変更しま…

std_ulogicとstd_logicと

pp.163-164 std_ulogicは下のように定義されている。std_ulogicのuはunresolvedのu。 type std_ulogic is ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-' ); std_logicは下のように定義されている。 subtype std_logic is resolved std_ulogic; std_logicの…

附録K: TMDSリンク / 非公式訳

pp.559-562 1. TMDSリンク TMDS (Transition Minimized Differential Signaling)は、ビデオ信号をシリアル伝送するためのラインコードのひとつです。1999年にSilicon Image社が発表しました。デスクトップコンピューターとLCDモニターとを相互接続するための…

附録J: DVIビデオインターフェイス / 非公式訳

pp.555-557 1. DVIインターフェイス DVI (Digital Visual Interface)は、コンピューターからLCDモニターへ非圧縮ビデオ信号を送信する手段としてDDWG (Digital Display Working Group)が1999年に開発したディジタルビデオインターフェイス規格です(図J.1a)。…

附録I: VGAビデオインターフェイス / 非公式訳

pp.551-554 1. VGAインターフェイス 最初のVGA (ビデオグラフィクスアレイ)インターフェイスは、コンピューターをアナログCRT (ブラウン管)ビデオモニターに接続する手段として1987年にIBMが発表しました。その後多くのバージョンが発表されました(図I.1b)。…

ディジタル時計 / VHDLでキャラクターLCD / 4ビットモード

テキストは8ビットモードで制御しているが今度は4ビットモードを試す。もっとスマートに書けると思うが今のところわからない。 library ieee; use ieee.std_logic_1164.all; entity digital_watch_with_LCD_display_4bit is generic( F_CLK: natural := 48_0…

附録H: キャラクターLCD / 非公式訳

pp.545-549 1. キャラクターLCD 一般的なキャラクターLCD (液晶ディスプレイ)を図H.1に示します(詳しくは図中のキャプションを見てください)。この種のディスプレイにはI2Cなどのシリアルインターフェイスを備えたものもありますが、コストを抑えたい場合はL…

ディジタル時計 / VHDLでキャラクターLCD / 8ビットモード

pp.447-454 3.3 Vで直接動かせるSC1602BBWB-XA-LB-Gを使った。 テキストはelsif rising_edge(E) thenにしてあるが、Quartus Prime LiteはVHDL2008を全部は実装していないようでoutポートが読めずにエラーが出る。しかたないので假のsignalを設けてelsif risi…

VHDLでSPI / ADコンバーターMAX1118 / CH1も読めるようにする

テキストはCH0だけを読んでいるがせっかくなのでCH1も読めるようにする。 !スレーブセレクトするとすぐにCH0の変換が始まるが、その変換の最中に!スレーブセレクトを解除してすぐにもう一度!スレーブセレクトするとCH1の変換が始まる。 library ieee; use ie…

VHDLでSPI / ADコンバーターMAX1118

2ch・シリアル8bitADコンバータ(MAX1118) DIP化モジュールキット: 組立キット 秋月電子通商-電子部品・ネット通販 pp.414-416 CH0をAD変換してみる。クロックはテキストどおりアイドル時Hiにしたが、データシートによればアイドル時Lo…

3.20.3 ADコンバーターのためのSPI / 非公式訳

pp.95-96 非公式和訳 3.20.3 ADコンバーターのためのSPI SPI (serial peripheral interface)のしくみについては巻末資料Fにまとめました。このセクション3.20.3では例としてADコンバーターのためのSPIを作ります。Maxim製のMAX1118は、2チャンネル、8ビット…

ステートマシン / ミーリー型 / "abc"の順に文字が入力されたらフラグを立てる

pp.407-409 今度は、ステートマシン / ムーア型 / "abc"の順に文字が入力されたらフラグを立てる -のミーリー型を試す。 ミーリー型のFSM(有限ステートマシン)とは、その入力が出力を直接左右する可能性のあるFSMのことである。言い換えると、出力はマシンの…

ステートマシン / ムーア型 / "abc"の順に文字が入力されたらフラグを立てる

pp.407-409 ムーア(Moore)型のFSM (有限ステートマシン)は、その出力が現在の状態にのみ依存するFSMのこと(p.68)。 "abc" (0x61, 0x62, 0x63)の順に文字が入力されたらフラグを立てる(入力をセットして、クロック、入力をセットして、クロック、......)。 li…

最小値、最大値を求めるprocedureを作る

pp.359-362 4個の4ビット値のなかから最小値、最大値を求める。procedureの書きかたがよく分からない。 subprograms_pkg.vhd library ieee; use ieee.numeric_std.all; package subprograms_pkg is type unsigned_array is array (natural range <>) of unsi…

バイナリー→BCD変換函数を作る / double dabbleアルゴリズム / VHDL

pp.358-359 unsigned 12ビット値(0~4095)を4桁BCD値 (0,0,0,0~4,0,9,5)に変換する。 subprograms_pkg.vhd library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package subprograms_pkg is function binary_to_bcd (bin: std_logic_vec…

std_logic_vectorからintegerへ型変換する函数を作る / process内に

std_logic_vectorからintegerへ型変換する函数をprocess内に記述する。 pp.357-358 library ieee; use ieee.std_logic_1164.all; entity test_circuit is generic( WIDTH: natural := 8 ); port( clk: in std_logic; inp: in std_logic_vector(WIDTH-1 downt…

ceil(log2())を求める函数を作る / architecture内に

p.357 前回と同じ函数を今度はarchitectureの宣言部に記述する。reusabilityの観点からすると好ましくない。 entity test_circuit is generic( BITS: natural := 8 ); port( inp : in positive range 1 to 2**BITS-1; outp: out natural range 0 to BITS ); …

ceil(log2())を求める函数を作る / パッケージ内に

pp.355-356 パッケージ内に函数を作る。 subprograms_pkg.vhd package subprograms_pkg is -- 函数を宣言する。 -- function 函数名 (引数: 型) return 型; function ceil_log2 (input: positive) return natural; end package; package body subprograms_pk…

平方根を求める / 回路全体を試す

pp.322-325 今度は回路全体を試す。 条件は下のとおりとする。 startパルスの入力時に計算を開始する。 startもxもクロックには非同期。 startパルスの長さは決まっていないので、シンクロナイザーを通したあとにワンショットパルス化する(p.55、figure 2.27…

平方根を求める / 計算部分だけ試す

pp.322-325 Quartus PrimeのIPカタログにALTSQRTがあるがここでは使わない。 まずfigure 13.2の計算部分だけ試す。unsigned 8ビット値(0~255)の平方根(0~15)を求める。 unsigned 8ビット値xの平方根の計算手順: 4ビットダウンカウンターを0b1111からカウン…

FIRフィルターを作る

pp.320-322 入力4ビット幅、係数5個、よって出力11ビット幅のFIRフィルターを作る。単なる練習であって係数に意味はない。 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; --use ieee.math_real.all; entity fir_filter is generic(…

「チャタリング除去回路1 / 安定期間がチャタリング想定期間よりも長く続いたらレベルを確定する」のVHDL版

pp.318-320 入力がHi、出力がLoの時間がチャタリング継続想定時間よりも長く続いたら出力をトグルする。 入力がLo、出力がHiの時間がチャタリング継続想定時間よりも長く続いたら出力をトグルする。 チャタリング除去回路1 / 安定期間がチャタリング想定期間…

ツリータイプ加算器のパラメタライズ

pp.315-318 絶対差の和(マンハッタン距離)を求める -でパラメタライズできていなかったツリータイプ加算器をパラメタライズする。 ここでは7ビット、10本を加算する。4レイヤーの加算が必要なので出力を7+4=11ビットにしてオーバーフローを防ぐ。 library ie…

シフトレジスタを作る

pp.311-312 4ビット幅、4段のシフトレジスタを作る。クロックのたびに入力値が次段へ順送りされる。 library ieee; use ieee.std_logic_1164.all; entity shift_register is generic( NUM_BITS : natural := 4; NUM_STAGES: natural := 4 ); port( clk : in …

BCD出力タイマー

pp.303-305 00秒から59秒までカウントするタイマーを作る。 バイナリーカウンターでカウントしてからBCDに変換するのではなく、10進1桁ごとに4ビットBCDカウンターを設けて出力する。ここではアノードコモン1桁を2個使った。ダイナミック点灯はせずに個別に…