verilog中的整数输入端口与vhdl类似?
我是verilog的新手。我已经用vhdl中的整数输入和输出构建了我的代码。现在我想在verilog中构造相同的代码。但是我知道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 ;
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