完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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 在进行门级仿真的时候波形中出现了毛刺,也就是所谓的竞争冒险,如下图 书上也有竞争冒险的解决办法,但具体到代码里还是不会,谁能教教我该怎么改这个代码才能消除竞争冒险? |
|
相关推荐
5个回答
|
|
我测试了你的代码没有问题啊
|
|
|
|
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 |
|
|
|
不好意思,可能我确实没表达清楚。这段代码就是比较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 以上就是这个小实验的具体内容,问题就是在进行门级仿真的时候就会出现竞争冒险,我不知道该怎样修改代码才能消除竞争冒险 |
|
|
|
在楼顶模块的代码里,也应该有test bench那样的时钟clk,利用clk用4楼的做法就能消除竞争冒险。假如这个clk跟外部驱使a、b变化的是同一时钟的话,那么a和b无需再整形,3楼写的前两行代码可省略。 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1421 浏览 1 评论
1215 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1426 浏览 0 评论
913 浏览 0 评论
2229 浏览 0 评论
1426 浏览 34 评论
5612 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 05:24 , Processed in 0.547258 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号