Approach to use Xilinx IP within questa

Hello People,

I have an uni project which I have to verify using the UVM.
This project has some IP (ROM,RAM, IFFT,…)

I am going to verify the functionality using Matlab predictors (I already have them, I only have to mofidy them slightly).

I am not sure how to approach this. At the moment I do not have the Xilinx ISE installed as it is too big (and I do not know if I will have enough space to install it).

Is it possible to compile xilinx ipcores from questa?

I have seen this:

I guess once the IP is compiled is as easy as adding the library, right?

Thanks in advance,
Antonio

In reply to antonio92m:

This is how i did that
Setup the simualtor as questa/modelsim in ise.
Than generated simulations scripts using ise.
After that edited these sctips, added uvm part there.
However as you dont have ise installed, it would be difficult to simulate. I would suggest try to download the ise simulations scripts from internet and than manually edit them.

Thanks
Hayk

In reply to antonio92m:

Hello Antonio,

you can compile any HDL code in Questa. If the code is not simple VHDL or Verilog/SV you need the corresponding libraries, for instance foe Xilinx UDPs.
I’d start to compile the code. The simulator will show you what is missing. I know this is a trial-and-error approach. But I believe this helps you.

Christoph

In reply to haykp:
Hello Haykp,

I do not have ISE installed in my laptop but I have ISE installed in another computer whichs is not mine and where I cannot install questasim.

I have tried what you mentioned, but I do not know where those scripts are.

Thanks for your suggestion!

Antonio

In reply to chr_sue:

Hello Christoph,

The thing is, I do not know how to link these IP cores to Questa. I used ISE before and there using coregen you eventually instiate the component in your vhdl file and ISE works everything for you.
For example within a TOP I have:


COMPONENT memory
  PORT (
    clka : IN STD_LOGIC;
    ena : IN STD_LOGIC;
    wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
    addra : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
    dina : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
    clkb : IN STD_LOGIC;
    enb : IN STD_LOGIC;
    addrb : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
    doutb : OUT STD_LOGIC_VECTOR(0 DOWNTO 0)
  );
END COMPONENT;


Which is a component ISE created automatically.

I would need to compile that component (and some more) but I do not know how.
In the ISE GUI, with the project open you can see the IPcores declared, and if you click over “view HDL functional model” it opens a VHD file which import the Library: XilinXcoreLib.

Then from the linux terminal I type the command:
find / -name xilinxcorelib
I get an output:
./vhdl/xst/lin64/xilinxcorelib
./vhdl/xst/lin/xilinxcorelib
./vhdl/xst/xilinxcorelib
./vhdl/hdp/lin64/xilinxcorelib
./vhdl/hdp/lin/xilinxcorelib

Also when opening this VHD file in ISE it looks like:



--------------------------------------------------------------------------------
--    This file is owned and controlled by Xilinx and must be used solely     --
--    for design, simulation, implementation and creation of design files     --
--    limited to Xilinx devices or technologies. Use with non-Xilinx          --
--    devices or technologies is expressly prohibited and immediately         --
--    terminates your license.                                                --
--                                                                            --
--    XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" SOLELY    --
--    FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR XILINX DEVICES.  BY    --
--    PROVIDING THIS DESIGN, CODE, OR INFORMATION AS ONE POSSIBLE             --
--    IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD, XILINX IS      --
--    MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE FROM ANY      --
--    CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING ANY       --
--    RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY       --
--    DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE   --
--    IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR          --
--    REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF         --
--    INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A   --
--    PARTICULAR PURPOSE.                                                     --
--                                                                            --
--    Xilinx products are not intended for use in life support appliances,    --
--    devices, or systems.  Use in such applications are expressly            --
--    prohibited.                                                             --
--                                                                            --
--    (c) Copyright 1995-2015 Xilinx, Inc.                                    --
--    All rights reserved.                                                    --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- You must compile the wrapper file memory.vhd when simulating
-- the core, memory. When compiling the wrapper file, be sure to
-- reference the XilinxCoreLib VHDL simulation library. For detailed
-- instructions, please refer to the "CORE Generator Help".

-- The synthesis directives "translate_off/translate_on" specified
-- below are supported by Xilinx, Mentor Graphics and Synplicity
-- synthesis tools. Ensure they are correct for your synthesis tool(s).

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synthesis translate_off
LIBRARY XilinxCoreLib;
-- synthesis translate_on
ENTITY memory IS
  PORT (
    clka : IN STD_LOGIC;
    ena : IN STD_LOGIC;
    wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
    addra : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
    dina : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
    clkb : IN STD_LOGIC;
    enb : IN STD_LOGIC;
    addrb : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
    doutb : OUT STD_LOGIC_VECTOR(0 DOWNTO 0)
  );
