Включение стандарта VHDL 2008 для анализатора Synopsys dc_shell - PullRequest
0 голосов
/ 26 апреля 2018

У меня возникают проблемы с получением моего кода, который является правильным кодом VHDL (выпуск языка 2008), правильно проанализированным dc_shell. Структура дела ниже, которая действительна в 2008 году, выдает ошибку

gen1: case myInt generate
   when 0 =>
       ...
   when 1 =>
       ...
   when 2 =>
       ...
  end generate;

Я не нашел ни в одной части документации компилятора дизайна Synopsys, где она описана и поддерживается ли она.

Ошибка:

106: gencfg: case nb_elem генерировать ^^^^

[Failure] Syntax error : received 'case'
          while expecting 'postponed'
                       or '(' or 'assert' or 'block' or 'component'
                       or 'configuration' or 'entity' or 'for' or 'if'
                       or 'process' or 'with' or IDENTIFIER or STRING LITERAL  
*** Presto compilation was unsuccessful. ***

Фрагмент VHDL очень прост:

library ieee;

use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.math_real.all;

entity demo is

  generic (
    nbelem : positive range 1 to 6:= 6;
    regwid : positive := 14
    );

  port (
    data    : in  std_logic_vector(regwid-1 downto 0);
    app_clk : in  std_logic_vector(nbelem-1 downto 0);
    clk_out : out std_logic
    );

end demo;

architecture rtl of demo is

  constant selwid   : integer   := integer(ceil(log2(real(nbelem))));
  constant tied_up  : std_logic := '1';
  constant tied_low : std_logic := '0';

  signal sel : std_logic_vector(selwid-1 downto 0);

begin  -- architecture rtl

  -- selectors mapping
  -- NOTE: case style is vhdl08
  gen0: block
  begin
    gencfg: case nbelem generate
      when 5|6 =>
    sel <= data(15 downto 13);
      when 4|3 =>
    sel <= data(12 downto 11);
      when 2 =>
    sel <= data(9 downto 9);
      when 1 =>
    sel <= (others => tied_low);
    end generate gencfg;
  end block gen0;


  p0: process(all) is -- vhdl'08 syntax
    variable sel_v : integer;
  begin  -- process p0_b
    sel_v := to_integer(unsigned(sel));
    if (sel_v < nbelem and sel_v > 0) then
      clk_out <= app_clk(sel_v);
    else
      clk_out <= app_clk(0);
    end if;

  end process p0;



end architecture rtl;

1 Ответ

0 голосов
/ 02 мая 2018

На самом деле vhdl'08 установлен по умолчанию, поэтому особой опции нет.

И в Synopsys уже открыто дело для этого. Но они не предоставляют никакой даты для поддержки.

Обходной путь - вернуться к синтаксису vhdl'87.

...