4824|7

79

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

怎样消除竞争冒险 [复制链接]

module compare(out,a,b);
  input [7:0] a,b;
  output out;
  reg out;
  always @(a or b)
  begin
    if(a>b)
      out=1;
    else
      out=0;
  end
endmodule

在进行门级仿真的时候波形中出现了毛刺,也就是所谓的竞争冒险,如下图
书上也有竞争冒险的解决办法,但具体到代码里还是不会,谁能教教我该怎么改这个代码才能消除竞争冒险?

C0[(G1XLO)2@BUI(N7)XSDE.jpg (7.52 KB, 下载次数: 1)

C0[(G1XLO)2@BUI(N7)XSDE.jpg
此帖出自FPGA/CPLD论坛

最新回复

赞一个!这就是同步时钟设计消除冒险法!  详情 回复 发表于 2011-10-18 12:54
点赞 关注
 

回复
举报

79

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
等大侠。。。
此帖出自FPGA/CPLD论坛
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
我测试了你的代码,没有问题啊
此帖出自FPGA/CPLD论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

4
 
1、out的生成逻辑不能只看a和b,应与时钟同步。看波形的最上方像是个时钟吧?
2、如输入的a、b与时钟是异步的话,不要直接算out,先用时钟同步一下再使用。

文字表达好像意思不咋清晰,不知用下列描述如何:
ca = a clocked by clk
cb = b clocked by clk
out = f(ca, cb), clocked by clk
此帖出自FPGA/CPLD论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 仙猫 的帖子

不好意思,可能我确实没表达清楚。这段代码就是比较8位二进制a和b的大小,若a>b,则输出out=1,否则out=0,最上方确实是一个时钟信号(testbench中定义的),每隔一个时钟周期,就会随机产生a和b的值,从而比较a和b的大小,以验证输出out是否正确‘,以下是testbench代码:
`timescale 1ns/1ns
`include "compare.v"
module COMPARE_8;
  reg [7:0] a,b;
  reg clk;
  wire out;
  compare cmp_inst(.out(out),.a(a),.b(b));
  initial
    begin
      a=8'd0;
      b=8'd0;
      clk=0;
    end
  always #50 clk=~clk;
  always @(posedge clk)
    begin
      a={$random}%256;
      b={$random}%256;
    end
  initial
    begin
      #1000000 $stop;
    end
endmodule   
以上就是这个小实验的具体内容,问题就是在进行门级仿真的时候就会出现竞争冒险,我不知道该怎样修改代码才能消除竞争冒险

[ 本帖最后由 超自然 于 2011-10-16 22:53 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

6
 

回复 5楼 超自然 的帖子

 在楼顶模块的代码里,也应该有test bench那样的时钟clk,利用clk用4楼的做法就能消除竞争冒险。假如这个clk跟外部驱使a、b变化的是同一时钟的话,那么a和b无需再整形,4楼写的前两行代码可省略。
此帖出自FPGA/CPLD论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 6楼 仙猫 的帖子

嗯,谢谢了
此帖出自FPGA/CPLD论坛
 
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

8
 

赞一个!这就是同步时钟设计消除冒险法!

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表