diff --git a/b_asic/sfg_generators.py b/b_asic/sfg_generators.py
index 37d011f8bbeb593e3d7208671c93e547fd2a4562..9b3239ecfe37b8bab71a76f756118ac4773d86f1 100644
--- a/b_asic/sfg_generators.py
+++ b/b_asic/sfg_generators.py
@@ -60,6 +60,9 @@ def wdf_allpass(
         Signal flow graph
     """
     np_coefficients = np.squeeze(np.asarray(coefficients))
+    order = len(np_coefficients)
+    if not order:
+        raise ValueError("Coefficients cannot be empty")
     if np_coefficients.ndim != 1:
         raise TypeError("coefficients must be a 1D-array")
     if input_op is None:
@@ -68,7 +71,6 @@ def wdf_allpass(
         output = Output()
     if name is None:
         name = "WDF allpass section"
-    order = len(np_coefficients)
     odd_order = order % 2
     if odd_order:
         # First-order section
@@ -120,12 +122,8 @@ def direct_form_fir(
     input_op: Optional[Union[Input, Signal, InputPort]] = None,
     output: Optional[Union[Output, Signal, OutputPort]] = None,
     name: Optional[str] = None,
-    mult_properties: Optional[
-        Union[Dict[str, int], Dict[str, Dict[str, int]]]
-    ] = None,
-    add_properties: Optional[
-        Union[Dict[str, int], Dict[str, Dict[str, int]]]
-    ] = None,
+    mult_properties: Optional[Union[Dict[str, int], Dict[str, Dict[str, int]]]] = None,
+    add_properties: Optional[Union[Dict[str, int], Dict[str, Dict[str, int]]]] = None,
 ):
     r"""
     Generate a signal flow graph of a direct form FIR filter. The *coefficients* parameter is a
@@ -166,6 +164,9 @@ def direct_form_fir(
     transposed_direct_form_fir
     """
     np_coefficients = np.squeeze(np.asarray(coefficients))
+    taps = len(np_coefficients)
+    if not taps:
+        raise ValueError("Coefficients cannot be empty")
     if np_coefficients.ndim != 1:
         raise TypeError("coefficients must be a 1D-array")
     if input_op is None:
@@ -179,7 +180,6 @@ def direct_form_fir(
     if add_properties is None:
         add_properties = {}
 
-    taps = len(np_coefficients)
     prev_delay = input_op
     prev_add = None
     for i, coeff in enumerate(np_coefficients):
@@ -202,12 +202,8 @@ def transposed_direct_form_fir(
     input_op: Optional[Union[Input, Signal, InputPort]] = None,
     output: Optional[Union[Output, Signal, OutputPort]] = None,
     name: Optional[str] = None,
-    mult_properties: Optional[
-        Union[Dict[str, int], Dict[str, Dict[str, int]]]
-    ] = None,
-    add_properties: Optional[
-        Union[Dict[str, int], Dict[str, Dict[str, int]]]
-    ] = None,
+    mult_properties: Optional[Union[Dict[str, int], Dict[str, Dict[str, int]]]] = None,
+    add_properties: Optional[Union[Dict[str, int], Dict[str, Dict[str, int]]]] = None,
 ):
     r"""
     Generate a signal flow graph of a transposed direct form FIR filter. The *coefficients* parameter is a
@@ -248,6 +244,9 @@ def transposed_direct_form_fir(
     direct_form_fir
     """
     np_coefficients = np.squeeze(np.asarray(coefficients))
+    taps = len(np_coefficients)
+    if not taps:
+        raise ValueError("Coefficients cannot be empty")
     if np_coefficients.ndim != 1:
         raise TypeError("coefficients must be a 1D-array")
     if input_op is None:
@@ -261,9 +260,7 @@ def transposed_direct_form_fir(
     if add_properties is None:
         add_properties = {}
 
-    taps = len(np_coefficients)
     prev_delay = None
-    prev_add = None
     for i, coeff in enumerate(reversed(np_coefficients)):
         tmp_mul = ConstantMultiplication(coeff, input_op, **mult_properties)
         tmp_add = (