【问题标题】:Integer input ports in verilog similar to vhdl?类似于vhdl的verilog中的整数输入端口?
【发布时间】:2016-04-16 17:27:02
【问题描述】:

我是verilog的新手。我已经使用 vhdl 中的整数输入和输出构建了我的代码。现在我想在verilog中构造相同的代码。但是我知道verilog中的输入端口不能是整数类型。 可以做什么。 我更喜欢可综合的答案。

vhdl 代码:

LIBRARY ieee;
USE ieee.All;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;

ENTITY adder_5 IS
PORT (
 a : IN integer ;
 b : IN integer; 
 c : OUT integer 
);

END adder_5;
ARCHITECTURE add OF adder_5 IS
BEGIN
 c<= (a rem 32) + (b rem 32);
END add;

【问题讨论】:

  • 已经在 SO 中搜索 Verilog 和 adder 了吗?它充满了加法器示例....
  • 问题不在于加法器。它的输入类型。我的代码采用从另一个模块或块传递的整数输入,例如,从 ROM 块。@Paebbels
  • Verilog 不太关心类型。如果我没记错的话,整数仅用于常量和参数,而不用于端口。

标签: vhdl verilog vlsi


【解决方案1】:

Verilog 中的整数和 VHDL 中的整数不是一回事。在 VHDL 中,整数是有符号的 2 状态 type,至少有 32 位。在 Verilog 中,整数是 32 位有符号的 4 状态 变量。所以,在 Verilog 中,

integer a;

reg signed [31:0] a;

是等价的。在 Verilog 中,输入端口必须是网络类型,因此不允许整数输入端口。但是,允许输出端口是变量,因此输出端口可以是整数。所以,你可以用reg signed [31:0]替换VHDL输入整数,用integer替换输出整数,你在Verilog中的代码是

module adder (input wire signed [31:0] a, b, output integer c);

  always @(*)
    c = a%32 + b%32;

endmodule

或者也许是为了一致性:

module adder (input wire signed [31:0] a, b, output reg signed [31:0] c);

http://www.edaplayground.com/x/5PZe

因此,在输出端口中允许使用整数,但在输入端口中不允许使用整数。

【讨论】:

  • 编译代码时出现以下错误:“端口模式与声明不兼容:a”@Matthew Taylor
  • 我从没听说过 IO 是整数!!
  • @Sai Rahul 我的应用程序 - 我无意中启用了 SystemVerilog 开关,所以我的代码编译得很好。当然,禁用 SystemVerilog 会导致错误,因为输入端口不能是变量。我已经相应地修改了我的答案。请告诉我你的进展情况。
  • 请注意,整数类型并非设计为可合成的,因此并非所有合成工具都接受它。如果你想让你的代码可合成,你需要使用reg signed [31:0]
  • @Unn 在 DC、Quartus、ISE 和 Vivado 中合成,但如果有疑问,可以照你说的使用reg signed [31:0]
【解决方案2】:

您可以在 Verilog 中直接使用integer 和端口。

请注意,在 verilog 中使用 integer,而不是 int。因为,

int 是 2 状态类型,只有 2 个值 1 和 0。但整数是 4 状态类型,有 4 个值 - 0、1、x、z。

module top (a);
  input integer a;
endmodule

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多