empty
and full
are declared as output
, which means their implied type is wire
. You can only drive wires with a continuous assign
:
assign empty = some_value;
If you want to assign these signals from an always block, you should explicitly declare them as logic
(or reg
if you’re using Verilog):
output logic empty, full;