如何根据常数的对数设置 VHDL 矢量大小

moh*_*ohi 3 verilog fpga vhdl

我想知道什么是对应的 VHDL 代码$clog2(DATA_WIDTH),例如在这一行中:

parameter DATA_OUT_WIDTH = $clog2(DATA_WIDTH)
Run Code Online (Sandbox Code Playgroud)

在这个例子中,还有这个符号“-:”

if ( Pattern == In[i_count-:PATTERN_WIDTH] )
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助我,我将不胜感激。

las*_*und 5

你可以做这样的事情

constant DATA_OUT_WIDTH : positive := positive(ceil(log2(real(DATA_WIDTH))));
Run Code Online (Sandbox Code Playgroud)

或者定义一个封装该表达式的 clog2 函数。ceil 和 log2 可以在 math_real 中找到

use ieee.math_real.all;
Run Code Online (Sandbox Code Playgroud)

在 VHDL 中,您可以指定完整范围,例如

foo(i_count to i_count + 7)
foo(i_count downto i_count - 7)
Run Code Online (Sandbox Code Playgroud)

不要使用In作为标识符,它是 VHDL 中的保留字。