微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教一个问题,老鸟们请指教。

请教一个问题,老鸟们请指教。

时间:10-02 整理:3721RD 点击:
程序如下:
process (clk)
begin
  if rising_edge (clk) then
     S_1<=S_1 +1;
     O_1<=S_1;
  else
     null;
   end if;
end process;
其中,S_1是signal(std_logic_vector (3 downto 0)),O_1 是输出,连接到IO引脚上。
问题来了:
当我把输出的赋值(O_1<=S_1)放在进程外面的时候,仿真结果变了,O_1的值变化要比之前的程序快上一个周期,但是当我查看technology schmatic的时候,发现这两个程序所形成的technology schmatic并没有区别,这是为什么?

前者受到时钟的采样,所以晚一拍。至于为什么原理图上一样,不好解释了。

2# gaurson
可否这么理解:
当输出赋值语句在process里面的时候,输出的变化以时钟的上升沿为触发条件,即以clk上升沿为敏感信号;
当输出赋值语句在process外面的时候,输出的变化有时钟的上升沿和输入信号两个敏感元。
呵呵
不知道我说的对不对。

第一个理解是正确的,第二个理解在process外应该没有敏感的概念,如果在process外部,可能综合出来就是一条连线而已。在process里面应该是受到时序处理中顺序执行的控制,在process外面的话,则两个进程处于并发执行的控制。

我觉得你说的很有道理,但是为什么两者的technology SChmatic是一样的呢?
呵呵,有没有感兴趣的,大家一起讨论讨论啊!

另外,对于“Process内语句是顺序执行”这句话我一直不太理解,
例如:
process(clk)
begin
if rising_edge (clk) then
    A<=B;
    C<=D;
    E<=F;
else
    null;
end if;
end process;
这个程序中,综合出来的结果,从硬件上来看应该是并行的,但为什么说是“顺序执行”?难道说“顺序执行”的意思是综合的时候从第一句开始顺序综合?

我觉得你是看错了图了吧?不可能一样啊。或者到chip planner上看一下。

没看错,
chipplaner是什么?
7# cdsmakc

6# qd0090
通常意义上是顺序执行,但是如果在时序控制下的<=赋值,需要考虑一个时间点上纵向的问题,而不是横向时间的问题。如果你在这里换成:=赋值,就能看到是顺序执行了。

继续求解

就像verilog里面的阻塞与非阻塞赋值一样,会差一个时钟周期;
technology SChmatic里面不应该一样的吧,前者是不是要有个输入与输出的闭环连接呢?

就像verilog里面的阻塞与非阻塞赋值一样,会差一个时钟周期;
technology SChmatic里面不应该一样的吧,前者是不是要有个输入与输出的闭环连接呢?

继续关注中。

放在外面,赋值不延迟!里面延迟一个时钟周期~

1# qd0090
大哥你说的快一个周期是对的。没啥问题,放外面肯定要先一个时钟step出来结果,
至于你说的 schmatic里面看到的一样,我严重怀疑,打死我也不相信啊。
写代码的关键不是像C语言一样,写C语言的关键是流程图要清晰,写RTL CODE的关键是BLOCK图要清晰,HDL的语言是 hardware discription language 注意其中的D是discription的意思,而不是design的意思这个就是他的关键所在

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top