#include #include #include const char* head = "stepsize 1000ns vector Ivec I8 I7 I6 I5 I4 I3 I2 I1 I0 vector Ovec O8 O7 O6 O5 O4 O3 O2 O1 O0 vector state StBit0 Stbit1 StBit2 vector clock clocka clockb clock clocka 1 0 0 0 clock clockb 0 0 1 0 clock Vdd! 1 1 1 1 clock GND! 0 0 0 0 ana trigger clock restart start readyB hiloout Ivec state carry_in resetPL finish Ovec w trigger clock restart start readyB hiloout Ivec state carry_in resetPL finish Ovec\n "; const char* linenames[] = { "trigger", "restart", "start", "readyB", "hiloout", "I8", "I7", "I6", "I5", "I4", "I3", "I2", "I1", "I0" }; enum Lines { trigger, restart, start, readyB, hiloout, I8, I7, I6, I5, I4, I3, I2, I1, I0 }; const int NUM_ITERATIONS = 15; void put_bits(unsigned long b, int l = NUM_ITERATIONS) { for(int i = 0; i < l; ++i){ cout << ' ' << (b % 2); b >>= 1; } } void put_line(unsigned int line, unsigned long b){ cout << "V " << setw(8) << linenames[line]; put_bits(b); cout << '\n'; } int main(int argc, const char* argv[]) { if( argc != 3 ){ cerr << "bad arguments" << endl; return 1; } long argA = atol(argv[1]); long argB = atol(argv[2]); cout << head; for(int i = trigger; i <= restart; ++i){ put_line(i,1ul); } put_line(start, (1ul << 2)); put_line(readyB, (3ul << 5)); put_line(hiloout, (3ul << 13)); for(int i = I8; i <= I0; ++i){ unsigned long b = 0; for(int j = 0; j < 11; ++j){ b |= ((argB >> (I0 - i)) & 0x01); b <<= 1; } for(int j = 0; j < 4; ++j){ b |= ((argA >> (I0 - i)) & 0x01); b <<= 1; } put_line(i, b); } cout << "R" << endl; return 0; }