在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5102|回复: 22

[求助] fpga 时序逻辑的问题

[复制链接]
发表于 2010-5-18 19:25:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
always @(posedge clk or negedge rst)
      if (rst)
     begin
         sta_condition <= #1 1'b0;
         sto_condition <= #1 1'b0;
     end
   else
     begin
         sta_condition <= #1 ~sSDA &  dSDA & sSCL;//
         sto_condition <= #1  sSDA & ~dSDA & sSCL;//
     end


always @(posedge clk or negedge rst)
    else if (rst)
     busy <= #1 1'b0;
   else
     busy <= #1 sta_condition  & ~sto_condition;
由于两个always模块都是在clk下触发,在第二个always模块中如果来了一个clk上升沿busy按照sta_condition和sto_condition在clk上升沿以前的值变化还是按照经过此上升沿后的新值变化呢?
发表于 2010-5-18 19:38:20 | 显示全部楼层
好像是变化前吧
 楼主| 发表于 2010-5-18 19:51:12 | 显示全部楼层
我感觉是变化前,就是不太确定
发表于 2010-5-18 22:03:06 | 显示全部楼层
是变化前的,该电路为同步电路,在2模块时钟上升沿的时候(也基本是1模块的上升沿),此时还是2模块的触发器所采到的值当然是sta_condition和sto_condition的变化之前的值,因为sta_condition和sto_condition的变化之后的值还没有到达 busy信号所在的触发器。
发表于 2010-5-19 08:42:17 | 显示全部楼层
变化前,但是比较危险,因为不确定
发表于 2010-5-19 08:49:33 | 显示全部楼层
所有的always块可以理解为是并行执行的。在时钟上升沿到来时。sta_conditon经过组合逻辑后的值被打入busy。而sta_c则是在上升沿之后才会变化。在你的程序里就是#1以后变化。
发表于 2010-5-19 08:52:49 | 显示全部楼层
要用电路的观点去看sta_condition和sto_condition是两个寄存器,经过组合逻辑之后传入busy这个寄存器的输入端,仿真的时候肯定是变化前的值
 楼主| 发表于 2010-5-19 12:06:02 | 显示全部楼层
再问:两个always模块在代码中的不同位置对他们的执行过程会不会产生影响呢?
发表于 2010-5-19 13:13:52 | 显示全部楼层
只要是在本module里面的两个always,放在哪里都一样的。
发表于 2010-5-19 13:15:59 | 显示全部楼层
不会。所有的always块都是并行的,只有在always内部才会有前后关系。你对硬件的理解还差点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-6 11:44 , Processed in 0.024986 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表