2

我是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;
4

2 回答 2

2

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

integer a;

reg signed [31:0] a;

是等价的。在 Verilog 中,输入端口必须是网络类型,因此不允许整数输入端口。但是,允许输出端口是变量,因此输出端口可以是整数。因此,您可以将 VHDL 输入整数替换为reg signed [31:0]并输出整数,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

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

于 2016-04-16T18:55:43.667 回答
0

您可以直接使用integerVerilog 中的端口。

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

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

module top (a);
  input integer a;
endmodule
于 2016-04-23T16:04:34.727 回答