打印
[VHDL]

请教一个奇怪的问题

[复制链接]
1421|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 | 只看该作者
请教三楼的: 为什么会是上一个呢 ,因为是非阻塞赋值,我认为应该立刻就会更新呀?

使用特权

评论回复
5
mumukeai|  楼主 | 2014-4-28 08:30 | 只看该作者
还有就是请教一下二楼的,您说的一拍  指的是什么 是我给它的时钟信号吗?

使用特权

评论回复
6
EDAbuffalo| | 2014-5-1 21:52 | 只看该作者
楼主还是受c影响啊,建议多看会儿书,看看就明白了,,,最直接的方法就是仿真,明白清楚

使用特权

评论回复
7
mumukeai|  楼主 | 2014-5-4 08:55 | 只看该作者
我最大的问题就在于 我使用的是vhdl  但是在vhdl中是不存在阻塞和非阻塞的呀  还有就是我仿真的结果也因为添加引脚的不同而不同 这很困扰我

使用特权

评论回复
8
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,后面有一节专门讲信号赋值延时的问题。

使用特权

评论回复
9
nickyamw| | 2014-5-29 16:31 | 只看该作者
mumukeai 发表于 2014-5-4 08:55
我最大的问题就在于 我使用的是vhdl  但是在vhdl中是不存在阻塞和非阻塞的呀  还有就是我仿真的结果 ...

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

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

以前学VERILOG的时候用过,之后就再也没用过硬件描述语言了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