2010-11-13 76 views
-1

“1” LOGIC_VECTOR我想加“1”到N-长度STD_LOGIC_VECTOR在VHDL将在VHDL

这是第一次我用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的人谁在编程具有非常小的遭遇?

感谢

回答

0

您需要将std_logic_vector转换为一个无符号的价值,所以你可以添加一个,再投回去,这样就可以将其分配给您的输出。

这看起来像一个家庭作业,所以我会让你找出如何执行。

+3

但是不要 - 使它成为一个正确的数字类型,以 – 2010-11-15 14:21:37

5

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

该库已过时(见VHDL FAQ);改为使用ieee.numeric_std.all

1

要回答你的最后一点 - 不要认为它是编程。 HDL代表“硬件描述语言”。您在描述硬件时,请在编写代码时始终记住:)

我也写过长度为about not using STD_LOGIC_UNSIGNED, but using NUMERIC_STD instead。如果这是作业,并且你被教导使用STD_LOGIC_UNSIGNED,那么我绝望的教育机构。多年以来,这是有道理的。

VHDL是强类型的,所以如果count代表一个数字(并且这样的名称最好是:),则使用signedunsigned向量或integer。除非你使用整数,否则整数不会在模拟中环绕(如果你在它们的最大值处加1,模拟器将终止)。矢量类型可以。有时候你想要一种行为,有时却需要一种行为

最后,我只是指出这一点:

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

哪个比较好写为:

elsif falling_edge(clk) then 

又来了,这已经让约一,二十年。你是否打算使用下降沿 - 上升沿更平常。