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.

Link to comment
Share on other sites

  • 2 months later...
  • 2 weeks later...

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.

Link to comment
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?




Link to comment
Share on other sites

  • 1 month later...

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! :)

Link to comment
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.

Link to comment
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.

Link to comment
Share on other sites

  • 3 years later...

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):

Video of it running on Pipistrello:

Cheers, Magnus

Link to comment
Share on other sites

Here is a video of it running on a Pepino LX9 board:

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

  • Download the zip file 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.


Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.