演算回路
2007年6月27日
演算回路の設計図が完成。CPUの機能を少し変更することになりそう。a1/a2レジスタに、shiftとincrementの両方の機能を搭載すると回路が複雑になるため、shiftの演算結果はxレジスタに出力することにする。ここに書いた回路は、shift命令を含んでいる。
(追記:A0-A4はアドレスラインではなく、コマンドの0-4ビット目の間違い)
回路が正しく動作するかどうかのシミュレーションをPHPで組んでみた。回路に該当する部分のソースコードは、以下のとおり。
(追記: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()); } }