Quartus back porting:
Your laptop appears to have a 64-bit CPU, so you could upgrade your version of Windows to 64-bit if that's an option for you. (Note that Windows 10 compatibility is somewhat broken at this point, but we're working to fix that.)
It appears that beginning with Quartus 14.0, only 64-bit operating systems are supported. If you want to stick with 32-bit Windows, consider upgrading your Quartus to v13.x -- it should be somewhat easier to back port our design to v13.x than v11.x.
I will try to outline the general process of back porting the design. However, as I'm not going to test this for you, some steps may be missing or inaccurate. As time goes on, you may find it easier to upgrade your host machine or use a virtual machine as Rey suggested earlier.
First, make sure you have the latest master. Then, take a look at all the _hw.tcl files that Quartus is complaining about and change lines such as:
to read as follows:
One example of this:
https://github.com/Nuand/bladeRF/blob/6 ... hw.tcl#L15
You'll also want to edit (text editor is fine) the nios_system.qsys file. Do a search for "version=" and change anything with a version newer than your version of Quartus. For example, something that reads "version=17.0" you'd replace with "version=11.0" or "version=13.0" if you have Quartus 11 or 13 installed, respectively.
After doing this, I'm almost certain you will have new errors such as unknown ports/parameters/etc. in the Qsys system and/or _hw.tcl files. You'll have to go into each file and manually delete or rename ports/parameters to their Qsys 11.0 or 13.0 equivalents. This is going to be time-consuming and you'll have to do this every time we publish changes to these bits of code. I expect the VHDL to not require anything crazy to back port to an older version of Quartus.
Getting samples out of the GPIO header:
What you have is the right idea, but syntactically incorrect. First, the signal assignment operator on lines 1175 and 1177 is going the wrong way (should be <=). Second, you can't assign a vector to an individual bit. Finally, you'll have an issue using GPIO[1] as an output (it's a clock input only, a limitation of the Cyclone IV FPGA). To make things slightly easier, the upper 4 bits of rx_sample_corrected_* can be ignored -- only bits 11:0 contain actual sample data. (We sign-extend the 12 bits up to 16 bits for future expansion and to make the sample processing more friendly on the host side of things.)
You can simplify the VHDL to look something like the following:
Code: Select all
exp_gpio(29 downto 18) <= rx_sample_corrected_q(11 downto 0);
exp_gpio(13 downto 2) <= rx_sample_corrected_i(11 downto 0);
Consider also piping out a clock and data_valid indicator associated with this data stream -- they will be helpful if you intend to analyze this data with external equipment.
Having said all this, if you plan on connecting another microcontroller or FPGA to the GPIO port to read these samples, you'll want to add appropriate timing constraints to keep the data/clock skew within a known, predictable window across FPGA builds. You would do the same on the receiving side (if possible) to avoid metastability issues. Take a look at our
constraints/bladerf.sdc for a general idea of what these constraints look like.