Sylvere,
Your instantiation of the rom is wrong , try the attached version of the testbench.
You have to provide the model with two files .
Regards

Michel Agoyan
(EMSE , CMP)

Sylvere Teissier a écrit :
Hello,

I found a bug in GHDL with Spansion flash model (segfault)

It seems that there is a weird problem at elaboration:

(gdb) run
Starting program: /home/steissier/temp/test_spansion/testbench
--stop-time=100ns

Program received signal SIGSEGV, Segmentation fault.
0x403c975d in memmove () from /lib/i686/cmov/libc.so.6
(gdb) where
#0  0x403c975d in memmove () from /lib/i686/cmov/libc.so.6
#1  0x080d3efb in __ghdl_memcpy ()
#2  0x08053a2f in work__testbench__ARCH__tb__rom__ELAB
(INSTANCE=0x9fe2428)
    at testbench.vhd:16
#3  0x080551b9 in work__testbench__ARCH__tb__ELAB (INSTANCE=0x9fe2428)
    at testbench.vhd:13
#4  0x0804a524 in __ghdl_ELABORATE ()
#5  0x080e8068 in grt__main__run ()
#6  0x080e66fd in ghdl_main ()
#7  0x080e2e72 in main ()

Makefile and sources are in attachment

------------------------------------------------------------------------

_______________________________________________
Ghdl-discuss mailing list
[email protected]
https://mail.gna.org/listinfo/ghdl-discuss

library ieee;
use ieee.std_logic_1164.all;
use IEEE.VITAL_timing.all;
use IEEE.VITAL_primitives.all;
use STD.textio.all;

library FMF;
use FMF.gen_utils.all;
use FMF.conversions.all;


entity testbench is
end entity;

