Okay, the Trace32 simulator I linked in the first post works. Here's how you can load files:
Take your .bin files from assembly/compilation and change the extension to .hex. After you do that, open up the simulator and hit File>Load. This will bring up a file dialog that will allow you to open up your file. Then, do View>List Source and View>Registers. Change PC to 0 and your binaries should be loaded into the source window. You can then step through them as you wish.
EDIT: Okay, I've been trying to track down a bug that I thought was in Khavi for about 4 hours now. Turns out, the simulator itself is pretty bugged and Khavi is fine. The simulator doesn't handle indirect moves very well. For example, the following code won't work:
mov.l @(0x01,PC),r1
rts
.long 0xDEADBEEF
The simulator will place 0x01 into register r1, not the value 0xDEADBEEF.
*Edit* Removed duplicate paragraph