在便携式VHDL中使用供应商特定的原语

时间:2018-03-07 17:05:57

标签: vhdl

我的项目是用便携式VHDL(主要用GHDL开发)编写的,但我想利用供应商特定的原语(例如乘法器)。

E.g。在C / C ++中,您可以使用#ifdef有条件地选择不同的代码片段,具体取决于CPU架构或编译器供应商等。

您是否可以在VHDL中使用任何类似的内容,例如区分Xilinx或Altera / Intel目标?

1 个答案:

答案 0 :(得分:2)

您可以使用generate语句和供应商特定实体+架构。 PoC-Library大量使用此技术来创建vendor independent IP cores

例如,看一下PoC的片上存储器(ocram)抽象层:PoC.mem.ocram.tdp

gAltera: if not SIMULATION and (VENDOR = VENDOR_ALTERA) generate
    component ocram_tdp_altera
        generic (
            A_BITS      : positive;
            D_BITS      : positive;
            FILENAME    : string        := ""
        );
        port (
            clk1 : in   std_logic;
            clk2 : in   std_logic;
            ce1 : in    std_logic;
            ce2 : in    std_logic;
            we1 : in    std_logic;
            we2 : in    std_logic;
            a1   : in   unsigned(A_BITS-1 downto 0);
            a2   : in   unsigned(A_BITS-1 downto 0);
            d1   : in   std_logic_vector(D_BITS-1 downto 0);
            d2   : in   std_logic_vector(D_BITS-1 downto 0);
            q1   : out std_logic_vector(D_BITS-1 downto 0);
            q2   : out std_logic_vector(D_BITS-1 downto 0)
        );
    end component;
begin
    -- Direct instantiation of altsyncram (including component
    -- declaration above) is not sufficient for ModelSim.
    -- That requires also usage of altera_mf library.

    ram_altera: ocram_tdp_altera
        generic map (
            A_BITS      => A_BITS,
            D_BITS      => D_BITS,
            FILENAME    => FILENAME
        )
        port map (
            clk1    => clk1,
            clk2    => clk2,
            ce1     => ce1,
            ce2     => ce2,
            we1     => we1,
            we2     => we2,
            a1      => a1,
            a2      => a2,
            d1      => d1,
            d2      => d2,
            q1      => q1,
            q2      => q2
        );
end generate gAltera;

这里,它实例化Altera器件的特殊实体。对于其他器件(Xilinx,Lattice),使用通用VHDL实现。此外,还使用特殊模型进行仿真,因为供应商原语并未模拟FPGA器件文档中记录的实际行为(例如,在存储器指南中)。