【发布时间】:2015-08-26 05:55:18
【问题描述】:
我希望替换 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 无法在 Verilog 中实例化包含 std_logic 的 VHDL 泛型:
泛型(参数)映射遵循 VHDL 泛型类型(及其 支持 Verilog 等效项)。
integer real string boolean注意在混合语言边界上发现的任何其他泛型类型都是 认为是一个错误。
tl;博士
是否有一种标准方法可以在 Verilog 文件中实例化包含 std_logic 的 VHDL 泛型?如果没有,建议的解决方法是什么?
【问题讨论】:
-
尝试使用布尔值而不是整数创建您的 Verilog,其中您有一个位信号。您的工具很可能可以将布尔值转换为 std_logic 并返回,但我并不惊讶它拒绝整数。
-
你不能用
1'b1或1'b0而不是用1,它代表一个整数吗? -
@Rusell 评论使它对我有用。我接受了更完整的答案,因为它讨论了标准化。