我试图在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 回答
你不应该使用库
IEEE.STD_LOGIC_UNSIGNED.ALL
不推荐使用此库(请参阅VHDL FAQ);请改用
ieee.numeric_std.all
.回答你的最后一点 - 不要把它当作编程 . HDL代表“硬件描述语言” . 您正在描述硬件,在编写代码时始终牢记这一点:)
我也写了很长时间about not using STD_LOGIC_UNSIGNED, but using NUMERIC_STD instead . 如果这是家庭作业,那么你已经有好几年了 .
VHDL是强类型的,所以如果count表示一个数字(并且具有这样的名称,最好是:),使用
signed
或unsigned
向量或integer
. 除非你做它们,否则整数不会在模拟中回转(如果你在它们达到最大值时加1,模拟器将终止) . 矢量类型 . 有时你想要一种行为,有时候是另一种 .最后,我刚才注意到了这一点:
哪个写得更好:
再一次,这已经持续了大约十年或两年 . 如果您打算使用下降沿 - 上升沿是更常见的 .
您需要将std_logic_vector转换为无符号值,以便添加一个,然后将其强制转换,以便将其分配给输出 .
这看起来像是一项家庭作业,所以我将让你弄明白如何实施 .