从 VHDL 到 Verilog 的数据转换
Data conversion from VHDL to Verilog
我在 VHDL 中定义了以下变量,我需要将它们转换成 Verilog。我首先列出 VHDL 中的变量,然后尝试转换它们:
VHDL代码
constant ValueLoad : std_logic_vector (11*24-1 downto 0) :=
b"0011010_0_0001111_000000000"&
b"0011010_0_0000000_000011111"&
b"0011010_0_0000001_000110111"&
b"0011010_0_0000010_001111001"&
b"0011010_0_0000011_000110000"&
b"0011010_0_0000100_011010010"&
b"0011010_0_0000101_000000001"&
b"0011010_0_0000110_001100010"&
b"0011010_0_0000111_001000011"&
b"0011010_0_0001000_000100000"&
b"0011010_0_0001001_000000001";
signal valueOut : std_logic;
signal registerA : std_logic_vector (11*24-1 downto 0);
signal divider : integer;
signal counterA : integer;
signal counterB : integer;
我尝试转换为 Verilog
wire valueOut;
wire [11*24-1:0] registerA;
wire divider;
wire counterA;
wire counterB;
这是正确的吗?另外,如何在 Verilog 中定义 valueLoad?
是的,看起来是正确的。这是定义 ValueLoad 的一种方法:
parameter [11*24-1:0] ValueLoad =
{24'b0011010_0_0001111_000000000,
24'b0011010_0_0000000_000011111,
24'b0011010_0_0000001_000110111,
24'b0011010_0_0000010_001111001,
24'b0011010_0_0000011_000110000,
24'b0011010_0_0000100_011010010,
24'b0011010_0_0000101_000000001,
24'b0011010_0_0000110_001100010,
24'b0011010_0_0000111_001000011,
24'b0011010_0_0001000_000100000,
24'b0011010_0_0001001_000000001};
这取决于他们将如何分配。如果在always
块里面赋值,那么应该是reg
或者integer
类型。
reg valueOut;
reg [11*24-1:0] registerA;
integer divider;
integer counterA;
integer counterB;
如果它们是通过assign
语句分配的,那么它们需要是网络类型。
wire valueOut;
wire [11*24-1:0] registerA;
wire signed [31:0] divider; // 'signed' to allow negative numbers
wire signed [31:0] counterA;
wire signed [31:0] counterB;
VHDL 的 constant
应该映射到 Verilog 的 parameter
。 VHDL 使用 &
进行污染,Verilog 污染围绕逗号分隔列表和大括号:
parameter [11*24-1:0] ValueLoad = {
24'b0011010_0_0001111_000000000,
24'b0011010_0_0000000_000011111,
24'b0011010_0_0000001_000110111,
24'b0011010_0_0000010_001111001,
24'b0011010_0_0000011_000110000,
24'b0011010_0_0000100_011010010,
24'b0011010_0_0000101_000000001,
24'b0011010_0_0000110_001100010,
24'b0011010_0_0000111_001000011,
24'b0011010_0_0001000_000100000,
24'b0011010_0_0001001_000000001 };
我在 VHDL 中定义了以下变量,我需要将它们转换成 Verilog。我首先列出 VHDL 中的变量,然后尝试转换它们:
VHDL代码
constant ValueLoad : std_logic_vector (11*24-1 downto 0) :=
b"0011010_0_0001111_000000000"&
b"0011010_0_0000000_000011111"&
b"0011010_0_0000001_000110111"&
b"0011010_0_0000010_001111001"&
b"0011010_0_0000011_000110000"&
b"0011010_0_0000100_011010010"&
b"0011010_0_0000101_000000001"&
b"0011010_0_0000110_001100010"&
b"0011010_0_0000111_001000011"&
b"0011010_0_0001000_000100000"&
b"0011010_0_0001001_000000001";
signal valueOut : std_logic;
signal registerA : std_logic_vector (11*24-1 downto 0);
signal divider : integer;
signal counterA : integer;
signal counterB : integer;
我尝试转换为 Verilog
wire valueOut;
wire [11*24-1:0] registerA;
wire divider;
wire counterA;
wire counterB;
这是正确的吗?另外,如何在 Verilog 中定义 valueLoad?
是的,看起来是正确的。这是定义 ValueLoad 的一种方法:
parameter [11*24-1:0] ValueLoad =
{24'b0011010_0_0001111_000000000,
24'b0011010_0_0000000_000011111,
24'b0011010_0_0000001_000110111,
24'b0011010_0_0000010_001111001,
24'b0011010_0_0000011_000110000,
24'b0011010_0_0000100_011010010,
24'b0011010_0_0000101_000000001,
24'b0011010_0_0000110_001100010,
24'b0011010_0_0000111_001000011,
24'b0011010_0_0001000_000100000,
24'b0011010_0_0001001_000000001};
这取决于他们将如何分配。如果在always
块里面赋值,那么应该是reg
或者integer
类型。
reg valueOut;
reg [11*24-1:0] registerA;
integer divider;
integer counterA;
integer counterB;
如果它们是通过assign
语句分配的,那么它们需要是网络类型。
wire valueOut;
wire [11*24-1:0] registerA;
wire signed [31:0] divider; // 'signed' to allow negative numbers
wire signed [31:0] counterA;
wire signed [31:0] counterB;
VHDL 的 constant
应该映射到 Verilog 的 parameter
。 VHDL 使用 &
进行污染,Verilog 污染围绕逗号分隔列表和大括号:
parameter [11*24-1:0] ValueLoad = {
24'b0011010_0_0001111_000000000,
24'b0011010_0_0000000_000011111,
24'b0011010_0_0000001_000110111,
24'b0011010_0_0000010_001111001,
24'b0011010_0_0000011_000110000,
24'b0011010_0_0000100_011010010,
24'b0011010_0_0000101_000000001,
24'b0011010_0_0000110_001100010,
24'b0011010_0_0000111_001000011,
24'b0011010_0_0001000_000100000,
24'b0011010_0_0001001_000000001 };