Search code examples
vhdlintelfpgaintel-fpgaquartus

If sensitivity list in VHDL is not synthesizable, why does it gives an error due the Analysis and Synthesis?


To provide sequential logic in design with VHDL I have to use process statement, which has sensitivity_list. From different sources I know, that sensitivity list is non-synthesizable construction, i.e., if I will synthesize this code:

    ...
    process(c)
    b <= a and c;
    end process;
    ...

I would not have any latch by c signal, it will just be a usual AND-gate. But, when I synthesize code without sensitivity list:

    ...
    process
    b <= a and c;
    end process;
    ...

no matter what version of VHDL I choose, I get the same problem:

Error (10442): VHDL Process Statement error at process_test.vhd(79): Process Statement must contain either a sensitivity list or a Wait Statement

My question is: why does synthesizer care about sensitivity list? In my understanding, it is over-concerned about customers and this cannot be an error, but a critical warning, or even nothing, and warnings only when the simulation is on.

UPD. Here is full code and some images. I used Quartus Prime Standard 16.1

    library ieee;
    use ieee.std_logic_1164.all;
    entity stck_ovflw is
        port 
        (
            a       : in std_logic;
            c       : in std_logic;
            b       : out std_logic
        );
    end entity;
    architecture rtl of stck_ovflw  is
    begin
        process(c)
        begin
            b <= a AND c;
        end process;
    end rtl;

RTL Synthesis: enter image description here Modelling: enter image description here


Solution

  • It is the job of a logic synthesiser to generate a circuit that behaves exactly the same as your RTL. A process without a sensitivity list or a wait if an infinite loop and so cannot be simulated. Therefore, given my first sentence, how can a logic synthesiser possibly generate a circuit that behaves exactly the same as your RTL?

    This should never be a problem, because you should always simulate before you synthesise. So, you should have fixed this before the logic synthesiser ever sees your code.