[VHDL] 请教一个奇怪的问题

[复制链接]
1679|8
 楼主| mumukeai 发表于 2014-4-25 10:11 | 显示全部楼层 |阅读模式
ic, logic, ST, TE, ge
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,请问这是为什么呢?谢谢!
emicleung 发表于 2014-4-26 21:41 来自手机 | 显示全部楼层
Incount加1需要1拍,再过1拍给Incounto,这是非阻塞赋值。
chen499103 发表于 2014-4-26 22:04 | 显示全部楼层
在进程语句中,INCOUNTO 赋的值是上个INCOUNT的值,并没有立即随INCOUNT而更新
 楼主| mumukeai 发表于 2014-4-28 08:29 | 显示全部楼层
请教三楼的: 为什么会是上一个呢 ,因为是非阻塞赋值,我认为应该立刻就会更新呀?
 楼主| mumukeai 发表于 2014-4-28 08:30 | 显示全部楼层
还有就是请教一下二楼的,您说的一拍  指的是什么 是我给它的时钟信号吗?
EDAbuffalo 发表于 2014-5-1 21:52 | 显示全部楼层
楼主还是受c影响啊,建议多看会儿书,看看就明白了,,,最直接的方法就是仿真,明白清楚
 楼主| mumukeai 发表于 2014-5-4 08:55 | 显示全部楼层
我最大的问题就在于 我使用的是vhdl  但是在vhdl中是不存在阻塞和非阻塞的呀  还有就是我仿真的结果也因为添加引脚的不同而不同 这很困扰我
zhangwenxinzck 发表于 2014-5-29 16:19 | 显示全部楼层
我是VHDL的初学者,曾在书上看到你这个问题。
信号赋值与变量赋值不一样,信号赋值时有延时的,
INCOUNT <= INCOUNT + 1;
INCOUNTO <= INCOUNT;
进程运行时有一个模拟定时器,时间是δ,在δ内完成程序的执行,每个赋值语句都是同时执行,但并没有赋值,赋值是在执行到end process时才赋值的。在执行到end process时,此时的incount的值是0,并没有被incount+1更新,在incount更新到incount+1时,incount已经将0赋给了incount0,也就是在下一个上升沿来的时候才是1。并不是上升沿来了,1立刻赋值给了incount0,它是将上升沿来之前的incount赋给了incount0。总之是信号赋值延时的问题。说的有点乱,推荐你看下潘松的EDA,后面有一节专门讲信号赋值延时的问题。
nickyamw 发表于 2014-5-29 16:31 | 显示全部楼层
mumukeai 发表于 2014-5-4 08:55
我最大的问题就在于 我使用的是vhdl  但是在vhdl中是不存在阻塞和非阻塞的呀  还有就是我仿真的结果 ...

阻塞跟非阻塞  与使用的硬件描述语言无关。

VHDL也是可以编写出阻塞式的过程。你要去知道阻塞和非阻塞的定义。

以前学VERILOG的时候用过,之后就再也没用过硬件描述语言了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部