我想在Verilog模块(for this reason)中替换一些通用的同步代码 . 该代码是标准的2-flop同步器 .
always @ (posedge clk_i or posedge rst)
begin
if (rst)
begin
rx_sync_tmp <= 1'b1;
rx_sync <= 1'b1;
end
else
begin
rx_sync_tmp <= rx_i;
rx_sync <= rx_sync_tmp;
end
end
VHDL中的实体声明也很简单:
entity synchroniser_d_flip_flop_n is
generic(
NUM_STAGES : natural := 2;
RESET_ACTIVE_STATE : std_logic := '1';
DEFAULT_AFTER_RESET : std_logic := '0'
);
port(
clk_i : in std_logic;
reset_i : in std_logic;
d_i : in std_logic;
q_o : out std_logic
);
end synchroniser_d_flip_flop_n;
但是,如果我尝试以明显的方式在verilog中实例化它:
synchroniser_d_flip_flop_n #(2, 1, 1) rx_sync_block(
clk_i,
rst,
rx_i,
rx_sync
);
Altera Quartus-II 15.0.2给出以下错误(目标是MAX10):
Error (10517): VHDL type mismatch error at synchroniser_d_flip_flop.vhd(9): std_logic type does not match integer literal
Error (10517): VHDL type mismatch error at synchroniser_d_flip_flop.vhd(10): std_logic type does not match integer literal
也就是说,似乎不接受1作为std_logic .
Xilinx seems to suggest包含std_logic的VHDL泛型无法在Verilog中实例化:
泛型(参数)映射支持以下VHDL泛型类型(及其Verilog等价物) . 整数
真实
串
布尔
注意在混合语言边界上找到的任何其他泛型类型都被视为错误 .
tl;博士
有没有一种标准方法来实例化Verilog文件中包含std_logic的VHDL泛型?如果没有,可以建议什么作为解决方法?
2 回答
没有标准 - 您必须检查您的模拟器文档 . Cadence文档说“Verilog整数参数的LSB映射到单位std_logic泛型” . 相关表格相当无用地引用了SV,但我很确定这对普通的Verilog也有用 .
MoldelSim / QuestaSim文档说你可以在Verilog或SV中实例化一个VHDL设计单元,如果“泛型是bit,bit_vector,integer,real,std_logic,std_logic_vector,vl_logic,vl_logic_vector,time,physical,enumeration或string”类型“ .
isim一直是一个火车残骸 - 他们还在Vivado使用它吗?如果你坚持使用它,我会重写VHDL以获取整数通用 .
试试这个:
std_logic
可以采用9个枚举值中的任何一个:{U,X,0,1,Z,W,L,H,-}
所以4'd3
,你're specifying the 3rd value in this list. For logic 0, you' d选4'd2
.