在VHDL中向逻辑_向量添加“1”

在VHDL中向逻辑_向量添加“1”,vhdl,Vhdl,我试图在VHDL中向N长度的STD_逻辑_向量添加“1” 这是我第一次使用VHDL,所以我根本不知道如何在不构建全加器的情况下添加1,这似乎有点冗余 我们不允许再使用任何自由主义者,而不是代码中的自由主义者 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt IS GENERIC (n: natural :=3); PORT( clk: IN std

我试图在VHDL中向N长度的STD_逻辑_向量添加“1”

这是我第一次使用VHDL,所以我根本不知道如何在不构建全加器的情况下添加1,这似乎有点冗余

我们不允许再使用任何自由主义者,而不是代码中的自由主义者

    LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;


ENTITY cnt IS

 GENERIC (n: natural :=3);

 PORT( clk: IN  std_logic;      -- clock
   rst: IN  std_logic;      -- reset
   cntNum: IN  std_logic_vector(n-1 DOWNTO 0); -- # of counting cycles
   cntOut: OUT std_logic_vector(n-1 DOWNTO 0) -- count result
 );
END cnt;


architecture CntBhvArc OF cnt IS

    signal counta : std_logic_vector(n-1 DOWNTO 0);

begin

 process (clk, rst)

 begin

     if rst='1' then

         counta<="0";

     elsif (clk'event) and (clk='0') then

         counta<= counta+'1';

     end if;

 cntOut<=counta;

 end process;

END CntBhvArc
还有。。。有谁能为一个在编程方面经验很少的人指出一个VHDL totrial吗


谢谢

您需要将std_逻辑_向量强制转换为无符号值,以便添加一个,然后将其强制转换回,以便将其分配给输出


这看起来像是一个家庭作业,所以我将让您确切地了解如何实现。

您不应该使用库IEEE.STD\u LOGIC\u UNSIGNED.ALL


此库已弃用请参阅;用ieee.numeric\u std.all代替。

回答你的最后一点-不要把它看作是编程。HDL代表硬件描述语言。在描述硬件时,请在编写代码时始终牢记:

我也写了很多。若这是家庭作业,你们被教导使用未签名的STD_逻辑,那个么我对教育机构感到绝望。这已经有好几年没有意义了

VHDL是强类型的,因此,如果count表示一个数字,并且使用这样的名称,那么最好是:,使用有符号或无符号向量,或者使用整数。整数不会在模拟中环绕,除非您创建它们。如果在它们处于最大值时向它们添加1,则模拟器将终止。向量类型确实如此。有时你想要一种行为,有时想要另一种

最后,我注意到:

elsif (clk'event) and (clk='0') then
哪一个写得更好:

elsif falling_edge(clk) then
同样,这种情况已经持续了大约一二十年。您是否打算使用下降沿-上升沿更常见