From: maverick on
Hi,
I need to know how can I prohibit a configuration file from being
downloaded on a similar FPGA device. For example, if I have two
similar FPGA boards and I want only one FPGA board to be successfully
programmed with the configuration file whereas if the same
configuration file is downloaded on the other FPGA board, it should
not get programmed. The target device is Virtex II Pro. I know there
is this encryption feature available there for Virtex II and VIrtex II
Pro devices but I am talking about the environment where the FPGAs
will be programmed on startup through host application through PCI and
there is no human intervention for programming the FPGA (or providing
the encryption key). Here is the whole concept. I have a PC system
where a PCI based 'COTS' FPGA card is installed. On startup, my
application programs the FPGA board with the configuration file.
However, if another similar FPGA board is installed in the same PC
system, the application should (somehow) not programm the FPGA or the
FPGA fails to get programmed successfully. I looked into the Device
IDCODE thing but I came to know that the IDCODEs are the same for all
FPGAs belonging to a particular family for example Spartan 3 sc3s1000
FPGA parts will have the same IDCODE. (had it been unique, I would
have stored the IDCODE in my application and on finding a different
IDCODE, I would have aborted the programming device sequence)

I hope I have mentioned my problem statement clearly........

Any suggestion.........

Farhan
From: Antti on
On 3 Apr., 13:16, maverick <sheikh.m.far...(a)gmail.com> wrote:
> Hi,
> I need to know how can I prohibit a configuration file from being
> downloaded on a similar FPGA device. For example, if I have two
> similar FPGA boards and I want only one FPGA board to be successfully
> programmed with the configuration file whereas if the same
> configuration file is downloaded on the other FPGA board, it should
> not get programmed. The target device is Virtex II Pro. I know there
> is this encryption feature available there for Virtex II and VIrtex II
> Pro devices but I am talking about the environment where the FPGAs
> will be programmed on startup through host application through PCI and
> there is no human intervention for programming the FPGA (or providing
> the encryption key). Here is the whole concept. I have a PC system
> where a PCI based 'COTS' FPGA card is installed. On startup, my
> application programs the FPGA board with the configuration file.
> However, if another similar FPGA board is installed in the same PC
> system, the application should (somehow) not programm the FPGA or the
> FPGA fails to get programmed successfully. I looked into the Device
> IDCODE thing but I came to know that the IDCODEs are the same for all
> FPGAs belonging to a particular family for example Spartan 3 sc3s1000
> FPGA parts will have the same IDCODE. (had it been unique, I would
> have stored the IDCODE in my application and on finding a different
> IDCODE, I would have aborted the programming device sequence)
>
> I hope I have mentioned my problem statement clearly........
>
> Any suggestion.........
>
> Farhan

V2Pro has no efuse like V5 has, so you cant personalize the FPGAs on
COTS board

so whatever you do for your goal it need something on the boards to be
different (except the FPGA)
the only possibility would be the encryption, if not using it, need
something else

Antti






From: John McCaskill on
On Apr 3, 5:16 am, maverick <sheikh.m.far...(a)gmail.com> wrote:
> Hi,
> I need to know how can I prohibit a configuration file from being
> downloaded on a similar FPGA device. For example, if I have two
> similar FPGA boards and I want only one FPGA board to be successfully
> programmed with the configuration file whereas if the same
> configuration file is downloaded on the other FPGA board, it should
> not get programmed. The target device is Virtex II Pro. I know there
> is this encryption feature available there for Virtex II and VIrtex II
> Pro devices but I am talking about the environment where the FPGAs
> will be programmed on startup through host application through PCI and
> there is no human intervention for programming the FPGA (or providing
> the encryption key). Here is the whole concept. I have a PC system
> where a PCI based 'COTS' FPGA card is installed. On startup, my
> application programs the FPGA board with the configuration file.
> However, if another similar FPGA board is installed in the same PC
> system, the application should (somehow) not programm the FPGA or the
> FPGA fails to get programmed successfully. I looked into the Device
> IDCODE thing but I came to know that the IDCODEs are the same for all
> FPGAs belonging to a particular family for example Spartan 3 sc3s1000
> FPGA parts will have the same IDCODE. (had it been unique, I would
> have stored the IDCODE in my application and on finding a different
> IDCODE, I would have aborted the programming device sequence)
>
> I hope I have mentioned my problem statement clearly........
>
> Any suggestion.........
>
> Farhan

Since you mention that you are loading the bitfile over the PCI bus, I
am assuming that the FPGA is on the PCI card, as opposed to a daugher
card. Is this correct?

If so, you could use the PCI configuration space to tell the cards
appart. If you also know what board the bitfile is for, then the drive
could check to make sure that the board and bitfile versions match,
and refuse to load the bit file if it does not.

Regards,

John McCaskill
www.FasterTechnology.com
From: MM on
"John McCaskill" <jhmccaskill(a)gmail.com> wrote in message
news:c4d146c4-2719-4817-b11c-750da7e80640(a)s50g2000hsb.googlegroups.com...

>Since you mention that you are loading the bitfile over the PCI bus, I
>am assuming that the FPGA is on the PCI card, as opposed to a daugher
>card. Is this correct?
>
>If so, you could use the PCI configuration space to tell the cards
>appart. If you also know what board the bitfile is for, then the drive
>could check to make sure that the board and bitfile versions match,
>and refuse to load the bit file if it does not.

I was just about to suggest the same solution. PCI spec requires every type
of board to have unique Vendor, and device IDs, as well as there are
SubSystem IDs. Now, this is all great unless the OP is implementing the PCI
bridge in the same FPGA... Ooops...


/Mikhail


From: maverick on
On Apr 4, 3:41 am, "MM" <mb...(a)yahoo.com> wrote:
> "John McCaskill" <jhmccask...(a)gmail.com> wrote in message
>
> news:c4d146c4-2719-4817-b11c-750da7e80640(a)s50g2000hsb.googlegroups.com...
>
> >Since you mention that you are loading the bitfile over the PCI bus, I
> >am assuming that the FPGA is on the PCI card, as opposed to a daugher
> >card. Is this correct?
>
> >If so, you could use the PCI configuration space to tell the cards
> >appart. If you also know what board the bitfile is for, then the drive
> >could check to make sure that the board and bitfile versions match,
> >and refuse to load the bit file if it does not.
>
> I was just about to suggest the same solution. PCI spec requires every type
> of board to have unique Vendor, and device IDs, as well as there are
> SubSystem IDs. Now, this is all great unless the OP is implementing the PCI
> bridge in the same FPGA... Ooops...
>
> /Mikhail

Thanks everyone for your replies. I think I need to add some more info
here. Infact, I am not trying to secure my FPGA design or bitstream
here. I am trying to prohibit generation of multiple copies of the
same system. For example, assume that I have developed a system which
comprises of a PC and a PCI based FPGA board which is mounted on the
PCI slot of the same PC. The PCI based FPGA board is commercially
availble from a vendor. The host application that runs on the PC
programs the FPGA on application startup. If I deliver this system to
a customer, it is quite possible that the Hard Disk image of the
actual system is created, the same PCI based FPGA board is purchased
from the same vendor and exactly the same PC is purchased. When all
these things are hooked up in the PC...........bingo..........we have
another system ready. In this scenario, I dont see the device ID or
vendor ID stuff is of any use because these IDs would be the same for
the same FPGA board. I dont have any non-volatile memory on the FPGA
board where I can write my own sequnce which can be read out and
verified by the application at startup.

Any thoughts.............

Farhan