END memory;

ARCHITECTURE memory_a OF memory IS
-- synthesis translate_off
COMPONENT wrapped_memory
  PORT (
    clka : IN STD_LOGIC;
    ena : IN STD_LOGIC;
    wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
    addra : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
    dina : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
    clkb : IN STD_LOGIC;
    enb : IN STD_LOGIC;
    addrb : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
    doutb : OUT STD_LOGIC_VECTOR(0 DOWNTO 0)
  );
END COMPONENT;

-- Configuration specification
  FOR ALL : wrapped_memory USE ENTITY XilinxCoreLib.blk_mem_gen_v7_3(behavioral)
    GENERIC MAP (
      c_addra_width => 9,
      c_addrb_width => 9,
      c_algorithm => 1,
      c_axi_id_width => 4,
      c_axi_slave_type => 0,
      c_axi_type => 1,
      c_byte_size => 9,
      c_common_clk => 1,
      c_default_data => "0",
      c_disable_warn_bhv_coll => 0,
      c_disable_warn_bhv_range => 0,
      c_enable_32bit_address => 0,
      c_family => "spartan3",
      c_has_axi_id => 0,
      c_has_ena => 1,
      c_has_enb => 1,
      c_has_injecterr => 0,
      c_has_mem_output_regs_a => 0,
      c_has_mem_output_regs_b => 0,
      c_has_mux_output_regs_a => 0,
      c_has_mux_output_regs_b => 0,
      c_has_regcea => 0,
      c_has_regceb => 0,
      c_has_rsta => 0,
      c_has_rstb => 0,
      c_has_softecc_input_regs_a => 0,
      c_has_softecc_output_regs_b => 0,
      c_init_file => "BlankString",
      c_init_file_name => "no_coe_file_loaded",
      c_inita_val => "0",
      c_initb_val => "0",
      c_interface_type => 0,
      c_load_init_file => 0,
      c_mem_type => 1,
      c_mux_pipeline_stages => 0,
      c_prim_type => 1,
      c_read_depth_a => 512,
      c_read_depth_b => 512,
      c_read_width_a => 1,
      c_read_width_b => 1,
      c_rst_priority_a => "CE",
      c_rst_priority_b => "CE",
      c_rst_type => "SYNC",
      c_rstram_a => 0,
      c_rstram_b => 0,
      c_sim_collision_check => "ALL",
      c_use_bram_block => 0,
      c_use_byte_wea => 0,
      c_use_byte_web => 0,
      c_use_default_data => 0,
      c_use_ecc => 0,
      c_use_softecc => 0,
      c_wea_width => 1,
      c_web_width => 1,
      c_write_depth_a => 512,
      c_write_depth_b => 512,
      c_write_mode_a => "WRITE_FIRST",
      c_write_mode_b => "READ_FIRST",
      c_write_width_a => 1,
      c_write_width_b => 1,
      c_xdevicefamily => "spartan3"
    );
-- synthesis translate_on
BEGIN
-- synthesis translate_off
U0 : wrapped_memory
  PORT MAP (
    clka => clka,
    ena => ena,
    wea => wea,
    addra => addra,
    dina => dina,
    clkb => clkb,
    enb => enb,
    addrb => addrb,
    doutb => doutb
  );
-- synthesis translate_on

END memory_a;


Thank you,
Antonio

P.S: It is also a bit harder as I do not have the 20Gb free disk space required by ISE, and I do not want to format or delete any files until I present this project. (At least I believe I could use this laptop with ISE installed, but I cannot install Questa)

In reply to antonio92m:

Hello Antonio,

there are different types oft he same xilinxcorelib, one for Linux-64 bit, one for Linux-32 bit and one for Windows.
What I do not know what the difference is between xst and hdp. But you can try-out this.
You have to select the library according to your OS. Cope your library to your notebook.

How to link in Questa:
In the Questa GUI select File → New → Library. Then an window opens. Choose ‘a map to an existing library’. Library Name: xilinxcorelib; Library maps to: choose the corresponding path where you stored the xilinxcorelib.

Then you can start to compile.

Good Luck
Christoph

In reply to chr_sue:

Hello Chris,

What I have done eventually. My professor has compiled the xilinx ipcore for me (under a 64-bit linux). I have imported those libraries to Questa, and then I have tried to compile the files.
Which compiled!! So everything looks good at the moment.

I am going to follow an easy approach. First I am going to create a simple UVM testbench with a simple vhd top where I use IPcore, after that I am going to go through the whole TOP.

Lets see how it goes!

Thank you very much!!
Antonio

P.S. This world of the UVM it is really fascinating. I wish there were an interesting verification masters in any university I could access to.