シミュレーション

Verilogライクなシミュレータ

2009年2月24日

C++で次のように書ける、ロジック回路のシミュレータを作ってみた。

bool input1,input2;
logic* na1=nandGate();
logic* na2=nandGate();
na1->connect(&input1,&na2->output);
na2->connect(&na1->output,&input2);

これは、NANDを二つつなげただけの、もっともシンプルなフリップフロップ。前にPHPで書いたものと違って、今回のは回路の内の遅延などもシミュレーションできるようにしてある。なので、ラッチやフリップフロップを組み合わせた複雑な回路のシミュレーションにも使えるはず。

使ったことないし良く分からないが、Verilogというものに構文が良く似ているようだ。既存のソフトの使い方を覚えるより、使いにくくても自作して細かな調整を自身で行うほうが、私には向いている。今回のシミュレータは、遅延時間を素子ごとにランダムに設定することもできるので、多分、回路を設計するさいの動作確認にも使える。

当該プログラムの、回路図に相当するファイル(mainboard.cpp)のソースコードは、次の通り。

#include "stdafx.h"
#include "circuit.h"

mainBoard::mainBoard(){
    std::cout<<"The main board loaded.\n";

    bool input1,input2;
    logic* na1=nandGate();
    logic* na2=nandGate();
    na1->connect(&input1,&na2->output);
    na2->connect(&na1->output,&input2);

    input1=H;
    input2=L;
    checkSignals();
    std::cout<<input1<<input2<<na1->output<<na2->output<<"\n";
    input1=H;
    input2=H;
    checkSignals();
    std::cout<<input1<<input2<<na1->output<<na2->output<<"\n";

    input1=L;
    input2=H;
    checkSignals();
    std::cout<<input1<<input2<<na1->output<<na2->output<<"\n";
    input1=H;
    input2=H;
    checkSignals();
    std::cout<<input1<<input2<<na1->output<<na2->output<<"\n";

}

実行結果は、次の通り。
The main board loaded.
1001
1101
0110
1110

Push enter to exit.

コメント

コメントはありません

コメント送信