5

I'm having trouble getting the following report statement to work:

report "ERROR: instruction address '" & CONV_INTEGER(a(7 downto 2)) & "' out of memory range." severity failure;

Where a is of type in std_logic_vector(31 downto 0).

The error I'm getting is:

No feasible entries for infix operator "&".

I'm wanting to print out a string, concatenate the integer value, then concatenate another string.

What am I doing wrong?

1
  • 1
    Have a look at strings.vhdl from The PoC Library. There are many functions to convert numbers and std vectors to strings (bin, hex, ...). These functions can be used in report statements. Commented Apr 16, 2015 at 22:13

1 Answer 1

5

An example of using 'IMAGE:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity foo is 
end entity;

architecture fum of foo is
    signal a: std_logic_vector (31 downto 0) := x"deadbeef";
begin
    process (a)
    begin
        report "ERROR: instruction address '" & 
--          CONV_INTEGER(a(7 downto 2)) & 
            INTEGER'IMAGE(to_integer(unsigned (a(7 downto 2)))) &
        "' out of memory range." ;-- severity failure;
    end process;
end architecture;

I used package numeric_std. The principle is the same, the name of the conversion routine is different.

'IMAGE is a predefined attribute that returns a string representation of a value of a type (in this case an INTEGER).

Your failure message was because there isn't an "&" concatenation operator available that knows how to concatenate an integer onto a string, so instead you provide the string image of the integer.

When run:

ghdl -r foo
foo.vhdl:13:9:@0ms:(report note): ERROR: instruction address '59' out of memory range.

And bits 7 downto 2 are "111011" from the bit string initialization, which just happens to equal 59 when represented as an integer.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.