blob: a132665debccfea8ecabd9770591b243fc0ebd2c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#ifndef __SYSC_CPU_ADDER16BIT_HPP
#define __SYSC_CPU_ADDER16BIT_HPP
#include "systemc.h"
#include "../cpu_and/cpu_and.hpp"
#include "../cpu_or/cpu_or.hpp"
#include "../cpu_not/cpu_not.hpp"
#include "../cpu_full_adder/cpu_full_adder.hpp"
SC_MODULE (cpu_adder16bit)
{
const static int ADD_N=16;
//Inputs
sc_in <bool> in_a[ADD_N];
sc_in <bool> in_b[ADD_N];
sc_in <bool> in_carry;
sc_out <bool> out_sum[ADD_N];
sc_out <bool> out_carry;
cpu_full_adder *fulladder[ADD_N];
sc_signal<bool> sig_fadd[ADD_N-1];
void do_adder16bit()
{
/*
if (in_sel.read() == 0)
{
out_c.write(in_a.read());
}
if (in_sel.read() == 1)
{
out_c.write(in_b.read());
}
*/
}
SC_CTOR(cpu_adder16bit)
{
int i;
for (i=0;i<16;i++)
{
const int sz=16;
char *s=(char *)malloc(sz); //need to free s?
snprintf(s,sz,"FULLADD%02d",i);
fulladder[i] = new cpu_full_adder(s);
}
for (i=0;i<16;i++)
{
fulladder[i]->in_a(in_a[i]);
fulladder[i]->in_b(in_b[i]);
fulladder[i]->out_sum(out_sum[i]);
}
fulladder[0]->in_c(in_carry);
fulladder[ADD_N-1]->out_carry(out_carry);
for (i=1;i<ADD_N;i++)
{
fulladder[i]->in_c(sig_fadd[i-1]);
fulladder[i-1]->out_carry(sig_fadd[i-1]);
}
//SC_METHOD(do_dmux);
//sensitive << in_a << in_b << in_sel;
}
};
#endif
|