2019-07-16 02:25发布
zhihuizhou 发表于 2011-10-21 14:33 1、out的生成逻辑不能只看a和b,应与时钟同步。看波形的最上方像是个时钟吧? 2、如输入的a、b与时钟是异步 ...
lique 发表于 2011-10-21 14:34 不好意思,可能我确实没表达清楚。这段代码就是比较8位二进制a和b的大小,若a>b,则输出out=1,否则out=0 ...
最多设置5个标签!
不好意思,可能我确实没表达清楚。这段代码就是比较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楼写的前两行代码可省略。
一周热门 更多>