architecture tb of testbench is
  signal address                                  : std_logic_vector(17 downto 
0) := (others => '1');
  signal data                                     : std_logic_vector(15 downto 
0) := (others => 'Z');
  signal ce_n, oe_n, we_n, reset_n, byte_n, ready : std_logic                   
  := '0';

  component s29al004d
    generic (
      tipd_A0              : VitalDelayType01;
      tipd_A1              : VitalDelayType01;
      tipd_A2              : VitalDelayType01;
      tipd_A3              : VitalDelayType01;
      tipd_A4              : VitalDelayType01;
      tipd_A5              : VitalDelayType01;
      tipd_A6              : VitalDelayType01;
      tipd_A7              : VitalDelayType01;
      tipd_A8              : VitalDelayType01;
      tipd_A9              : VitalDelayType01;
      tipd_A10             : VitalDelayType01;
      tipd_A11             : VitalDelayType01;
      tipd_A12             : VitalDelayType01;
      tipd_A13             : VitalDelayType01;
      tipd_A14             : VitalDelayType01;
      tipd_A15             : VitalDelayType01;
      tipd_A16             : VitalDelayType01;
      tipd_A17             : VitalDelayType01;
      tipd_DQ0             : VitalDelayType01;
      tipd_DQ1             : VitalDelayType01;
      tipd_DQ2             : VitalDelayType01;
      tipd_DQ3             : VitalDelayType01;
      tipd_DQ4             : VitalDelayType01;
      tipd_DQ5             : VitalDelayType01;
      tipd_DQ6             : VitalDelayType01;
      tipd_DQ7             : VitalDelayType01;
      tipd_DQ8             : VitalDelayType01;
      tipd_DQ9             : VitalDelayType01;
      tipd_DQ10            : VitalDelayType01;
      tipd_DQ11            : VitalDelayType01;
      tipd_DQ12            : VitalDelayType01;
      tipd_DQ13            : VitalDelayType01;
      tipd_DQ14            : VitalDelayType01;
      tipd_DQ15            : VitalDelayType01;
      tipd_CENeg           : VitalDelayType01;
      tipd_OENeg           : VitalDelayType01;
      tipd_WENeg           : VitalDelayType01;
      tipd_RESETNeg        : VitalDelayType01;
      tipd_BYTENeg         : VitalDelayType01;
      tpd_RESETNeg_DQ0     : VitalDelayType01Z;
      tpd_A0_DQ0           : VitalDelayType01;
      tpd_CENeg_DQ0        : VitalDelayType01Z;
      tpd_OENeg_DQ0        : VitalDelayType01Z;
      tpd_WENeg_RY         : VitalDelayType01;
      tpd_BYTENeg_DQ15     : VitalDelayType01Z;
      tsetup_A0_CENeg      : VitalDelayType;
      tsetup_DQ0_CENeg     : VitalDelayType;
      tsetup_OENeg_WENeg   : VitalDelayType;
      tsetup_CENeg_WENeg   : VitalDelayType;
      thold_A0_CENeg       : VitalDelayType;
      thold_DQ0_CENeg      : VitalDelayType;
      thold_OENeg_WENeg    : VitalDelayType;
      thold_CENeg_WENeg    : VitalDelayType;
      thold_CENeg_RESETNeg : VitalDelayType;
      thold_BYTENeg_CENeg  : VitalDelayType;
      tpw_RESETNeg_negedge : VitalDelayType;
      tpw_WENeg_negedge    : VitalDelayType;
      tpw_WENeg_posedge    : VitalDelayType;
      tpw_A0_negedge       : VitalDelayType;
      tdevice_POB          : VitalDelayType;
      tdevice_POW          : VitalDelayType;
      tdevice_SEO          : VitalDelayType;
      tdevice_HANG         : VitalDelayType;
      tdevice_START_T1     : VitalDelayType;
      tdevice_CTMOUT       : VitalDelayType;
      tdevice_READY        : VitalDelayType;
      InstancePath         : string;
      TimingChecksOn       : boolean;
      MsgOn                : boolean;
      XOn                  : boolean;
      mem_file_name        : string;
      prot_file_name       : string;
      UserPreload          : boolean;
      LongTimming          : boolean;
      TimingModel          : string);
    port (
      A17      : in    std_ulogic := 'U';
      A16      : in    std_ulogic := 'U';
      A15      : in    std_ulogic := 'U';
      A14      : in    std_ulogic := 'U';
      A13      : in    std_ulogic := 'U';
      A12      : in    std_ulogic := 'U';
      A11      : in    std_ulogic := 'U';
      A10      : in    std_ulogic := 'U';
      A9       : in    std_ulogic := 'U';
      A8       : in    std_ulogic := 'U';
      A7       : in    std_ulogic := 'U';
      A6       : in    std_ulogic := 'U';
      A5       : in    std_ulogic := 'U';
      A4       : in    std_ulogic := 'U';
      A3       : in    std_ulogic := 'U';
      A2       : in    std_ulogic := 'U';
      A1       : in    std_ulogic := 'U';
      A0       : in    std_ulogic := 'U';
      DQ15     : inout std_ulogic := 'U';
      DQ14     : inout std_ulogic := 'U';
      DQ13     : inout std_ulogic := 'U';
      DQ12     : inout std_ulogic := 'U';
      DQ11     : inout std_ulogic := 'U';
      DQ10     : inout std_ulogic := 'U';
      DQ9      : inout std_ulogic := 'U';
      DQ8      : inout std_ulogic := 'U';
      DQ7      : inout std_ulogic := 'U';
      DQ6      : inout std_ulogic := 'U';
      DQ5      : inout std_ulogic := 'U';
      DQ4      : inout std_ulogic := 'U';
      DQ3      : inout std_ulogic := 'U';
      DQ2      : inout std_ulogic := 'U';
      DQ1      : inout std_ulogic := 'U';
      DQ0      : inout std_ulogic := 'U';
      CENeg    : in    std_ulogic := 'U';
      OENeg    : in    std_ulogic := 'U';
      WENeg    : in    std_ulogic := 'U';
      RESETNeg : in    std_ulogic := 'U';
      BYTENeg  : in    std_ulogic := 'U';
      RY       : out   std_ulogic := 'U');
  end component;
