首页 文章

使用包含std_logic的泛型在Verilog中实例化VHDL

提问于
浏览
2

我想在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 回答

  • 1

    没有标准 - 您必须检查您的模拟器文档 . 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以获取整数通用 .

  • 0

    试试这个:

    synchroniser_d_flip_flop_n #(2, 4'd3, 4'd3) rx_sync_block(
        clk_i,
        rst, 
        rx_i,
        rx_sync
        );
    

    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 .

相关问题