可以使用实体实例化在VHDL模块中实例化verilog模块吗?

时间:2018-01-09 16:22:01

标签: vhdl verilog

是否可以使用VHDL样式实体实例化在VHDL设计中包含Verilog模块?

我意识到如果我将Verilog模块视为一个组件并实例化该组件,我就可以实现这一目标。

由于

2 个答案:

答案 0 :(得分:0)

从我的代码集中抓取:

module sync_fifo
#(parameter WIDTH    = 8, // width in bits
            L2DEPTH  = 4, // Log 2 Depth, 4=16 deep
            REGFLAGS = 1  // Full, empty are registered
)
(
   input                   clk,     // system clock                 
   input                   reset_n, // A-synchronous low reset/clear
   input                   enable,  // clock gating                 
   input                   clear,   // Synchronous clear            

   input                   write,   // write FIFO                   
   input       [WIDTH-1:0] wdata,   // write data                   
   input                   read,    // read FIFO                    
   output      [WIDTH-1:0] rdata,   // read data                    

   output reg              empty,   // FIFO is empty                
   output reg              full,    // FIFO is full                 
   output reg      [L2DEPTH:0] level    // Fill level                   
);

outp_fifo : sync_fifo 
generic map(
   WIDTH   => 10,  -- Byte + user + last
   L2DEPTH => 7,   -- 128 deep
   REGFLAGS=> 1
  )
port map 
(
   clk     => ACLK,                  -- system clock                 
   reset_n => ARESETN,               -- A-synchronous low reset/clear
   enable  => BIT_1 ,                -- clock gating                 
   clear   => BIT_0 ,                -- Synchronous clear            

   write   => package_byte_en,       -- write FIFO                   
   wdata   => outp_fifo_wt_data_and_meta , -- write data                   
   read    => outp_fifo_read   ,     -- read FIFO                    
   rdata   => outp_fifo_rd_data_and_meta ,     -- read data                    
   empty   => outp_fifo_empty,       -- FIFO is empty                
   full    => outp_fifo_full,        -- FIFO is full                 
   level   => open                   -- Fill level      
   );

发布编辑:
你只能通过一个称职的声明来做到这一点:

COMPONENT sync_fifo IS
  generic(
     WIDTH    : integer := 8;
     L2DEPTH  : integer := 8;
     REGFLAGS : integer := 1
  );
  PORT (
       clk    : in STD_LOGIC;         -- system clock                 
       reset_n: in STD_LOGIC;         -- A-synchronous low reset/clear
       enable : in STD_LOGIC;         -- clock gating                 
       clear  : in STD_LOGIC;         -- Synchronous clear            

       write  : in  STD_LOGIC;        -- write FIFO                   
       wdata  : in  STD_LOGIC_VECTOR(WIDTH-1 downto 0); -- write data                   
       read   : in  STD_LOGIC;        -- read FIFO                    
       rdata  : out STD_LOGIC_VECTOR(WIDTH-1 downto 0); -- read data                    

       empty  : out STD_LOGIC; -- FIFO is empty                
       full   : out STD_LOGIC; -- FIFO is full                 
       level   : out STD_LOGIC_VECTOR(L2DEPTH downto 0)  -- Fill level                   
    );
END COMPONENT;

答案 1 :(得分:0)

虽然在 3 年前被问到时,答案似乎是“不”,但我在实践中发现答案是“是的,你可以”,但有一些警告。我使用 Mentor ModelSim 和 Xilinx Vivado 确认了这一点。

我不知道 LRM 是否发生了一些变化,或者工具供应商是否只是决定支持它。我使用的是 VHDL-2008,所以我怀疑是后者。

这是我的一个测试文件中的一个实例。 VerFlopX 是一个 Verilog 模块。

  VerFlopX8c: entity work.VerFlopX (rtl)
    generic map (SIZE => 8)  --integer:=1
    port map (
      Clk => Clk,                --in  wire
      D   => D16(15 downto 8) ,  --in  wire[(SIZE-1):0]
      Q   => Q16(15 downto 8));  --out wire[(SIZE-1):0]

注意事项:

  • 请注意,指定了架构“rtl”。这可以(并且可能应该)被省略。但它仍然有效,这看起来很奇怪,因为 Verilog 模块没有架构。
  • 您不能将 Q 输出与打开关联。 ModelSim 将返回错误。如果您更改为组件实例化,则将正式输出连接到 open 就可以了。