【发布时间】:2014-07-07 09:14:18
【问题描述】:
我的目标是当我的输入“start=1”时,变速是无限的,当我将它更改为“start=0”时,变速停止。
那时我的输出 (result1 = 1) 和 (result = 5) 应该在 $finish 命令行结束。但它在测试台中以 $stop 结尾。
我认为问题在于第二个模块中的两个输出(result1 和 result2)在第一个模块中没有链接。
如何将第二个模块中的输出链接到第一个模块,以便满足第一个模块中 if-else 语句中的条件并将继续执行$finish。
我预设了我的测试台代码,以便当 start = 0;它在 result1 = 1 和 result2 = 5 处停止。
这是我的代码 //第一个模块
module random(ps_in, ps_out, clk, start, result1, result2);
input ps_in;
output reg ps_out;
input clk;
input start;
output [2:0] result1; //1st output based on the 2nd module
output [2:0] result2; //2nd output based on the 2nd module
reg count;
initial begin
ps_out = 0;
count = 0;
end
always @ (posedge clk)
if (start!=0) begin
ps_out = ps_in;
end
else if (start!=1 && count!=1) begin
ps_out = ps_in;
count = count + 1;
end
else if (start!=1 && result1==3'b001 && result2==3'b101) begin
$finish; //IT MUST END IN THIS LINE
end
endmodule
//2nd module
module smachine (start,clk,result1,result2);
input start;
input clk;
output [2:0] result1;
output [2:0] result2;
wire feedback1, feedback2, ffq1, ffq2, ffq3, ffq4;
random r1 (feedback1, ffq1, clk, start);
random r2 (ffq1, result1[2], clk, start);
random r3 (result1[2], result1[1], clk, start);
random r4 (result1[1], result1[0], clk, start);
random r5 (result1[0], ffq2, clk, start);
assign feedback1 = (result1[1] ^~ffq2);
random r6 (feedback2, result2[2], clk, start);
random r7 (result2[2], result2[1], clk, start);
random r8 (result2[1], ffq3, clk, start);
random r9 (ffq3, result2[0], clk, start);
random r10(result2[0], ffq4, clk, start);
assign feedback2 = (ffq3 ^~ffq4);
endmodule
这是我的测试平台
module qqqq;
// Inputs
reg start;
reg clk;
// Outputs
wire [2:0] result1;
wire [2:0] result2;
// Instantiate the Unit Under Test (UUT)
smachine uut (
.start(start),
.clk(clk),
.result1(result1),
.result2(result2)
);
always
#5 clk = ~clk;
initial begin
// Initialize Inputs
#10 start = 1;
clk = 0;
#50 start = 0;
clk = 0;
#50 $stop;
end
endmodule
【问题讨论】:
-
是的,它用于合成。当它满足条件时,我正要放置一个累积奖金指示器,但我在 $finish 开始它以测试代码。它就像一个轮盘游戏。
-
"当输入“start=1”时,移位是无穷无尽的"移位发生在哪里?唯一的功能单元是递增计数
count = count + 1;。