Hi,

My (windows) GHDL compiler doesn't like the following piece of VHDL (a
simple and not very useful example):

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY caseproblem IS
   GENERIC (
       SIZE         : POSITIVE := 64
   );
   PORT
   (
       clk        : IN STD_LOGIC;
       rst_n        : IN STD_LOGIC;
       outputa    : OUT STD_LOGIC;
       outputb    : OUT STD_LOGIC
   );
END caseproblem;

ARCHITECTURE rtl OF caseproblem IS
   SIGNAL state             : INTEGER RANGE 0 TO SIZE+1;
BEGIN
   PROCESS (clk, rst_n)
   BEGIN
       IF rst_n = '0' THEN
           outputa <= '0';
           outputb <= '0';
       ELSIF clk'EVENT AND clk = '1' THEN
           CASE state IS
               WHEN 0 =>
                   outputa <= '0';
                   outputb <= '0';
               WHEN 1 TO SIZE - 2 =>        -- <= This usage of SIZE makes
GHDL fail
                   outputa <= '1';
                   outputb <= '0';
                   state <= state + 1;
               WHEN OTHERS =>
                   outputa <= '1';
                   outputb <= '1';
                   state <= 0;
           END CASE;
       END IF;
   END PROCESS;
END rtl;

GHDL has a problem with the case statement (because one of the when clauses
is using a generic?).
The error message is "not static choice exclude others choice"
I think the syntax is correct, my altera tool for instance doesn't prevent
me from using it.
Is this a bug in GHDL, or a mistake in my code?
Can I help to fix it?

Best regards,

Hans Keppens
_______________________________________________
Ghdl-discuss mailing list
Ghdl-discuss@gna.org
https://mail.gna.org/listinfo/ghdl-discuss

Reply via email to