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?

Nate
  • 26,164
  • 34
  • 130
  • 214
  • 1
    Have a look at [strings.vhdl](https://github.com/VLSI-EDA/PoC/blob/master/src/common/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. – Paebbels Apr 16 '15 at 22:13

1 Answers1

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.