TAG

SoundBlaster FM HDL

Recommended Posts

Pacedev is open source IIRC, I've been in contact with the owner off and on discussing FPGA related things. The forum was still down last I checked but I did get him to bring the repository back up. If it's gone now I did clone the whole thing so I could post it elsewhere.

Share this post


Link to post
Share on other sites

It looks to me like the code on OpenCores is more complete even though it specifically calls out the OPL2 as not fully working

Share this post


Link to post
Share on other sites

I'm not familiar with DesignLab, but I assume it uses ISE/XST as the underlying synthesizer as you would be targeting the Spartan 6. As ISE/XST doesn't support the newer SystemVerilog features the code will have to be back-ported to Verilog2001, but that should be fairly easy. The only device specific construct in the code is the MMCM, which will have to be regenerated for the Spartan and the clock frequency of the external clock on the board.

 

If the design doesn't fit the Spartan, you could pretty easily trim off the second bank of registers and essentially have an OPL2.

 

The last sort of difficult part would be porting the CPU interface to whatever you are using on that board. But definitely doable.

Share this post


Link to post
Share on other sites

The DesignLab format is pretty much just making your core Wishbone compatible and then we convert it to schematic format and concatenate all of the Wishbone signals together to make it easy to connect in the schematic editor.

 

Yes, it is indeed using ISE/XST for synthesis on the Spartan 6. So if you are willing to make your core fit (OPL2) and give it a Whishbone interface then I can do the rest to bring it into DesignLab so people can then use it with the RetroCade synth!

 

Does that sound good?

 

Thanks!

Jack.

Share this post


Link to post
Share on other sites

Sounds like a great project for someone with motivation. I'll help out as much as I can but this is a decently substantial project that I don't have time for. I bet someone in your user base has the know how and motivation to do this.

 

Another alternative to converting to Verilog... if someone has access to Synopsis Synplify, they could generate a netlist with the existing SystemVerilog that could be imported by ISE. Orrr, sounds like you guys are VHDL people so just convert to that. As VHDL people you're already used to lots of typing! :)

Share this post


Link to post
Share on other sites

Thanks for the link. Interesting read.

So they use sin(x)*a = exp(log(sin(x)) + log(a)), with ROMs for log(sin(x)) and exp(), avoiding the multiplication with the envelope.

Interesting that 8 bit phase resolution is enough.

 

I still own my first two synths, Korg 707 and Yamahaha DX7 II, the former being a clone of the latter with improved aerodynamics...

FM rules, even if it sounds horrible :D I used the 2x6 operators mainly for additive synthesis as wannabe fake Hammond organ.

Share this post


Link to post
Share on other sites

Well, just to clarify, frequency resolution is 20 bits or about 0.047Hz, determined by the width of the phase accumulator and the sample rate. The phase input to the ROMs is truncated as is typical with NCOs but this doesn't affect the frequency accuracy. Even though the input to the sine ROM is 8 bits, phase resolution is actually 10 bits, as only a quarter of the sine wave is stored and symmetry used to translate it to all 4 quadrants. But yes this truncation does cause periodic phase error that typically shows up as spurious products in the frequency domain. Not sure if they're audible.

 

Yeah the OPL3 has some additive synthesis modes too.

Share this post


Link to post
Share on other sites

>> phase resolution is actually 10 bits,

 

good point.

I was just surprised that this works with such simple hardware. Artifacts are part of the sound :)

Share this post


Link to post
Share on other sites

Bringing this old thread back to life...

In my quest to get a fully working version of Doom (including music) running on Pipistrello I found Greg's OPL3 project and decided to port it to Verilog as he mentioned above, and got it running on Pipistrello, as well as an OPL2 version running on Pepino LX9 (100% of slices occupied!).  It uses a Microblaze_mcs processor with 32K ram to play .dro files.

Here is a link to a zip file with the Pepino_lx9 project (including Verilog sources and a simple dro-file player): http://www.saanlima.com/download/pepino-v1.1/opl2_pepino_lx9.zip

Video of it running on Pipistrello: http://www.saanlima.com/videos/IMG_4880.mov

Cheers, Magnus

Share this post


Link to post
Share on other sites

Here is a video of it running on a Pepino LX9 board: http://www.saanlima.com/videos/IMG_4882.mov

If you have a Pepino LX9 board and want to try it, here is how:

  • Download the zip file opl2_pepino_lx9.zip and unzip it somewhere
  • Place the files in the dro directory on a micro-sd card and put it in the sd-card socket on Pepino
  • Open up a terminal (like Putty) at 115200 baud connected to the Pepino board
  • Load or flash the bitfile opl2player.bit in the opl2player director

At the promt on the terminal, enter the name of the dro-file you want to play (it will loop forever).  Stop it by entering S.

BTW, the code should work on a Papilio Pro by modifying the .ucf file to match the pins for the sd-card and audio wings and re-synthesize.

Magnus

Share this post


Link to post
Share on other sites

I think I nuked too many files in the ipcore_dir folder for it to compile so I just downloaded the whole project again, this time with all the files.  If you have problems building it just re-download the zip file.

Magnus

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now