请教一个奇怪的问题

2020-02-23 10:44发布

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;


Entity DDFF IS
PORT
(   
  OUTER   : OUT STD_LOGIC;
  INCOUNTO: OUT INTEGER RANGE 0 TO 3;
  INNER   : IN STD_LOGIC;
  EN      : IN STD_LOGIC;
  CLK    : IN  STD_LOGIC
);
END ENTITY DDFF;

ARCHITECTURE ONE OF DDFF IS
SIGNAL INCOUNT : INTEGER RANGE 0 TO 3 := 0;
BEGIN
PROCESS(CLK,EN)
BEGIN
  IF EN = '1' THEN
   IF CLK'EVENT AND CLK = '1' THEN
    OUTER <= NOT INNER;
    IF INCOUNT < 3 THEN
     INCOUNT <= INCOUNT + 1;
     INCOUNTO <= INCOUNT;
    END IF;
    IF INCOUNT = 3 THEN
     INCOUNT <= 0;
     INCOUNTO <= INCOUNT;
    END IF;  
   END IF;
  ELSE
   INCOUNT <= 0;
   OUTER <= '0';
   INCOUNTO <= INCOUNT;
  END IF;
END PROCESS;
END ONE;

这是我自己写的一个小程序。目的是来一个时钟,OUTER就输出INNER的反向,同时另一个输出INCOUNTO加1输出。现在的现象就是OUTER能实现我的目的,而INCOUNTO却要在下一个时钟周期到来的时候才会加1,请问这是为什么呢?谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
emicleung
1楼-- · 2020-02-23 14:51
Incount加1需要1拍,再过1拍给Incounto,这是非阻塞赋值。
chen499103
2楼-- · 2020-02-23 15:05
在进程语句中,INCOUNTO 赋的值是上个INCOUNT的值,并没有立即随INCOUNT而更新
mumukeai
3楼-- · 2020-02-23 17:11
 精彩回答 2  元偷偷看……
mumukeai
4楼-- · 2020-02-23 19:45
还有就是请教一下二楼的,您说的一拍  指的是什么 是我给它的时钟信号吗?
EDAbuffalo
5楼-- · 2020-02-24 01:20
楼主还是受c影响啊,建议多看会儿书,看看就明白了,,,最直接的方法就是仿真,明白清楚
mumukeai
6楼-- · 2020-02-24 02:19
我最大的问题就在于 我使用的是vhdl  但是在vhdl中是不存在阻塞和非阻塞的呀  还有就是我仿真的结果也因为添加引脚的不同而不同 这很困扰我

一周热门 更多>