デジタル回路

演算回路

2007年6月27日

演算回路の設計図が完成。CPUの機能を少し変更することになりそう。a1/a2レジスタに、shiftとincrementの両方の機能を搭載すると回路が複雑になるため、shiftの演算結果はxレジスタに出力することにする。ここに書いた回路は、shift命令を含んでいる。
演算回路
(追記:A0-A4はアドレスラインではなく、コマンドの0-4ビット目の間違い)

回路が正しく動作するかどうかのシミュレーションをPHPで組んでみた。回路に該当する部分のソースコードは、以下のとおり。

class add_sub extends logic74 {
    function add_sub(){
        $this->init(func_get_args(),9);
    }
    function output(){
        $com0=$this->inputs[0];
        $com1=$this->inputs[1];
        $com2=$this->inputs[2];
        $com3=$this->inputs[3];
        $com4=$this->inputs[4];
        $i1=$this->inputs[5];
        $i2=$this->inputs[6];
        $cl=$this->inputs[7];
        $cu=$this->inputs[8];
        
        $xor_1  = new XOR74 ($cl,$i2);
        $nand_1 = new NAND74($i1,$i2);
        $nor_1  = new NOR74 ($i1,$i2);
        $nand_2 = new NAND74($cl,$i2);
        $nand_3 = new NAND74($xor_1->output(),$i1);
        $nand_4 = new NAND74($cu,$com1);
        $nand_5 = new NAND74($cl,NOT74::output($com1));
        $nand_6 = new NAND74($nand_2->output(),$nand_3->output());
        $nand_7 = new NAND74($xor_1->output(),$com3);
        $nand_8 = new NAND74($nand_4->output(),$nand_5->output());
        $nand_9 = new NAND74($nand_1->output(),$com0);
        $nand_10= new NAND74($nor_1->output(),NOT74::output($com0));
        $xor_2  = new XOR74 (1,$nand_7->output());
        $xor_3  = new XOR74 ($nand_6->output(),$xor_2->output());
        $xor_4  = new XOR74 ($xor_1->output(),$i1);
        $nand_11= new NAND74($nand_9->output(),$nand_10->output());
        $nand_12= new NAND74($nand_8->output(),NOT74::output($com2));
        $nand_13= new NAND74($nand_11->output(),$com2);
        $nand_14= new NAND74($nand_12->output(),$nand_13->output());
        $nand_15= new NAND74($xor_3->output(),NOT74::output($com4));
        $nand_16= new NAND74($i1,$com4);
        $nand_17= new NAND74($nand_15->output(),$nand_16->output());
        $nand_18= new NAND74($xor_4->output(),NOT74::output($com4));
        $nand_19= new NAND74($nand_14->output(),$com4);
        $nand_20= new NAND74($nand_18->output(),$nand_19->output());
        
        return array('o'=>$nand_20->output(), 'co'=>$nand_17->output());
    }

}

コメント

コメントはありません

コメント送信