VHDL中无符号的初始值

时间:2017-05-16 16:35:41

标签: vhdl

我正在使用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。

提前致谢

2 个答案:

答案 0 :(得分:1)

首先 - 不要使用std_logic_arith。它不是标准的一部分,通常会产生问题。请改用numeric_std

第二 - 初始化。你可以用两种方式做到这一点:

  1. 声明信号时的初始值。这是可能的,但您必须检查您的设备是否支持它。如果您希望代码可移植,请使用第二种方法。

  2. 复位。最好是同步的,因为它通常是逻辑的一部分。

  3. 示例(尚未检查,但应该有效):

    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值

希望它有所帮助!