是否可以使用VHDL样式实体实例化在VHDL设计中包含Verilog模块?
我意识到如果我将Verilog模块视为一个组件并实例化该组件,我就可以实现这一目标。
由于
答案 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]
注意事项: