相关疑难解决方法(0)

VHDL:查找/报告整数的位宽/长度(与std_logic_vector相比)?

假设我需要一个信号来表示0到5之间的数字; 显然这需要表示3比特的std_logic(即如果MAXVAL = 5,则bitwidth = { wcalc "floor(logtwo($MAXVAL))+1"}).

我知道我能做到:

SIGNAL myLogicVector : STD_LOGIC_VECTOR(2 downto 0) := 5; 
Run Code Online (Sandbox Code Playgroud)

我明确指定了三个std_logic'位'的数组,并设置初始值; 然后我可以使用REPORT打印出长度(在本例中为3):

report("Bit width of myLogicVector is "& integer'image(myLogicVector'length));
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是,假设我使用整数(数字)类型:

SIGNAL myInteger : NATURAL range 0 to 5 := 5;
Run Code Online (Sandbox Code Playgroud)

我猜这里'编译器'('合成器')会自动推断它需要3位存储长度,因为这个整数的范围是0到5之间的值.如果是这样的话,我的问题是:是有可能以某种方式在报告中打印出这个位宽/长度/大小?

当然,诀窍是这样的:

report("Bit width of myInteger is "& integer'image(myInteger'length));
Run Code Online (Sandbox Code Playgroud)

...将失败(例如,使用" HDLParsers:3389 - 属性的前缀'长度必须是数组对象 "),因为据我所知,所有这些属性类似于'length并且'range仅适用于数组(了解VHDL属性),而整数(自然)不是数组 - 它是一个数字 :)(VHDL向量整数转换问题)

再一次,我知道我可以利用log2(从最大值计算无符号变量的宽度?) - 但我想要的只是快速看到(在合成期间)"合成器"有多少'位'分配给最终的综合设计,因此在最终的FPGA资源方面将使用多少(特别是如果我使用'泛型'以某种方式计算整数的特定最大值 …

logic integer synthesis vhdl width

5
推荐指数
2
解决办法
2万
查看次数

如何在VHDL中将整数写入十六进制的stdout?

我可以打印一个integer小数到标准输出:

library std;
use std.textio.all;

entity min is
end min;

architecture behav of min is
begin
    process is
        variable my_line : line;
    begin
        write(my_line, 16);
        writeline(output, my_line);
        wait;
    end process;
end behav;
Run Code Online (Sandbox Code Playgroud)

哪个输出:

16
Run Code Online (Sandbox Code Playgroud)

但是如何输出代替:

10
0x10
Run Code Online (Sandbox Code Playgroud)

vhdl ghdl

5
推荐指数
2
解决办法
9034
查看次数

标签 统计

vhdl ×2

ghdl ×1

integer ×1

logic ×1

synthesis ×1

width ×1