Yes Asterisk makes a wonderful IVR platform. Especially because the IVR can be programmed in any language that can write to stdin and read from stdout.
You ll need read up on Asterisk on sites like this but in the interest of getting you going here is a teaser of a very simple menu.
[incoming-lines]
exten => s,1,Noop()
exten => s,n(msg),Background(Press1OrPress2)
exten => s,n,WaitExten(8)
exten => s,n,Hangup()
exten => 1,1,Playback(YouPressed1)
exten => 1,n,Goto(msg)
exten => 2,1,Playback(YouPressed2)
exten => 2,n,Goto(msg)
exten => t,1,Playback(YouTimedOut)
exten => t,n,Goto(msg)
exten => i,1,Placback(YouMadeInvalidEntry)
exten => i,n,Goto(msg)
Now that is obviously very silly but gets the point across. If you want to take it a step further there are packages like phpagi that allow you to program the IVR in PHP. The way to make the dialplan invoke the AGI script is.
[incoming-lines]
exten => s,1,Noop()
exten => s,n,agi("http://yourapache/yourscript.php")
exten => s,n,Hangup()
I ll leave it up to you to read up on phpagi but this should get you started. Yes you can simulate it without any hardware. You ll need a computer with Asterisk on it of course, and a soft phone, with a speaker. That s all it takes to test IVR.