FC2カウンター FPGAの部屋 2011年06月02日
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

今まで書いた技術論文

今まで書いた技術論文を下に示す。お恥ずかしい書き方のあるが、書いておいてよかったと思う。

1.KUE―CHIP2マイクロプロセッサ用エミュレータの開発
2.EDO制御モジュールの実現
3.バスプロトコル変換チップの実現
4.MIPSプロセッサ実験システムの開発
5.クラスタ計算機用ネットワークインターフェースの実現
6.Altera社CPLDとその設計事例
7.Maestro2 ネットワークインターフェースの開発
8.Maestro2 スイッチボックスの開発
9.Maestro3 クラスタネットワーク用基板の設計
10.FPGA による PCI バス・インターフェース回路の実装
11.Spartan3A Starter Kit による DDR2 SDRAM コントローラの実装
12.FPGAを使用したCMOSカメラ・ディスプレイ回路の製作
13.2次元Max-Plusウェーブレット変換・逆変換実証回路の作製(2012年に発表)
14.DDR2 SDRAM をフレームバッファに使用した CMOS カメラ表示回路の実装
15.夏休み自由研究お助け隊の新規テーマ作成と運用について
16.ニューラルネットワークを使用した HD から 4K2K への解像度変換ボケ復元回路の実装
17.ソフトウェアとハードウェア性能比較実験装置の開発

後は、トランジスタ技術とFPGA技術6号に書かせていただいた。
FPGAマガジン No.14FPGAマガジン No.15 に書かせて頂いた。
ほとんどCPLD、FPGA関係です。
  1. 2011年06月02日 21:43 |
  2. 回顧録
  3. | トラックバック:0
  4. | コメント:0

Verilatorを試してみる8(SystemCモード4:CharDispCtrlerプロジェクト)

今度は、キャラクタ・ディスプレイ・コントローラ(CharDispCtrler.v) をVerilatorでシミュレーションしてみることにした。
"キャラクタ・ディスプレイ・コントローラ"、”キャラクタ・ディスプレイ・コントローラの構成”を参照のこと。

ここでの問題は、char_gen_rom.v でXilinxのプリミティブのRAMB16_S9とframe_buffer.v で同じくRAMB16_S2_S2を使用していることだ。果たしてXilinx社製のプリミティブがVerilatorでシミュレーション出来るかが問題だと思った。
Webで検索してみると、Verilatorのフォーラムの”Simulating Xilinx Projects”を発見して、この通りにやってみることにした。(結論としてはうまくいきませんでした)

まずは、Xilinx社のプリミティブのソースのうちのRAMB16_S9.v, RAMB16_S2_S2.v, glbl.v を現在のフォルダにコピーした。(もうすでにCharDispCtrler_tb_sc.cppを作成してある)
Verilator_24_110602.png

SystemCのテストベンチ、CharDispCtrler_tb_sc.cppを作成した。CharDispCtrler_tb_sc.cppを下に示す。

// CharDispCtrler_tb_sc.cpp

#include "VCharDispCtrler.h"
#include "verilated_vcd_sc.h"

int sc_main(int argc, char **argv) {

    Verilated::commandArgs(argc, argv);   // Remember args

    sc_clock clk ("clk"40, SC_NS);
    sc_signal<bool> reset;
    sc_signal<uint32_t> processor_addr;
    sc_signal<uint32_t> processor_din;
    sc_signal<bool> processor_we;
    sc_signal<bool> VGA_RED, VGA_GREEN, VGA_BLUE;
    sc_signal<bool> VGA_HSYNC, VGA_VSYNC;
    int clk_count;
    
    VCharDispCtrler *top;
    
    top = new VCharDispCtrler("top");
    
    top->clk(clk);
    top->reset(reset);
    top->processor_addr(processor_addr);
    top->processor_din(processor_din);
    top->processor_we(processor_we);
    top->VGA_RED(VGA_RED);
    top->VGA_GREEN(VGA_GREEN);
    top->VGA_BLUE(VGA_BLUE);
    top->VGA_HSYNC(VGA_HSYNC);
    top->VGA_VSYNC(VGA_VSYNC);
    
    Verilated::traceEverOn(true);
    VerilatedVcdC* tfp = new VerilatedVcdC;
    top->trace (tfp, 99);
    tfp->open ("simx_sc.vcd");
    
    processor_addr = 0;
    processor_din = 0;
    processor_we = 0;
    reset = 1;
    
    sc_start(45, SC_NS);
    reset = 0;
    
    sc_start(160, SC_NS);
    processor_din = 0x3B0;    // RGB=111(最上位), キャラクタ0
    
    sc_start(40, SC_NS);
    processor_we = 1;
    processor_addr = 80;    // 画面の2行1列目のキャラクタのアドレス
    
    sc_start(40, SC_NS);
    processor_we = 0;
    processor_din = 0x3C1;    // RGB=111(最上位), キャラクタA
    
    sc_start(40, SC_NS);
    processor_we = 1;
    processor_addr = 81;    // 画面の2行2列目のキャラクタのアドレス
    
    sc_start(40, SC_NS);
    processor_we = 0;
    
    sc_start(20000000, SC_NS);
    
    tfp->close();
    delete top;
    
    exit(0);        // シミュレーション終了
}    


最初に、とりあえずそのままの状態でコンパイルを試みた。コマンドを下に示す。

verilator -Wno-lint -sc --trace CharDispCtrler.v --exe CharDispCtrler_tb_sc.cpp


そうすると予想通りエラー。
Verilator_23_110601.png

Verilatorのフォーラムの”Simulating Xilinx Projects”に従って、RAMB16_S9.v, RAMB16_S2_S2.v, glbl.vを書き換えてみることにした。

1.glbl.vをWebサイトからダウンロードしたファイルに交換(これでglbl.vは終了)
2.module文の下に、// verilator tracing_offを挿入した
3.tri0 GSRを含むラインを消去した
4.GSRをglbl.GSRに置換した
5.initial文内の<= を= に置換した
6.遅延を表す#100 などを消去した
7.char_gen_rom.v, frame_buffer.v にglbl glbl;文を追加した


上記の対策を取ってみたが、やはりエラーが出る。可能なかぎり対策をとてみたがInternal Errorが出てしまった。
Verilator_25_110602.png

ここで諦めることにする。Verilatorのフォーラムの”Simulating Xilinx Projects”でもBlock RAMの変換は成功していないそうだ。残念。。。

Verilatorは、Verilogの論理合成記述のみが変換可能なのが残念だ。XilinxのIPは自分で書きなおさないと使用することが出来ないようだ。
  1. 2011年06月02日 05:26 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:4