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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6327|回复: 25

[求助] 关于时序与组合逻辑

[复制链接]
发表于 2010-7-12 15:53:03 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 shxr 于 2010-7-12 15:57 编辑

今天写了一个很小的程序,主要是练习语法
module reg4(clk,rstn,d,q);
    input    [3:0] d;
    input            clk;
    input            rstn;
    output  [3:0] q;

    reg       [3:0] q;

always @(rstn or clk)
       q<=(~rstn)?0:d;

endmodule


组合与时序应该是数字领域一个最基本的问题,,但今天却迷糊了,,,突然分不清这二者了。。。还望指点迷津
这个电平触发应该是组合逻辑了,那时序与组合到底怎么判断的?
既然是组合逻辑,就不能用非阻塞了
q=(~rstn)?0:d;
等效于  if (~rstn)
               q=0;
          else
                q=d;吗?
以上三种写法综合结果是一致的,,麻烦各位大虾分析一下
发表于 2010-7-12 17:18:44 | 显示全部楼层
1. q<=(~rstn)?0:d;
2. q=(~rstn)?0:d;
3. if (~rstn)
       q=0;
    else
       q=d;
我觉得2和3是一样的,1和2,3不同.

虽然1和2,3不同,但事实上应该综合出来的结果是一样的。

写latch的方法(就是只写if不写else,但用非阻塞赋值):  
always @(clk or d)
     if(clk)  q<=d;
 楼主| 发表于 2010-7-12 17:34:01 | 显示全部楼层
语法上面不会有问题吗?比如电平触发是组合逻辑,组合逻辑通常用阻塞赋值。
既然综合出的结果是一样的,,那说明可以互换着写喽?
 楼主| 发表于 2010-7-13 09:14:18 | 显示全部楼层
各位大虾多指点啊
发表于 2010-7-14 12:31:19 | 显示全部楼层
4# shxr
我觉得这个问题,你先不要纠结于时序逻辑和组合逻辑的问题

建议先找关于阻塞赋值与非阻塞赋值的文章看下

看完以后,应该会有新的思路
发表于 2010-7-14 12:56:09 | 显示全部楼层
你看,如果写成always @(posedge clk or negedge rstn)会如何呢
广义的时序逻辑,应该是在逻辑门后由时钟信号触发来保存和输出的电路,在这个定义下,latch和register都是时序逻辑的组件,只不过一个是电平触发一个边沿触发
通常,在verilog设计里,我们所说的时序逻辑只是狭义的指由时钟边沿触发的register
阻塞性和非阻塞性赋值,并不能决定逻辑是否为时序或是组合,它们只是一种标识,用来让EDA工具分辨赋值的并行运行或是串行执行
推荐看verilog synthesis 相关的教程,可以更好的理解电路与代码之间的关系
:》
 楼主| 发表于 2010-7-15 14:52:29 | 显示全部楼层
谢谢各位大虾的建议
发表于 2010-7-16 11:19:29 | 显示全部楼层
多看看数字电路设计的书吧
发表于 2010-7-17 21:42:14 | 显示全部楼层
你这代码   仿真和实际是不一样的,可以说你写的这代码不符合逻辑
 楼主| 发表于 2010-7-18 13:34:33 | 显示全部楼层
9# zhang2000
能说得具体一点吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-6-27 04:22 , Processed in 0.212655 second(s), 9 queries , Gzip On, Redis On.

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