I am developing an open-source FPGA project that targets multiple FPGA development boards. The project itself is licensed MIT.

On one of the targets, the VGA-to-HDMI encoder chip included on the board requires some boot-up configuration via I2C. The vendor documentation includes an I2C master implementation for this purpose. The file starts with the following header:

// Permission:
//   Terasic grants permission to use and modify this code for use
//   in synthesis for all Terasic Development Boards and Altrea Development 
//   Kits made by Terasic.  Other use of this code, including the selling 
//   ,duplication, or modification of any portion is strictly prohibited.
// Disclaimer:
//   This VHDL or Verilog source code is intended as a design reference
//   which illustrates how these types of functions can be implemented.
//   It is the user's responsibility to verify their design for
//   consistency and functionality through the use of formal
//   verification methods.  Terasic provides no warranty regarding the use 
//   or functionality of this code.

If I add this file to the project, it would only be used when synthesizing for a Terasic/Arrow DECA development kit, so naively it should match the criteria of the license. However, the inclusion with the source code could, itself, be construed as "duplication". But there is no way to "use [...] this code [...] in synthesis for [...] Terasic Development Boards" without including the file as the synthesis input!

Can I use this I2C implementation in the Terasic target-specific parts of my FPGA project?


This is a bit tricky, I would like to offer a few approaches. I am assuming that you can ship the synthesized code freely, and your question only relates to sharing the source.

a) Whenever you distribute the part of the code which includes this Terasic code, you should always include the permission and disclaimer language. You should keep the Terasic code under their license and not include it in the MIT license.

b) My reading of the 'Permission' language is that where you use their code clearly for 'synthesis for [all] Terasic Development Boards ...' (that's a condition), then this permission includes the distribution. The first appearance of the word 'use' is a verb, and this verb is not well defined and can be interpreted mean anything, including distribution. 'Other use of this code...' refers to cases that are not for the purpose of 'synthesis for [all] Terasic Development Boards ...' and you seem to state that this is not possible with your project.

c) You may want to reach out to Terasic and ask them for guidance and clarification.

d) I am not a FPGA expert, but if there is a way to ship your code via GitHub and instruct the users to download the Terasic code themselves and include it before synthesis, then you could bypass the issue with shipping the Terasic source.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.