UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Observer pablo_trujillo
Observer
3,620 Views
Registered: ‎02-02-2017

Read part name from hdl

Jump to solution

Hello all,

I'm working in a desing that can run in 2 differents devices. According the device part selected in propierties, some defines in hdl changes. Can I read the part name from HDL?, something like that...

 

`ifdef _XC6SLX25
`define ADDRESS 8'hff
`else
`define ADDRESS 8'h0f
`end

 Thanks in advance!

Tags (2)
0 Kudos
1 Solution

Accepted Solutions
Teacher muzaffer
Teacher
6,305 Views
Registered: ‎03-31-2012

Re: Read part name from hdl

Jump to solution

@pablo_trujillo you don't have to use a define for this. You can pass a generic/parameter to your code while you synthesize and then do a generate statement (or use a package) to define the proper ADDRESS constant based on the parameter. It would be much cleaner too.

 

(untested code follows)

 

module top #(PACKAGE) (...);

 

generate if package == "XC6LX25" begin: sp6lx25

  constant ADDRESS = 8'hFF;

else

  constant ADDRESS = 8'h0F;

endgenerate

 

- Please mark the Answer as "Accept as solution" if information provided is helpful.
Give Kudos to a post which you think is helpful and reply oriented.
0 Kudos
6 Replies
Xilinx Employee
Xilinx Employee
3,614 Views
Registered: ‎08-01-2008

Re: Read part name from hdl

Jump to solution
No this is not supported . You can try using tcl script
Thanks and Regards
Balkrishan
--------------------------------------------------------------------------------------------
Please mark the post as an answer "Accept as solution" in case it helped resolve your query.
Give kudos in case a post in case it guided to the solution.
0 Kudos
Observer pablo_trujillo
Observer
3,604 Views
Registered: ‎02-02-2017

Re: Read part name from hdl

Jump to solution
Thank you very much balkris!!
0 Kudos
Moderator
Moderator
3,600 Views
Registered: ‎09-15-2016

Re: Read part name from hdl

Jump to solution

Hi @pablo_trujillo,

 

As balkris pointed out, you can try using tcl.

 

Not the exact requirement but for a quickie, something like this would help: the below code with fetch the xdc file as per the part used in the project. While the xdc located in d1 and d2 and the part compared is xa7a15tcsg325-1I.

 

set $origin_dir "."

set origin_proj_dir "[file normalize "$origin_dir/./d1"]"

set a [get_property part [current_project]]

set b xa7a15tcsg325-1I

if {"$a" == "$b"} {
read_xdc $origin_dir/./d1/Artix.xdc
} else {
read_xdc $origin_dir/./d2/Kintex.xdc
}

 

Regards,

Prathik

0 Kudos
Historian
Historian
3,571 Views
Registered: ‎01-23-2009

Re: Read part name from hdl

Jump to solution

You can definitely use a `define in your code.

 

The trick is to getting the macro properly defined.

 

I don't know how you are implementing your design - are you using scripting or the GUI? Are you using project mode or non-project mode?

 

If you are using the GUI in project mode, you are setting the part manually when you create the project. The part number is not available directly to the elaboration process of synthesis, but you can define define a macro using the project infrastructure.

 

In the "Project Manager" section go to "Project Settings" -> "Language Options" -> "Verilog Options" -> "Defines". Click the green plus sign (+) and fill in the Name and Value you want for the Verilog define. This define will then be used in both synthesis and implementation. So if you set the "Name" to  "_XC6SLX25" and the "Value" to anything (lets say 1) then your `ifdef in your code will work. If you want to unset it, then you need to go back through this process and delete the setting by selecting it in the Defines section of the Verilog Options and hit the - button (-).

 

If you are using scripting in project mode, then the same thing can effectively be accomplished by using the Tcl command

 

set_property verilog_define {_XC6SLX25=1} [current_fileset]

 

If you are using non-project batch mode, then it is a bit more complicated, but still possible...

 

Avrum

 

0 Kudos
Teacher muzaffer
Teacher
6,306 Views
Registered: ‎03-31-2012

Re: Read part name from hdl

Jump to solution

@pablo_trujillo you don't have to use a define for this. You can pass a generic/parameter to your code while you synthesize and then do a generate statement (or use a package) to define the proper ADDRESS constant based on the parameter. It would be much cleaner too.

 

(untested code follows)

 

module top #(PACKAGE) (...);

 

generate if package == "XC6LX25" begin: sp6lx25

  constant ADDRESS = 8'hFF;

else

  constant ADDRESS = 8'h0F;

endgenerate

 

- Please mark the Answer as "Accept as solution" if information provided is helpful.
Give Kudos to a post which you think is helpful and reply oriented.
0 Kudos
Observer pablo_trujillo
Observer
3,472 Views
Registered: ‎02-02-2017

Re: Read part name from hdl

Jump to solution

Thanks to all. The easier way for me to change between two devices is using a parameter on top.

 

Thanks & regards!

0 Kudos