// ************************************************************************** // // // // eses eses // // eses eses // // eses eseses esesese eses Embedded Systems Group // // ese ese ese ese ese // // ese eseseses eseseses ese Department of Computer Science // // eses eses ese eses // // eses eseses eseseses eses University of Kaiserslautern // // eses eses // // // // ************************************************************************** // macro DataWidth = 8; // bit-width of registers module DataConflictsLD(bv{16} ?instr,nat pc) { event nat adrMem; // address for memory access event bv{DataWidth} dataMem; // data for memory access event readMem,writeMem; // flags for reading/writing event reqMem,ackMem,doneMem; // signals for memory transaction // single CPU cpu: ScalarBehav(instr,pc,adrMem,dataMem,readMem,writeMem,reqMem,ackMem,doneMem); || // connected to data memory memory: MainMemory(adrMem,dataMem,readMem,writeMem,reqMem,ackMem,doneMem); } drivenby DataConflictsLDDrv { [13]bv{16} Prog; Prog = [ 0b1000000010000001, // 0: mov R1,1 0b1000000100000010, // 1: mov R2,2 0b1000000110000011, // 2: mov R3,3 0b1000001000000100, // 3: mov R4,4 0b1000001010000101, // 4: mov R5,5 0b0110100010100000, // 5: I1: ld R1,R2,0 0b0000001000011000, // 6: I2: add R4,R1,R4 0b0000001010010010, // 7: I3: add R5,R1,R1 0b0000001000010100, // 8: I3: add R4,R1,R2 0b0000100000000000, // 9: nop 0b0000100000000000, // 10: nop 0b0000100000000000, // 11: nop 0b0000100000000000 // 12: nop ]; pause; weak abort { loop { instr = Prog[pc]; pause; } } when(pc>=12); }