首页 文章

在VHDL中将'1'添加到LOGIC_VECTOR

提问于
浏览
-1

我试图在VHDL中将'1'添加到N长度STD_LOGIC_VECTOR

这是我第一次使用VHDL,所以我完全不确定如何添加这个1,而不需要添加一个看似有点冗余的Full-Adder

我们不允许在代码中使用任何更多的库,然后使用一个 .

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总计吗?

谢谢

3 回答

  • 1

    你不应该使用库 IEEE.STD_LOGIC_UNSIGNED.ALL

    不推荐使用此库(请参阅VHDL FAQ);请改用 ieee.numeric_std.all .

  • 0

    回答你的最后一点 - 不要把它当作编程 . HDL代表“硬件描述语言” . 您正在描述硬件,在编写代码时始终牢记这一点:)

    我也写了很长时间about not using STD_LOGIC_UNSIGNED, but using NUMERIC_STD instead . 如果这是家庭作业,那么你已经有好几年了 .

    VHDL是强类型的,所以如果count表示一个数字(并且具有这样的名称,最好是:),使用 signedunsigned 向量或 integer . 除非你做它们,否则整数不会在模拟中回转(如果你在它们达到最大值时加1,模拟器将终止) . 矢量类型 . 有时你想要一种行为,有时候是另一种 .

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

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

    哪个写得更好:

    elsif falling_edge(clk) then
    

    再一次,这已经持续了大约十年或两年 . 如果您打算使用下降沿 - 上升沿是更常见的 .

  • 5

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

    这看起来像是一项家庭作业,所以我将让你弄明白如何实施 .

相关问题