デジタル回路

8ビット演算回路

2007年6月29日

先日の回路を組み合わせて、8ビットどうしの演算をするための回路を設計した。実行できるのは、加算・減算・NAND・NOR・右シフト・左シフト。設計中のコンピューターにおける、inc/dec 以外の演算を網羅している。
演算回路
なお、m1, m2, m4 は、コマンドラインのデータ信号。


この回路のシミュレータは、ここから実行可能。回路に相当する部分のソースコードは、以下のとおり。
$as=array();
for ($i=0;$i<8;$i++) {
    if (0<$i) $prev=$as[$i-1]->output();
    else $prev=array('o'=>0,'co'=>0);
    $as[$i]=new add_sub($com->getData('d0'),
        $com->getData('d1'),
        $com->getData('d2'),
        $com->getData('d3'),
        $com->getData('d4'),
        $d1->getData('d'.$i),
        $d2->getData('d'.$i),
        $prev['co'],
        '?');
}
$hex=0;
for ($i=0;$i<8;$i++) {
    if (0<$i) $prev=$as[$i-1]->output();
    else $prev=array('o'=>0,'co'=>0);
    if ($i<7) $next=$as[$i+1]->output();
    else $next=array('o'=>0,'co'=>0);
    $as[$i]->set($com->getData('d0'),
        $com->getData('d1'),
        $com->getData('d2'),
        $com->getData('d3'),
        $com->getData('d4'),
        $d1->getData('d'.$i),
        $d2->getData('d'.$i),
        $prev['co'],
        $next['co']);
    $data=$as[$i]->output();
    echo '<tr><td>d'.(int)$i.'</td><td>'.(int)$data['o'].'</td></tr>';
    $hex=$hex+$data['o']*pow(2,$i);
}
$as0=$as[0]->output();
$as7=$as[7]->output();
$carry=NAND74::output($com->getData('d1'),$com->getData('d4'));
$carry=NAND74::output($carry,$carry);
$carry=NAND74::output($carry,NOT74::output($com->getData('d2')));
$nand1=NAND74::output($as0['co'],NOT74::output($carry));
$nand2=NAND74::output($as7['co'],$carry);
$carry=NAND74::output($nand1,$nand2);

コメント

コメントはありません

コメント送信