CRCをVerilogでLogic化しました。 通信系や制御系でCRCを設計していましたが、特定用途だったため、生成多項式も固定、bit幅も固定、右/左送りも固定だったため、汎用性の高いCRCを作成してみました。1クロックで処理するため、半導体の設計では定番に近い構…
特定の変数をプログラムメモリ(CPUが使用するメモリ)とは別のメモリに配置する場合について、説明します。 尚、Intel社製 NiosIIの場合になります。 以下の記事では設定手順などの説明がないと思いますので、記載しておきます。 (ネット上にもあまり無いかと…
NIOSを含めたシミュレーションの実行になります。 シミュレーション環境の構築方法とNiosのシミュレーション用コードの生成方法、及びシミュレーション波形を添付します。 シミュレーション環境構築 実行スクリプトファイル生成 スクリプトファイルの修正 NI…
Quartusを実行し、リソースとタイミングもOKだったので、次はNiosのプログラムコーディングとシミュレーションについてになります。 NiosはC言語で記述し、シミュレーションはFPGA トップからの行います。ここでは、シミュレーションを実行する前のNiosのプ…
Quartusの論理合成とインプリメントとなります。 ここでは、単に実行するだけになるため、実行結果とSTA結果のみ記載します。 また、FRAM I/FブロックとFRAMデバイス間に遅延を付けて行ったシミュレーション波形も載せています。 TOP構成は、以下をご参照く…
Platform DesignerとFPGA Topの作成になります。 FPGAのTOP構成 Platform Designer ブロック構成図 System Contents アドレスマップ Quartusに読み込ませるファイル クロック/リセット生成 最後に FPGAのTOP構成 FPGAのTOP構成は以下となります。(Quartusを…
FRAM I/FブロックをトップとしたRTLシミュレーションになります。 ここでは、テストベンチ記述を記載します。 尚、言語はSystemVerilogとなります。FRAM I/Fブロックの仕様及びソースコードは以下を参照ください。 nao-milk.hatenablog.com nao-milk.hatenab…
FRAM I/Fのverilogコーディングとなります。 ブロック仕様は以下を参照ください。 nao-milk.hatenablog.com FRAM I/Fブロック構成 ソースコード FRAM I/Fブロックトップ Avalon-MM Slave I/F Avalon-MM Master I/F Buffer SPI I/F Clock transfer マクロ生成…
FRAM(強誘電体RAM)をアクセスするためのFPGAをテーマに、FPGAを設計するまでの一連の工程を記載して行こうと思います。 ブロック仕様 Verilog-HDLによるコーディング シミュレーション(RTLシミュレーション) Platform DesignerとFPGA Topの作成 論理合成とイ…
Pythonでハートマークを描画するプログラムを作成しました。
拡大/縮小処理にバイリニア補間処理を追加しました。
拡大/縮小処理をExcel VBAで作成しました。 また、X/Y方向のカウンタも固定小数にしています。 Excelで作ることにより、視覚的な画像確認が容易になります。
RGB→YUV変換をExcel VBAで作成しました。 Excelで作ることにより、視覚的な画像確認が容易になります。
除算回路を使用せずに乗算とビットシフトで演算する方法について説明しています。 演算式②のRTL記述例を追加しました。
小数を含む演算は、浮動小数点ユニットを使用する為、処理速度が遅くなります。 しかし、その式に乗算とビットシフトを追加することで演算速度が速くなります。 その方法を順を追って、また、ソフトウェア(C言語)とハードウェア(半導体設計)に分けて説明しま…
ASICでも、FPGAでもリセット回路(非同期リセット)について気を付ける必要があります。 (ASICではDFTも考慮する必要があります。) 製品の使用環境と基板上に関して、入力端子リセットにノイズが乗るのかなど、予め確認してからリセット構成を検討します。 リ…
対向モデルのSPI(マスタ側)の記述例です。 このモデルもUART同様、モデル内のACパラメータ(real)とタスクを実行する構成となっています。 タイミング 先にタイミング図を示します。 このSPIは、CSがネゲート時、CK(シリアルクロック)はLowとなり発振しません…
NIOSやMicroblazeなどのソフトマクロCPUは便利です。
実機確認でprintfを使用する場合に気を付けることです。
上位階層でタスクを実行することができるので、便利です。
ターゲット回路に双方向端子がある場合、どのようにしてテストベンチを記述するかの説明になります。
タスク(task)の記述
実務に沿ったテストベンチ記述を説明します。 私のやり方ですが、参考にして頂ければと思います。
FPGA内にCPUを配置した場合、CPUからLogic内のレジスタにアクセスする時のC言語記述についてです。 CPUからレジスタにリード/ライトする場合、C言語の予約語「volatile」が重要になります。 volatileは、C言語ソースをコンパイルする時の「最適化を抑止」し…
ハードとソフトのトレードオフについて、どう考えますか? ここでいうハードとはASIC/FPGAのロジック部分、ソフトはARMやNIOSなど組み込みソフトのことをいいます。 私の切り分けは、以下の通りです。 【ソフトウェア】 ・ユーザーと通信を行う箇所 例えば、…
画像処理の拡大と縮小処理です。(メモリを使用する場合) 基本概念は以下の通りです。 【拡大処理】 入力された画像データをメモリに格納し、変倍カウンタに応じて、 メモリからリードして拡大します。 【縮小処理】 変倍カウンタに応じてメモリに格納し、1ラ…
画像処理で過去のラインを使ってマトリクス演算する場合です。 例えば、 フィルタ処理、JPEGで使うDCTなど 外部デバイス(CCDなど)からライン毎に画像データが入力される場合、 フレームメモリを使用せずラインメモリを使って、必要な過去ラインデータを 取得…
画像処理を設計する上で私は画素データとは別に以下の信号を準備して、 画素データと一緒にパイプライン処理させます。 ①フレーム開始信号(パルス信号) ②フレーム終了信号(パルス信号) ③ライン開始信号(パルス信号) ④ライン終了信号(パルス信号) ⑤画像データ…
ソフトウェアとハードウェアの違いはわかりますか? FPGAというデバイスができてから、FPGAもソフトウェアと言えるとも思います。 ハードウェアを「簡単に書き換えられない」、 ソフトウェアを「簡単に書き換えられる」 と定義すれば。。。 そうなると、ハー…
はじめに。。。 半導体の設計の仕事について記載しています。