VHDL向上/向下计数器

时间:2015-02-05 04:26:39

标签: vhdl counter updown

大家晚上好。我首先要说的是我对VHDL很新。我有一个项目要求我建模一个由摩托罗拉在VHDL中制作的更新计数器(对于任何好奇的人来说都是MC14510B)。

从数据表可以看出,如果输入PE(预置使能)切换为高电平,则输入引脚p4 ... p1处的4个预置值将直接传递到输出q4 ... q1。

由于某种原因,我的代码拒绝编译,抛出错误错误:COMP96_0143:MC14510B.vhd:(56,13):对象“p”无法写入。我正在使用Aldec作为编译器,不知道我做错了什么。我不想写入输入,我想用q中存储的值写入qtemp。

谁能看到我搞砸了什么?在进程语句中,主if-else中的else语句给出了我的问题(p< = qtemp行)。任何帮助都将受到极大的赞赏。

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.std_logic_unsigned.all;

entity MC14510B is
  port (
    signal pe     : in    std_logic;
    signal ci_not : inout std_logic;
    signal reset  : in    std_logic;
    signal updown : in    std_logic;
    signal clk    : in    std_logic;
    signal p      : in    std_logic_vector (3 downto 0);
    signal q      : out   std_logic_vector(3 downto 0);
    signal co_not : inout std_logic
    );
end;

architecture myarch of MC14510B is
begin

  process(pe, ci_not, reset, updown, clk)
    variable qtemp  : std_logic_vector(3 downto 0);
    variable cotemp : std_logic;
  begin
    if reset = '1' then                                     --reset condition
      qtemp := "0000";
    elsif clk'event and updown = '1' and ci_not = '1' then  --count up
      if qtemp < 15 then
        qtemp  := qtemp + 1;
        cotemp := '1';
      else
        qtemp  := "0000";
        cotemp := '0';
      end if;
    elsif clk'event and updown = '0' and ci_not = '1' then  --count down
      if qtemp > 0 then
        qtemp  := qtemp - 1;
        cotemp := '1';
      else
        qtemp  := "0000";
        cotemp := '0';
      end if;
    elsif ci_not = '0' then
      qtemp  := "1010";
      cotemp := '1';
    else
      if pe = '1' then                                      --enable preset
        p      <= qtemp;                                    --output = input presets
        cotemp := '1';
      else
        qtemp  := qtemp;                                    --output = output
        cotemp := '1';
      end if;
    end if;
    q      <= qtemp;
    co_not <= cotemp;
  end process;
end myarch;

1 个答案:

答案 0 :(得分:0)

您似乎有qtemp的作业转向p := qtemp并且应该qtemp <= p。看起来p应该在该过程的敏感性列表中。

然后您的代码进行分析。不能保证它是正确的。

p已声明模式,您无法写入。