Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
16 years ago

Compiler error

Hi all,

I'm strugglin to figure out how to fix this error :

"Error (10822) : HDL error at rx_symb.vhd(30): could'nt implement registers for assignments on this clock edge "

from the code below which just takes the input array and passes it onto its output..

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity rx_symb is

port

(

-- Input ports

symb_in : in std_logic_vector(15 downto 0);

symb_clk : in std_logic;

-- Output ports

symb_out : out std_logic_vector(15 downto 0);

trigger : out std_logic :='0'

);

end rx_symb;

-- Library Clause(s) (optional)

-- Use Clause(s) (optional)

architecture struc of rx_symb is

-- Declarations (optional)

begin

process(symb_clk) is

begin

if rising_edge(symb_clk) then

symb_out <= symb_in;

trigger <= '1';

else

trigger <= '0';

end if;

end process;

end struc;

I've read a few of the older posts on this particular error and most were addressing the problem of giving a process conflicting clocks (ie either 2 different clocks or causing a statemet to be sensitive to different clock edges). As fr as I can tell, I dont have either of these issues in my code.

May you please shed some light.

Thank you.

2 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    Hi all,

    I'm strugglin to figure out how to fix this error :

    "Error (10822) : HDL error at rx_symb.vhd(30): could'nt implement registers for assignments on this clock edge "

    from the code below which just takes the input array and passes it onto its output..

    library ieee;

    use ieee.std_logic_1164.all;

    use ieee.numeric_std.all;

    entity rx_symb is

    port

    (

    -- Input ports

    symb_in : in std_logic_vector(15 downto 0);

    symb_clk : in std_logic;

    -- Output ports

    symb_out : out std_logic_vector(15 downto 0);

    trigger : out std_logic :='0'

    );

    end rx_symb;

    -- Library Clause(s) (optional)

    -- Use Clause(s) (optional)

    architecture struc of rx_symb is

    -- Declarations (optional)

    begin

    process(symb_clk) is

    begin

    if rising_edge(symb_clk) then

    symb_out <= symb_in;

    trigger <= '1';

    else

    trigger <= '0';

    end if;

    end process;

    end struc;

    I've read a few of the older posts on this particular error and most were addressing the problem of giving a process conflicting clocks (ie either 2 different clocks or causing a statemet to be sensitive to different clock edges). As fr as I can tell, I dont have either of these issues in my code.

    May you please shed some light.

    Thank you.

    --- Quote End ---

    Hi Tiisetso,

    you have a problem in your process description. At the rising edge of the clk you what to set the trigger signal to "1". But what should happend all the other time ? Setting the trigger signal to "0"? That is not the behaviour of an register, where the output signal could change only at the clock edge.

    process(symb_clk) is

    begin

    if rising_edge(symb_clk) then

    symb_out <= symb_in;

    trigger <= '1';

    else

    trigger <= '0';

    end if;

    end process;

    Kind regards

    GPK