如何修改VHDL计数器代码并正确地将向量转换为整数?

如何修改VHDL计数器代码并正确地将向量转换为整数?,vhdl,counter,Vhdl,Counter,我们应该在VHDL中修改从学校得到的计数器的代码一两行,使其在a到B的范围内计数。这就是我们目前得到的 entity counter is generic ( B : integer := 4; A : integer := 0 ); port ( CLK : IN std_logic; RST : IN std_logic; Q : OUT std_logic_vector(log2(N)-1 downto 0) ); end cntn; architect

我们应该在VHDL中修改从学校得到的计数器的代码一两行,使其在a到B的范围内计数。这就是我们目前得到的

entity counter is
generic (
    B : integer := 4; 
    A : integer := 0
 );
port (
 CLK : IN  std_logic;
 RST : IN  std_logic;
 Q   : OUT std_logic_vector(log2(N)-1 downto 0)
);
end cntn;

architecture run01 of counter is 
signal a0 : std_logic_vector(Q'range) := (others => '0');
begin
Q <= a0;
citac: process (RST, CLK)
begin
  if RST='1' then
     a0 <= (others => std_logic_vector(conv_integer(A, cnt'length)));
  elsif rising_edge(CLK) then 
     a0 <= a0 + 1; 
       if a0 = A then 
           a0 <= (others => '0'); 
       end if;
     end if; 
  end process;
end architecture;
实体计数器不可用
一般的(
B:整数:=4;
A:整数:=0
);
港口(
CLK:标准逻辑中;
RST:标准逻辑中;
Q:输出标准逻辑向量(log2(N)-1到0)
);
末端碳纳米管;
计数器的结构run01为
信号a0:std_逻辑_向量(Q'范围):=(其他=>'0');
开始

Q使用
ieee.numeric_std.all
软件包。那就写吧

a0 <= std_logic_vector(to_unsigned(A,a0'length));

a0使用
ieee.numeric\u std.all
软件包。然后写
a0哇,谢谢你,它似乎在工作@对我来说,这看起来非常像一个答案…代码不完整。什么是
N
?什么是
log2
?您的库在哪里?此代码甚至不会分析(甚至添加到缺少的上下文子句中。
end ctn;
与实体名称(
counter
)不匹配。在问题分配语句中也没有使用
cnt
的声明。聚合
(其他=>标准逻辑向量(conv\u整数(a,cnt'length)))
尝试分配整数值(虚构cnt的长度)当
a0
的元素基类型为std\u ulogic时,非法转换为std\u logic\u vector的
a0
的每个元素。就公认的答案而言,奇怪的是,为什么要将
a0
的二进制长度指定给
a0
。如果您建议使用
numeric\u std
,您也可以建议
a0
也可以是一个
未签名的
类型…@JHBonarius这不是否决正确答案的理由。顺便说一句。我可以提出很多建议,但OP要求修复她源代码的一行。我发表评论,并不意味着我否决了答案。
a0 <= std_logic_vector(to_unsigned(A,a0'length));