序列 1101011 的 D FlipFlop 序列生成器不生成结果
D FlipFlop sequence generator for the sequence 1101011 does not generate results
我在 DFF
模块中为 D'Flip Flop 创建了一个模块,并在 seqgen
模块中实例化了其中的 4 个。我无法生成结果。你能帮我看看哪里出错了吗?
module DFF(input d, input rstn, input clk, output reg q);
always @(posedge clk or negedge rstn)
if(!rstn)
q <= 0;
else
q <= d;
endmodule
module seqgen();
wire q1=1'b1,q2=1'b1,q3=1'b1,q4=1'b0;
wire da=1'b1;
reg clk = 1'b0,rstn = 1;
always #10 clk = ~clk;
assign da = ~q1|~q2|~q4;
DFF dffa(da,rstn,clk,q1);
DFF dffb(q1,rstn,clk,q2);
DFF dffc(q2,rstn,clk,q3);
DFF dffd(q3,rstn,clk,q4);
endmodule
有两种类型的问题。
由于连续的 wire
分配,DFF
模块的输出从 DFF
模块内部和 seqgen
模块内部驱动。您不应为 wire
赋值。这会导致争用,这是输出中未知值 (x
) 的来源之一。在da
的情况下,你有2个连续赋值,但你应该只有1个。
此外,您应该在时间 0 断言复位,等待延迟,然后取消断言复位。这是未知数的另一个来源。由于是低电平有效复位,所以设置为0,然后延迟一段时间后,设置为1。
此代码为我消除了未知信号。
module seqgen();
wire q1,q2,q3,q4;
wire da;
reg clk = 1'b0, rstn = 0;
initial #25 rstn=1;
always #10 clk = ~clk;
assign da = ~q1|~q2|~q4;
DFF dffa(da,rstn,clk,q1);
DFF dffb(q1,rstn,clk,q2);
DFF dffc(q2,rstn,clk,q3);
DFF dffd(q3,rstn,clk,q4);
endmodule
我在 DFF
模块中为 D'Flip Flop 创建了一个模块,并在 seqgen
模块中实例化了其中的 4 个。我无法生成结果。你能帮我看看哪里出错了吗?
module DFF(input d, input rstn, input clk, output reg q);
always @(posedge clk or negedge rstn)
if(!rstn)
q <= 0;
else
q <= d;
endmodule
module seqgen();
wire q1=1'b1,q2=1'b1,q3=1'b1,q4=1'b0;
wire da=1'b1;
reg clk = 1'b0,rstn = 1;
always #10 clk = ~clk;
assign da = ~q1|~q2|~q4;
DFF dffa(da,rstn,clk,q1);
DFF dffb(q1,rstn,clk,q2);
DFF dffc(q2,rstn,clk,q3);
DFF dffd(q3,rstn,clk,q4);
endmodule
有两种类型的问题。
由于连续的 wire
分配,DFF
模块的输出从 DFF
模块内部和 seqgen
模块内部驱动。您不应为 wire
赋值。这会导致争用,这是输出中未知值 (x
) 的来源之一。在da
的情况下,你有2个连续赋值,但你应该只有1个。
此外,您应该在时间 0 断言复位,等待延迟,然后取消断言复位。这是未知数的另一个来源。由于是低电平有效复位,所以设置为0,然后延迟一段时间后,设置为1。
此代码为我消除了未知信号。
module seqgen();
wire q1,q2,q3,q4;
wire da;
reg clk = 1'b0, rstn = 0;
initial #25 rstn=1;
always #10 clk = ~clk;
assign da = ~q1|~q2|~q4;
DFF dffa(da,rstn,clk,q1);
DFF dffb(q1,rstn,clk,q2);
DFF dffc(q2,rstn,clk,q3);
DFF dffd(q3,rstn,clk,q4);
endmodule