Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/jquery-mobile/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 用包含std_逻辑的泛型在Verilog中实例化VHDL_Generics_Vhdl_Verilog - Fatal编程技术网

Generics 用包含std_逻辑的泛型在Verilog中实例化VHDL

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 <

我希望替换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     <= 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
    );