vhdl 到 verilog bintobcd 转换
vhdl to verilog bintobcd converting
大家好,我正在尝试将以下 vhdl 代码转换为 verilog,但是即使它们看起来非常相似,它也不起作用。我没有收到任何错误,但它不适用于 verilog 一个,但适用于 vhdl 一个。你们能帮我解决这个问题吗? :
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity binbcd8 is
port(
b: in unsigned(7 downto 0);
p: out unsigned(9 downto 0)
);
end binbcd8;
architecture Behavioral of binbcd8 is
begin
bcd1: process(b)
variable z: unsigned(17 downto 0);
begin
for i in 0 to 17 loop
z(i):='0';
end loop;
z(10 downto 3):=b;
for i in 0 to 4 loop
if z(11 downto 8)>4 then
z(11 downto 8):=z(11 downto 8)+3;
end if;
if z(15 downto 12)>4 then
z(15 downto 12):=z(15 downto 12)+3;
end if;
z(17 downto 1):=z(16 downto 0);
end loop;
p<=z(17 downto 8);
end process;
end Behavioral;
Verilog 代码,这是我的代码,但它不起作用。你能帮帮我吗?:
module binbcd8(input[7:0] b,output reg[9:0] p);
reg[17:0] z;
integer i;
always@(b)
begin
z <=17'b0;
z[10:3] <=b;
for(i=0;i<4;i=i+1) begin
if(z[11:8]>4)
z[11:8]<=z[11:8]+3;
else
z<=z;
if(z[15:12]>4)
z[15:12]<=z[15:12]+3;
else
z<=z;
z[17:1]<=z[16:0];
end
p<=z[17:8];
end
endmodule
您的主要问题可能是 (a) VHDL 循环 5 次 (0 to 4
) 而 Verilog 循环 4 次 (for(i=0; i<4;...
),以及 (b) Verilog 代码在 z
上使用非阻塞赋值,它应该使用阻塞(z = x
,而不是 z <= x
)。不懂的单独问。
两组代码都可以进行清理。在 Verilog 中,您对 z
的第一个赋值分配了 17 位,而不是 18 位。 z <= z
赋值是不必要的。 VHDL 使用一种奇怪的方法来清除 z
- 尝试 variable z: unsigned(17 downto 0) := (others => '0');
.
大家好,我正在尝试将以下 vhdl 代码转换为 verilog,但是即使它们看起来非常相似,它也不起作用。我没有收到任何错误,但它不适用于 verilog 一个,但适用于 vhdl 一个。你们能帮我解决这个问题吗? :
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity binbcd8 is
port(
b: in unsigned(7 downto 0);
p: out unsigned(9 downto 0)
);
end binbcd8;
architecture Behavioral of binbcd8 is
begin
bcd1: process(b)
variable z: unsigned(17 downto 0);
begin
for i in 0 to 17 loop
z(i):='0';
end loop;
z(10 downto 3):=b;
for i in 0 to 4 loop
if z(11 downto 8)>4 then
z(11 downto 8):=z(11 downto 8)+3;
end if;
if z(15 downto 12)>4 then
z(15 downto 12):=z(15 downto 12)+3;
end if;
z(17 downto 1):=z(16 downto 0);
end loop;
p<=z(17 downto 8);
end process;
end Behavioral;
Verilog 代码,这是我的代码,但它不起作用。你能帮帮我吗?:
module binbcd8(input[7:0] b,output reg[9:0] p);
reg[17:0] z;
integer i;
always@(b)
begin
z <=17'b0;
z[10:3] <=b;
for(i=0;i<4;i=i+1) begin
if(z[11:8]>4)
z[11:8]<=z[11:8]+3;
else
z<=z;
if(z[15:12]>4)
z[15:12]<=z[15:12]+3;
else
z<=z;
z[17:1]<=z[16:0];
end
p<=z[17:8];
end
endmodule
您的主要问题可能是 (a) VHDL 循环 5 次 (0 to 4
) 而 Verilog 循环 4 次 (for(i=0; i<4;...
),以及 (b) Verilog 代码在 z
上使用非阻塞赋值,它应该使用阻塞(z = x
,而不是 z <= x
)。不懂的单独问。
两组代码都可以进行清理。在 Verilog 中,您对 z
的第一个赋值分配了 17 位,而不是 18 位。 z <= z
赋值是不必要的。 VHDL 使用一种奇怪的方法来清除 z
- 尝试 variable z: unsigned(17 downto 0) := (others => '0');
.