MAX V, MAX10, and VHDLメモ

N相クロックをつくる その2

よく考えたら、クロックに合わせてシフトするだけでいいのであって、カウンターは必要なかった。 https://github.com/ti-nspire/VHDL_for_Quartus_Prime/blob/main/one_hot_state_counter/one_hot_state_counter.vhd library ieee; use ieee.std_logic_1164.…

N相クロックをつくる

いわゆるone hot state counterである。「VHDLで4相クロックを作る -」「74シリーズで4相クロックを作る -」「4相クロックジェネレーターclk_genをシンボルで書き換える -」のときはテキストどおりに4相に限定していたが、今度は相数を一般化する。 ここでは…

バイナリー→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…

任意桁数のBCDカウンターを作る

https://github.com/ti-nspire/VHDL_for_Quartus_Prime/tree/main/counter_bcd 下位VHDLとして10進カウンターを1個だけ作っておいてそれを上位VHDLで何個か実体化して同期連結する。10進カウンター自体はIPカタログで自動生成した。連結数はパラメタライズし…

IPカタログを使ってカウンターを自動生成する / 下位VHDLをentityで直接実体化する

(テキストとは無関係) 前回はcomponent宣言してから実体化したが、今回はentity work.コンポーネント名という形で直接実体化する。このほうがはるかに簡単に思えるが、それぞれ長所・短所があるとの由。動作は前回と同じ。 library ieee; use ieee.std_logic…

IPカタログを使ってカウンターを自動生成する / 下位VHDLをcompnent宣言してから実体化する

(テキストとは無関係) 前回はテキストどおりにカウンターを一から記述したが、今度はIPカタログを使って自動生成した。モジュロ48 M、モジュロ10の2つのカウンターを生成して、あとは接続するだけでよい。非常にスッキリ書ける。自前のint_to_seven_seg()函…

LPM_Counterのcnt_enとclk_enと

https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/catalogs/lpm.pdf cnt_en: カウントイネーブル入力。0だとカウント禁止。ただしsload、sset、sclrには影響しない。デフォルトは1。(訳註: sload、sset、sclrのsはsynchronous) cl…

ハミング重み / Quartus回路図エディター

パラメタライズを考慮しないのであれば1ビットずつにバラしていっきに加算するのが簡単。

信号名、インデックスをつけかえる

動かない原因はldlとldhとにあったか。 修正前: ldl命令をシンボルで書き換える - ldh命令をシンボルで書き換える - 修正後: バッファーを挟まなくてもこれでいけた。 ldl: ldh: これでldlとldhは動いた。

RAM: 1-PORTの使いかた

練習として8ビット×16本のRAMを作ってみる。16本なのでアドレスは4ビット幅である。 作りかたは、ROM: 1-PORTの使いかた -とほとんど同じである。 リセット直後に下の手順で動作を確認する。 write enableをLoにした状態で下の手順を実行し、データが空であ…

.mifファイルを生成するアセンブラのようなものを作る

def generate_mif(file_name, width, depth, rom): f = open(file_name, 'w') f.write("WIDTH=%d;\n" % width) f.write("DEPTH=%d;\n" % depth) f.write("ADDRESS_RADIX=UNS;\n") f.write("DATA_RADIX=BIN;\n") f.write("CONTENT BEGIN\n") format_of_code =…

ROM: 1-PORTの使いかた

参考: 動かしてわかる CPUの作り方10講, pp.256ff. 練習として8ビット×16本のROMを作ってみる。16本なのでアドレスは4ビット。 まずROMの初期化データ(.mif)を作る。mifはmemory initialization file。 8ビット×16本。 こういうテーブルが表示されるので、こ…

PLLの使いかた

MAX10実験キットで学ぶFPGA&コンピュータ (トライアルシリーズ), pp.129ff. ALTPLLをダブルクリックする。 ファイル名を指定する。VHDLしかわからないのでVHDLを選んだ。 入力周波数を指定する。 全部オフにする。 デフォルトのまま。 デフォルトのまま。 デ…

LPM_COMPAREの使いかた

LPMはthe library of parameterized modules /パリャマタライズ/ megafunctions/arithmetic/lpm_compareを試す。8ビット幅同士を比較してみる。

BUSMUXの使いかた

megafunctions/gates/busmuxを試す。 ここでは、2本(size)×4ビット(width)のうちどちらかだけを選択してみる。

LPM_MUXの使いかた

megafunctions/gates/lpm_muxを試す。 ここでは、4本(size)×4ビット(width)のうち1本だけを0b00~0b11 (0~3)のセレクト信号(widths)で選択してみる。

MAX Vの内蔵オシレーターを試す

megafunctionsの中にあるaltufm_oscを選ぶ。 適当に配線する。oscenaのenaはenable。ALTUFMはAltera User Flash Memory。4.7 MHzであった。 https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/max-v/mv51002.pdf Internal Oscil…

VHDLで基本ゲートを作る

動かしてわかる CPUの作り方10講, pp.376ff. ファイルを作るときに[Block Diagram/Schematic File]ではなく[VHDL FIle]を選ぶのを除けば、書き込みまでの全体の手順は回路図エディタのときと同じであった。 -- ダブルハイフンでコメントアウト -- #include <stdio.h></stdio.h>…

CPU部の回路図を入力する

[Assignments]、[Device...]の順に選択して[Device]ウィンドウを開く。その中の[Device and Pin Options...]をクリックして[Device and Pin Options - プロジェクト名]ウィンドウを開く。その中の[Unused Pins]を選択し、[Reserve all unused pins:]を[As in…

とにかく74ロジックICの何かで何かをしてみる

参考: トランジスタ技術 2019年 12 月号, pp.66ff. ナビゲーション画面の[New Project Wizard]ボタンをクリックするか[File]→[New Project Wizard...]の順にクリックするかする。 適当にプロジェクトを作る。 デバイスを指定する。右上のペインで対象を絞り…