【发布时间】:2020-06-25 17:47:46
【问题描述】:
我有一些 VHDL 代码我正在尝试转换为 Verilog。
VHDL 代码运行良好
library ieee;
use ieee.std_logic_1164.all;
entity find_errors is port(
a: bit_vector(0 to 3);
b: out std_logic_vector(3 downto 0);
c: in bit_vector(5 downto 0));
end find_errors;
architecture not_good of find_errors is
begin
my_label: process (a,c)
begin
if c = "111111" then
b <= To_StdLogicVector(a);
else
b <= "0101";
end if;
end process;
end not_good;
我拥有的 Verilog 代码出现错误“非法引用网络“bw”。” 和 连续赋值左边的寄存器是非法的
module find_errors(
input [3:0]a,
output [3:0]b,
input [5:0]c
);
wire [0:3]aw;
wire [3:0]bw;
reg [5:0]creg;
assign aw = a;
assign b = bw;
assign creg = c;
always @(a,c)
begin
if (creg == 4'b1111)
bw <= aw;
else
bw <= 4'b0101;
end
endmodule
【问题讨论】:
-
为了允许在
always块中分配给bw,它需要声明为reg。另一方面,creg必须声明为wire,而不是reg,以便允许在连续赋值的左侧(always之外)。 -
另请注意
c是 6 位宽,您可以将其与 4 位值进行比较。
标签: vhdl verilog system-verilog hdl