打印

时序模块之always语句

[复制链接]
6234|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wzt19910506|  楼主 | 2012-5-4 09:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
module PAOBIAO(a,b,c,d);

input a,b,c;


output d;


reg d;

      
       always@(posedge a or negedge b)

if(b) d<=0;


else if(c)d<=1;

endmodule
先看这么一段简单的程序,编译:提示错误。错在哪里?经过一晚上才终于琢磨透彻。这是错误提示:Error (10200): Verilog HDL Conditional Statement error at PAOBIAO.v(75): cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct
大概意思就是不能匹配操作条件中的边沿事件和always语句中的控制事件。错误指示在红色一行。

仔细分析语法吧,看起来真的没有错啊。不断地修改再编译,无意中去掉了negedge b
这句,即酱红色部分改为always@(posedge clk),编译后没错了。网上搜也有人遇见过这种情况可是几乎没一人解释到正点上。最后答案还是在自己觉得编写的很垃圾的课本上找到了(因为刚上来我总觉得这本书一大堆屁话,看不懂把浅显的问题说的那么复杂,呵呵,看来该改变下自己的态度了)。
加上我的理解分析一下吧:首先这很明确要描述的是一个时序模块电路(这里仅讨论带posedge or negedge 的时序模块),敏感信号列表里有ab两个信号,但是边沿敏感时钟信号只能有一个,如何区分哪个是时钟信号?规定是这样的,如果把a定义为时钟信号,那么在always过程结构中不能再出现a信号了,如上面例子就可以看出a是作为时钟信号的。这也满足要求似乎不应该编译出错啊,还有一点就是剩余的b了,这个b在这里是一个异步控制信号(或者是异步输入信号),这个b除了在敏感信号表中给出对应的表述外(即always后的negedge balways过程语句中必须给予说明(经实践是always结构中带if语句的,不带if语句也可不说明),简单的说就是在always语句中加入有if语句则必须把b放在if的()中作为判定条件。看上面例子,b也组为了判定条件可是为什么还会报错?还有一点经过实践,假如在敏感信号里表中描述的是negedge b,则必须是if(!b),如果是posedge b则必须是ifb)。所以这里想要改正错误有两种方法:
一、如上所述,去掉红色部分的negedge b,但是这样改已经改变了程序的功能;
二、ifb)改为if(!b),可以想想把if(b)作为判断条件没有实际意义的。

最后还有一点就是把else if(c)中的c换为!belse if(!b),由此看来假如把b作为敏感控制信号,并且always语句中出现if语句的话,则b必须在第一条if语句中判断,若放在后面的else if语句中就会编译出错


2012.05.04



wzt笔记)

相关帖子

沙发
Backkom80| | 2012-5-4 13:59 | 只看该作者
LZ,这地方理解的不够,有点浅,
本质应该是在FPGA的底层FF中没有你描述的单元与之对应:
always中用的是negedge b 即此处b信号对应与底层FF异步复位端且低电平有较,而在下面if 中用的是高电平有较对d复位。
综合工具无法将这矛盾的描述转化成实际电路,所以报错。

使用特权

评论回复
板凳
Backkom80| | 2012-5-4 13:59 | 只看该作者
本帖最后由 Backkom80 于 2012-5-4 14:02 编辑

1,改1  if ( !b ) 即低电平有较,d  复位,与negedge b描述正确。

2,改2 去了negedge b,原因是你改用了同步复位方式。在always列表是没有对对沿的触发方式作表述,不存在矛盾。

使用特权

评论回复
地板
lwq030736| | 2012-5-7 11:15 | 只看该作者
楼主还是把描述当程序了

使用特权

评论回复
5
GoldSunMonkey| | 2012-5-7 22:49 | 只看该作者
:)谢谢各位朋友

使用特权

评论回复
6
可木| | 2012-5-15 00:19 | 只看该作者
贝壳哥威武。。。哈哈

使用特权

评论回复
7
flexman| | 2012-5-15 08:55 | 只看该作者
为什么要这么麻烦啊?

使用特权

评论回复
8
笑溜溜+| | 2012-6-18 22:34 | 只看该作者
学习了

使用特权

评论回复
9
cuttler| | 2012-7-9 17:43 | 只看该作者
ISE的language templates里面有always模版,两种正确的写法都有。

使用特权

评论回复
10
GoldSunMonkey| | 2012-7-10 22:09 | 只看该作者
:)

使用特权

评论回复
11
majipeng1986| | 2012-7-11 15:29 | 只看该作者
2# Backkom80
有道理

使用特权

评论回复
12
GoldSunMonkey| | 2012-7-11 16:35 | 只看该作者
:)

使用特权

评论回复
13
小鱼儿1045| | 2012-7-17 08:31 | 只看该作者
14# GoldSunMonkey GoldSunMonkey?????金光猴??

使用特权

评论回复
14
小鱼儿1045| | 2012-7-17 17:20 | 只看该作者
金日猴???

使用特权

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

本版积分规则

8

主题

134

帖子

8

粉丝