我正在使用Altera Max plus II,用VHDL编写。
在架构中,我得到了这个命令:
signal count_value : unsigned (3 downto 0);
我注意到count_value的初始值是0000。 我该怎么改变它?
编辑:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all ;
entity decade_counter is
port ( clk : in std_logic;
q : out unsigned(3 downto 0) );
end entity decade_counter;
architecture rtl of decade_counter is
signal count_value : unsigned(3 downto 0);
begin
count : process (clk) is
begin
if rising_edge(clk) then
if count_value = 9 then
count_value <= "0000";
else
count_value <= count_value + 1;
end if;
end if;
end process count;
q <= count_value;
end architecture rtl;
我有这个代码,它是一个从1到9的BCD计数器。我想修改它,使其从7到12.这就是为什么我想在0.11初始化count_value。
提前致谢
答案 0 :(得分:1)
首先 - 不要使用std_logic_arith
。它不是标准的一部分,通常会产生问题。请改用numeric_std
。
第二 - 初始化。你可以用两种方式做到这一点:
声明信号时的初始值。这是可能的,但您必须检查您的设备是否支持它。如果您希望代码可移植,请使用第二种方法。
复位。最好是同步的,因为它通常是逻辑的一部分。
示例(尚未检查,但应该有效):
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all ;
entity decade_counter is
port (
clk : in std_logic;
reset_n: in std_logic;
q : out std_logic_vector(3 downto 0)
);
end entity decade_counter;
architecture rtl of decade_counter is
signal count_value : unsigned(3 downto 0);
-- Possibly:
-- signal count_value : unsigned(3 downto 0) := "0111";
begin
count : process (clk) is
begin
if rising_edge(clk) then
if resetn = '0' then
count_value <= "0111";
else
if count_value >= 12 then
count_value <= "0111";
else
count_value <= count_value + 1;
end if;
end if;
end if;
end process count;
q <= std_logic_vector(count_value);
end architecture rtl;
答案 1 :(得分:0)
如果你想在构建时为它提供一些价值。我建议你试试这个方法
signal count_value : unsigned (3 downto 0) := "xxxx";
此“xxxx”可以是您想要的任何std_logic_Vector值
希望它有所帮助!