begin

  s29al004d_1 : s29al004d
    generic map (
      tipd_A0              => VitalZeroDelay01,
      tipd_A1              => VitalZeroDelay01,
      tipd_A2              => VitalZeroDelay01,
      tipd_A3              => VitalZeroDelay01,
      tipd_A4              => VitalZeroDelay01,
      tipd_A5              => VitalZeroDelay01,
      tipd_A6              => VitalZeroDelay01,
      tipd_A7              => VitalZeroDelay01,
      tipd_A8              => VitalZeroDelay01,
      tipd_A9              => VitalZeroDelay01,
      tipd_A10             => VitalZeroDelay01,
      tipd_A11             => VitalZeroDelay01,
      tipd_A12             => VitalZeroDelay01,
      tipd_A13             => VitalZeroDelay01,
      tipd_A14             => VitalZeroDelay01,
      tipd_A15             => VitalZeroDelay01,
      tipd_A16             => VitalZeroDelay01,
      tipd_A17             => VitalZeroDelay01,
      tipd_DQ0             => VitalZeroDelay01,
      tipd_DQ1             => VitalZeroDelay01,
      tipd_DQ2             => VitalZeroDelay01,
      tipd_DQ3             => VitalZeroDelay01,
      tipd_DQ4             => VitalZeroDelay01,
      tipd_DQ5             => VitalZeroDelay01,
      tipd_DQ6             => VitalZeroDelay01,
      tipd_DQ7             => VitalZeroDelay01,
      tipd_DQ8             => VitalZeroDelay01,
      tipd_DQ9             => VitalZeroDelay01,
      tipd_DQ10            => VitalZeroDelay01,
      tipd_DQ11            => VitalZeroDelay01,
      tipd_DQ12            => VitalZeroDelay01,
      tipd_DQ13            => VitalZeroDelay01,
      tipd_DQ14            => VitalZeroDelay01,
      tipd_DQ15            => VitalZeroDelay01,
      tipd_CENeg           => VitalZeroDelay01,
      tipd_OENeg           => VitalZeroDelay01,
      tipd_WENeg           => VitalZeroDelay01,
      tipd_RESETNeg        => VitalZeroDelay01,
      tipd_BYTENeg         => VitalZeroDelay01,
      tpd_RESETNeg_DQ0     => UnitDelay01Z,
      tpd_A0_DQ0           => UnitDelay01,
      tpd_CENeg_DQ0        => UnitDelay01Z,
      tpd_OENeg_DQ0        => UnitDelay01Z,
      tpd_WENeg_RY         => UnitDelay01,
      tpd_BYTENeg_DQ15     => UnitDelay01Z,
      tsetup_A0_CENeg      => UnitDelay,
      tsetup_DQ0_CENeg     => UnitDelay,
      tsetup_OENeg_WENeg   => UnitDelay,
      tsetup_CENeg_WENeg   => UnitDelay,
      thold_A0_CENeg       => UnitDelay,
      thold_DQ0_CENeg      => UnitDelay,
      thold_OENeg_WENeg    => UnitDelay,
      thold_CENeg_WENeg    => UnitDelay,
      thold_CENeg_RESETNeg => UnitDelay,
      thold_BYTENeg_CENeg  => UnitDelay,
      tpw_RESETNeg_negedge => UnitDelay,
      tpw_WENeg_negedge    => UnitDelay,
      tpw_WENeg_posedge    => UnitDelay,
      tpw_A0_negedge       => UnitDelay,
      tdevice_POB          => 5 us,
      tdevice_POW          => 7 us,
      tdevice_SEO          => 700 ms,
      tdevice_HANG         => 400 ms,
      tdevice_START_T1     => 20 us,
      tdevice_CTMOUT       => 50 us,
      tdevice_READY        => 20 us,
      InstancePath         => DefaultInstancePath,
      TimingChecksOn       => DefaultTimingChecks,
      MsgOn                => DefaultMsgOn,
      XOn                  => DefaultXon,
      mem_file_name        => "s29al004d.mem",
      prot_file_name       => "s29al004d_prot.mem",
      UserPreload          => false,
      LongTimming          => true,
      TimingModel          => "S29AL004D55TAI01")
    port map(
      A17      => address(17),
      A16      => address(16),
      A15      => address(15),
      A14      => address(14),
      A13      => address(13),
      A12      => address(12),
      A11      => address(11),
      A10      => address(10),
      A9       => address(9),
      A8       => address(8),
      A7       => address(7),
      A6       => address(6),
      A5       => address(5),
      A4       => address(4),
      A3       => address(3),
      A2       => address(2),
      A1       => address(1),
      A0       => address(0),
      DQ15     => data(15),
      DQ14     => data(14),
      DQ13     => data(13),
      DQ12     => data(12),
      DQ11     => data(11),
      DQ10     => data(10),
      DQ9      => data(9),
      DQ8      => data(8),
      DQ7      => data(7),
      DQ6      => data(6),
      DQ5      => data(5),
      DQ4      => data(4),
      DQ3      => data(3),
      DQ2      => data(2),
      DQ1      => data(1),
      DQ0      => data(0),
      CENeg    => ce_n,
      OENeg    => oe_n,
      WENeg    => we_n,
      RESETNeg => reset_n,
      BYTENeg  => byte_n,
      RY       => ready
      );

  test : process
  begin
    address <= "00" & x"0004";
    data    <= (others => 'Z');
    ce_n    <= '0';
    we_n    <= '1';
    oe_n    <= '0';
    byte_n  <= '1';
    reset_n <= '1';
    wait for 200 ns;
    address <= "00" & x"0014";
    data    <= (others => 'Z');
    wait for 200 ns;
    wait;
  end process;
  
end architecture;
_______________________________________________
Ghdl-discuss mailing list
[email protected]
https://mail.gna.org/listinfo/ghdl-discuss

Reply via email to