【发布时间】:2012-01-22 20:48:28
【问题描述】:
我想将以下 VHDL 代码转换为 Verilog。但是我遇到了一些问题,正如我在这里提到的compilation error。 有人能给我一些关于如何在 Verilog 中正确编写相同函数的提示吗?
谢谢!
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use work.classic_multiplier_parameters.all;
entity poly_multiplier is
port (
a, b: in std_logic_vector(M-1 downto 0);
d: out std_logic_vector(2*M-2 downto 0)
);
end poly_multiplier;
architecture simple of poly_multiplier is
type matrix_ands is array (0 to 2*M-2) of STD_LOGIC_VECTOR(2*M-2 downto 0);
signal a_by_b: matrix_ands;
signal c: std_logic_vector(2*M-2 downto 0);
begin
gen_ands: for k in 0 to M-1 generate
l1: for i in 0 to k generate
a_by_b(k)(i) <= A(i) and B(k-i);
end generate;
end generate;
gen_ands2: for k in M to 2*M-2 generate
l2: for i in k to 2*M-2 generate
a_by_b(k)(i) <= A(k-i+(M-1)) and B(i-(M-1));
end generate;
end generate;
d(0) <= a_by_b(0)(0);
gen_xors: for k in 1 to 2*M-2 generate
l3: process(a_by_b(k),c(k))
variable aux: std_logic;
begin
if (k < M) then
aux := a_by_b(k)(0);
for i in 1 to k loop aux := a_by_b(k)(i) xor aux; end loop;
else
aux := a_by_b(k)(k);
for i in k+1 to 2*M-2 loop aux := a_by_b(k)(i) xor aux; end loop;
end if;
d(k) <= aux;
end process;
end generate;
end simple;
【问题讨论】:
-
VHDL 有一个解析器-翻译器 -> Verilog here。可以试试看。
-
另外,我想知道你为什么想要 VHDL -> Verilog?大多数(如果不是全部)工具可以同时处理两者(例如 Xilinx ISE、ModelSim、Cadence 综合工具……)。
-
@Darhuuk,我想知道如何在verilog中编写这种类型的VHDL代码。
-
它或多或少完全一样。您是否尝试过 Ross Rogers 链接的 VHDL -> Verilog 翻译器?
-
Darhuuk,从 VHDL 切换到 Verilog 有 非常 正当理由。我们有一个混合的 Verilog/VHDL 环境,要求我们使用 Synopsys 的 VCS-MX,当我们最终摆脱我们的 VHDL(使用内部解析器 - 翻译器)时,我们的仿真速度提高了 3 倍。这是巨大的。但你是对的。大多数 EDA 工具栈都支持 VHDL 和 Verilog。