-1

我正在尝试将“1”添加到 VHDL 中的 N 长度 STD_LOGIC_VECTOR

这是我第一次使用 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试用版吗?

谢谢

4

3 回答 3

5

你不应该使用图书馆IEEE.STD_LOGIC_UNSIGNED.ALL

该库已弃用(请参阅VHDL FAQ);改为使用ieee.numeric_std.all

于 2010-11-14T06:55:07.050 回答
1

回答您的最后一点-不要将其视为编程。HDL代表“硬件描述语言”。您正在描述硬件,在编写代码时请始终牢记这一点:)

我还详细写了关于不使用 STD_LOGIC_UNSIGNED 而是使用 NUMERIC_STD 的文章。如果这是家庭作业并且您被教导使用 STD_LOGIC_UNSIGNED,那么我对教育机构感到绝望。这已经有好几年了。

VHDL 是强类型的,因此如果 count 表示一个数字(并且具有这样的名称,最好是 :),请使用 asignedunsignedvector 或 a integer。除非您制作整数,否则整数不会在模拟中回绕(如果您在它们达到最大值时将它们加 1,则模拟器将终止)。向量类型可以。有时你想要一种行为,有时又想要另一种行为。

最后,我刚刚注意到这一点:

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

最好写成:

elsif falling_edge(clk) then

同样,这种情况已经持续了大约一两年。您是否打算使用下降沿 - 上升沿更常见。

于 2010-11-15T14:21:07.470 回答
0

您需要将 std_logic_vector 转换为无符号值,以便添加一个,然后将其转换回,以便将其分配给输出。

这看起来像是一个家庭作业,所以我会让你弄清楚如何进行实施。

于 2010-11-13T23:16:29.703 回答