verilog中的整数输入端口与vhdl类似?

verilog中的整数输入端口与vhdl类似?,vhdl,verilog,vlsi,Vhdl,Verilog,Vlsi,我是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 ;

我是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;
ieee库;
使用ieee.All;
使用IEEE.std_logic_1164.all;
使用IEEE.std_logic_unsigned.all;
实体加法器_为5
港口(
a:整数;
b:整数;
c:输出整数
);
末端加法器5;
加法器5的加法结构是
开始

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

integer 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);


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

您可以直接在Verilog中将
整数
与端口一起使用

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

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


你搜索过Verilog和adder吗?它充满了加法器的例子……问题不在于加法器。这是输入的类型。我希望代码能够接受从另一个模块或块(例如,从ROM块)传递的整数输入。@PaebbelsVerilog不太关心类型。如果我没记错的话,整数只用于常量和参数,不用于端口。当我编译代码时,我得到以下错误:“端口模式与声明不兼容:a”@Matthew TaylorI从未听说IO是整数@Sai Rahul我的任命——我无意中启用了SystemVerilog开关,因此我的代码编译得很好。当然,禁用SystemVerilog会导致错误,因为输入端口不能是变量。我已相应地修改了我的答案。请让我知道您的进展情况。请注意,integer类型不是为可合成而设计的,因此并非所有合成工具都会接受它。如果你想让你的代码可合成,你需要使用
reg signed[31:0]
@Unn它在DC、Quartus、ISE和Vivado中合成,但如果有疑问,你可以使用
reg signed[31:0]
module adder (input wire signed [31:0] a, b, output reg signed [31:0] c);
module top (a);
  input integer a;
endmodule