MAX V, MAX10, and VHDLメモ

FIRフィルター係数の計算 / array(0 to TAPS - 1)(COEFF_WIDTH - 1 downto 0)の形で出力する

import scipy.signal import numpy as np """ 構文: scipy.signal.firwin(numtaps, cutoff, width=None, window='hamming', pass_zero=True, scale=True, nyq=None, fs=None) pass_zero: True, False, 'bandpass', 'lowpass', 'highpass', 'bandstop' window…

ディジタルフィルターの実験 / MCP3001 ADCとMCP4911 DACとを同時に動かす / 信号を素通りさせる

ADコンバーターMCP3001とDAコンバーターMCP4911とを同時に動かす。ここでは、AD変換した値を何もせずにDA変換して出力する。 ファイル一式: VHDL_for_Quartus_Prime/AD_DA_MCP3001_4911 at main · ti-nspire/VHDL_for_Quartus_Prime · GitHub 全体の接続図: …

Digi-Key TechForum掲載のSPIマスターモジュール / DAコンバーターMCP4911を動かす

Digi-Key TechForum掲載のSPIマスターモジュール / ADコンバーターMCP3001を動かす / R-2R DACでDA変換する -のつづき ファイル一式: VHDL_for_Quartus_Prime/da_converter_MCP4911_spi at main · ti-nspire/VHDL_for_Quartus_Prime · GitHub 今度はDAコンバ…

Digi-Key TechForum掲載のSPIマスターモジュール / ADコンバーターMCP3001で変換してR-2R DACで元に戻す

Digi-Key TechForum掲載のSPIマスターモジュール / ADコンバーターMCP3001を動かす -のつづき 今度は前回のLEDの代わりにR-2R方式のDAコンバーターでDA変換する。Bourns社の4610X-R2R-103LFを使う。R = 10 kΩ、2R = 20 kΩである。8ビットぶんしかないので、1…

Digi-Key TechForum掲載のSPIマスターモジュール / ADコンバーターMCP3001を動かす

Digi-Key TechForum掲載のSPIマスターモジュール / ポテンショメーターAD8402ARZ50を動かす -のつづき 今度はADコンバーターMCP3001を動かす。逐次比較型、1チャンネル、10ビット、外部リファレンス、SPIのADコンバーターである。VDD = VREF = 2.7 Vのとき、…

Digi-Key TechForum掲載のSPIマスターモジュール / ポテンショメーターAD8402ARZ50を動かす

Digi-Key TechForumに紹介されているSPIマスターモジュール / 非公式訳 -の続き 当該記事のコードがまだ全部は読み切れていないが、ディジタルポテンショメーターAD8402ARZ50を動かしてみる。50 kΩが2個入っている。チャンネル(0b00または0b01) + ワイパーの…

PWM波を生成する / デューティを(0/n)から(n/n)まで(1/n)刻み指定できるようにする / のこぎり波を使う

「PWM波を生成する / デューティを(0/n)から(n/n)まで(1/n)刻み指定できるようにする -」のとき作ったPWMモジュールについても、「PWM波を生成する / デューティを(0/n)から(n/n)まで(1/n)刻み指定できるようにする / 三角波を使う / PWMモジュールを複数実…

PWM波を生成する / デューティを(0/n)から(n/n)まで(1/n)刻み指定できるようにする / 三角波を使う / PWMモジュールを複数実体化する

PWM波を生成する / デューティを(0/n)から(n/n)まで(1/n)刻み指定できるようにする / 三角波を使う -の続き 今度はPWMモジュールを複数実体化する。サブモジュールにしておいたコンパレーターをfor-generateで複数実体化するだけでよい。 ファイル一式: VHDL…

PWM波を生成する / デューティを(0/n)から(n/n)まで(1/n)刻み指定できるようにする / 三角波を使う

PWM波を生成する / デューティを(0/n)から(n/n)まで(1/n)刻み指定できるようにする -のときは鋸歯状波を使ったが今度は三角波を使う。位相中心がPWM周期の真ん中に来る。Atmega328Pでも試したいわゆるPhase Correct PWM Modeである。ここでは下図のAtmega328…

アップカウンター

今度は、今まで何度も作った単なるアップカウンター。genericをベクタ型で宣言しておけば、対数を計算しなくても属性でビット幅が指定できる。 VHDL_for_Quartus_Prime/generic_counter_up at main · ti-nspire/VHDL_for_Quartus_Prime · GitHub library iee…

アップダウンカウンター / 上昇中フラグを立てる

アップダウンカウンターを作る -の続き VHDL_for_Quartus_Prime/generic_counter_updown_ver2 at main · ti-nspire/VHDL_for_Quartus_Prime · GitHub 上昇中フラグが立てられるようにした。 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_st…

Digi-Key TechForum掲載のSPIマスターモジュール / 非公式訳

参考: SPI Master (VHDL) - Logic - Engineering and Component Solution Forum - TechForum │ Digi-Key 上のリンクに紹介されているSPIマスターを試してみる。 非公式訳: SPIマスター 特徴 (略) スレーブの個数が指定できる。 データ幅が指定できる。 極性…

非同期シリアルインターフェイス(UART)で送受信 / 負論理を試す

今度はポケコンPC-G850VSのシリアルポートを使って、負論理UARTの動作確認をする。PC-G850VSは5Vロジックなのでこのロジックレベル双方向変換モジュールでレベル変換をした。 今FPGAはG850ターミナルから受信した'q'をそのまま送り返している。これで、今回…

非同期シリアルインターフェイス(UART)で送受信

今度は送受信をいっぺんに試す。受信したデータをそのまま何もせずに送り返す。シミュレーションではなく実際に回路を動かしてロジアナで確認した。 VHDL_for_Quartus_Prime/UART at main · ti-nspire/VHDL_for_Quartus_Prime · GitHub 今FPGAは'a'を受信し…

非同期シリアルインターフェイス(UART)で受信できるようにする

Interface (インターフェース) 2009年 09月号 [雑誌], pp.116-118 今度は受信。 シリアル通信用クロックはボーレートの16倍にする。シリアルラインがHからLに下がってそこから6クロック目(0から数えて6クロック目)がやはりLであったら確かにスタートビットで…

非同期シリアルインターフェイス(UART)で送信できるようにする

Interface (インターフェース) 2009年 09月号 [雑誌], pp.116-118 コードは下の2点を除いてほぼテキストのままである。 出力の極性を切り替えられるようにした(負論理にもできるようにした)。 コンポーネントとして呼び出しているシリアル通信クロック生成用…

「バイナリー→BCD変換函数」「BCD→整数変換函数」をパッケージにまとめる

以前double dabbleアルゴリズムでバイナリー→BCD変換函数を作ったが、今度はBCD→整数変換函数と一緒にパッケージにまとめておく。 slv_to_bcd()函数で0b10011010010100 (0d9876)を0x9876 (0d39030)に変換し、それをbcd_to_int()函数で元の0d9876に変換してみ…

PWM波を生成する / デューティを(0/n)から(n/n)まで(1/n)刻み指定できるようにする

参考: FPGA活用回路&サンプル記述集(2) ―― モータやLEDを駆動するパワー回路|Tech Village (テックビレッジ) / CQ出版株式会社 ちょうどnクロックで所望のpwm周期になるようなクロックを生成する。要するにソースクロックを(ソースクロック周波数/(pw…

三角波生成器 / BCDで周波数を設定する

今度は4桁bcdで周波数が設定できるようにする。 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity triangle_wave_gen_bcd is generic( F_CLK : positive := 48_000_000; F_OUT_MAX : positive := 9999; -- 最大出力周波数 NUM_…

三角波生成器

参考: CPLDでディジタル電子工作 (CQ文庫), pp.125ff. アップダウンカウンターの出力をAD変換して三角波を生成する。ADコンバーターは8ビットR-2R方式にした。 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.math_real.al…

アップダウンカウンターを作る

トップ値とボトム値とをパラメタライズしたアップダウンカウンターを作る。 ↓ これが本体: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity generic_counter_updown is generic( TOP_VAL : natural := 10; BOTTOM_VAL: natura…

ごく簡単なテストベンチ / テストベンチのテンプレートを自動生成する

参考: シェフの気まぐれテストベンチ ~時間短縮のマル秘レシピ~ - 半導体事業 - マクニカ 前回は一からテストベンチを記述したが、今度は上のリンクを参考にして自動生成した。入力波形は自分で書く。このとき作った4ビット加算器74283 (のようなもの)をシ…

ごく簡単なテストベンチ

参考: 動かしてわかる CPUの作り方10講, pp.153ff. これまではすべて実際に回路を動かしてロジアナ、オシロ、LEDなどで動作を見てきたが、今度はModelSimでシミュレートしてみる。 ↓この回路の動作をシミュレートする。単なる2入力ANDである。 library ieee;…

フルコンパイルせずに.mifファイルのデータだけを入れ換える方法

参考: Intel:FPGA 内部 RAM を使用してデザイン中にメモリを実装しました。メモリの初期値は、メモリ初期値ファイルで行いました。その後、メモリの初期値ファイルのみを変更したのですが、この場合、再コンパイルが必要でしょうか? - 半導体事業 - マクニ…

N相クロックを作る その5 / 結局最初に戻る

「N相クロックを作る その4 / rol (左回転)演算子を使う -」の方法では、何かの拍子にノイズが乗ってmore-than-one-hot stateになってしまうとリセットしない限り二度とone-hot stateに復帰しない。結局最初の方法が一番いい。一周すれば必ずone-hot stateに…

VHDLの算術シフト

「9.1.4 Shift Operators / 非公式訳 -」でシフト演算子について見た。算術シフトだけ試してみる。 結局、x sla nはx sra -nと同じ、x sla -nはx sra nと同じということか。 entity sute_vhdl is port( outp_sla: out bit_vector(7 downto 0); outp_sra: out…

N相クロックを作る その4 / rol (左回転)演算子を使う

N相クロックをつくる - N相クロックをつくる その2 - N相クロックを作る その3 / それに意味のないとき - というわけでローテート演算子の存在を知ったのでrol演算子を使ってN相クロックを作る。最初からこうすべきであった。 VHDL_for_Quartus_Prime/one_ho…

32ビット値を16進8桁としてキャラクターLCDに表示する その2

というわけで、列挙型はインデックスから列挙子名が取得できるとともに列挙子名からインデックスの取得できることが分かった。インデックスであって、各列挙子名に割り当てられた番号ではない。「32ビット値を16進8桁としてキャラクターLCDに表示する -」で…

32ビット値を16進8桁としてキャラクターLCDに表示する

というわけでbufferポートの存在を知った。 VHDL-2008以降、エンティティの内部でもoutポートから値が読み出せるようになったのでbufferポートは用済みになった。だがまだQuartus Prime Liteには実装されていないようである。 「ディジタル時計 / VHDLでキャ…

N相クロックを作る その3 / それに意味のないとき

74175で作った回路をそのままVHDLで記述し直してみる。ただしインターフェイスはパラメタライズし、リセット回路も追加した。結局前回と同じことをしているのであって意味がなかった。 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all…