Generics 用包含std_逻辑的泛型在Verilog中实例化VHDL
我希望替换Verilog模块()中的一些通用同步器代码。该代码是一个标准的2-flop同步器Generics 用包含std_逻辑的泛型在Verilog中实例化VHDL,generics,vhdl,verilog,Generics,Vhdl,Verilog,我希望替换Verilog模块()中的一些通用同步器代码。该代码是一个标准的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 <
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
但是,如果我尝试用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):
也就是说,它似乎不接受1作为std_逻辑
Xilinx指出,包含std_逻辑的VHDL泛型无法在Verilog中实例化:
遵循VHDL泛型类型(及其
支持Verilog等同物)
integer
real
string
boolean
注意:在混合语言边界上找到的任何其他泛型类型都是
被认为是一个错误
tl;博士
在Verilog文件中实例化包含std_逻辑的VHDL泛型是否有一种标准方法?如果没有,建议什么作为解决方法?没有标准-您必须检查您的模拟器文档。Cadence文档说“Verilog integer参数的LSB映射到一个单位std_通用逻辑”。相关的表对SV没有什么帮助,但我很确定这也适用于普通的Verilog MoldelSim/QuestaSim文档说,如果“泛型类型为bit、bit_向量、integer、real、std_逻辑、std_逻辑向量、vl_逻辑、vl_逻辑向量、时间、物理、枚举或字符串”,则可以在Verilog或SV中实例化VHDL设计单元 isim一直有点像火车残骸——他们还在Vivado使用它吗?如果您仍在使用,我会重写VHDL以采用整数泛型。尝试以下方法:
synchroniser_d_flip_flop_n #(2, 4'd3, 4'd3) rx_sync_block(
clk_i,
rst,
rx_i,
rx_sync
);
std_逻辑
可以采用9个枚举值中的任意一个:{U,X,0,1,Z,W,L,H,-}
因此使用4'd3
,您可以指定此列表中的第三个值。对于逻辑0,您可以选择4'd2
尝试使用布尔值而不是整数创建Verilog,其中只有一位信号。您的工具很可能可以将布尔值转换为std_逻辑并返回,但我并不奇怪它拒绝整数。您不能使用1'b1
或1'b0
而不是使用表示整数的1吗?@Rusell comment使它适合我。我接受了更完整的答案,因为它讨论了标准化。嘿,我看到这是你的第一个答案。不能对内容说任何内容,但是你可以考虑使用 Butkk
围绕你的内联代码(‘你的内联代码在这里’),并为整个代码行制作代码块(缩进四个空格),使你的答案更可读。
integer
real
string
boolean
synchroniser_d_flip_flop_n #(2, 4'd3, 4'd3) rx_sync_block(
clk_i,
rst,
rx_i,
rx_sync
);