两道题目,有一样的问题:
第一道:ece241 2013 q12
下面的代码错误,一直没看出来哪里有问题:
module top_module (
input clk,
input enable,
input S,
input A, B, C,
output Z );
reg [7:0] q;
dff dff_1(clk,enable,S,q[0]);
dff dff_2(clk,enable,q[0],q[1]);
dff dff_3(clk,enable,q[1],q[2]);
dff dff_4(clk,enable,q[2],q[3]);
dff dff_5(clk,enable,q[3],q[4]);
dff dff_6(clk,enable,q[4],q[5]);
dff dff_7(clk,enable,q[5],q[6]);
dff dff_8(clk,enable,q[6],q[7]);
always@(*)
begin
case({A,B,C})
3'b000: Z=q[0];
3'b001: Z=q[1];
3'b010: Z=q[2];
3'b011: Z=q[3];
3'b100: Z=q[4];
3'b101: Z=q[5];
3'b110: Z=q[6];
3'b111: Z=q[7];
endcase
end
endmodule
module dff (
input clk,
input ena,
input d,
output q );
always@(posedge clk)
begin
if(ena)
q <= d;
else
q <= q;
end
endmodule
同样思路的另外一套代码就没问题:
module top_module (
input clk,
input enable,
input S,
input A, B, C,
output Z );
reg [7:0]Q;
dfif dff_u0(.clk(clk), .d(S), .enable(enable), .q(Q[0]));
dfif dff_u1(.clk(clk), .d(Q[0]), .enable(enable), .q(Q[1]));
dfif dff_u2(.clk(clk), .d(Q[1]), .enable(enable), .q(Q[2]));
dfif dff_u3(.clk(clk), .d(Q[2]), .enable(enable), .q(Q[3]));
dfif dff_u4(.clk(clk), .d(Q[3]), .enable(enable), .q(Q[4]));
dfif dff_u5(.clk(clk), .d(Q[4]), .enable(enable), .q(Q[5]));
dfif dff_u6(.clk(clk), .d(Q[5]), .enable(enable), .q(Q[6]));
dfif dff_u7(.clk(clk), .d(Q[6]), .enable(enable), .q(Q[7]));
always@(*)begin
case({A,B,C})
3'd0:Z=Q[0];
3'd1:Z=Q[1];
3'd2:Z=Q[2];
3'd3:Z=Q[3];
3'd4:Z=Q[4];
3'd5:Z=Q[5];
3'd6:Z=Q[6];
3'd7:Z=Q[7];
endcase
end
endmodule
module dfif(
input clk,
input d,
input enable,
output q
);
always@(posedge clk)begin
if(enable)begin
q<=d;
end
else begin
q<=q;
end
end
endmodule
第二道题目:Exams/m2014 q4k,也是这种情况
下面的代码错误,一直没看出来哪里有问题:
module top_module (
input clk,
input resetn, // synchronous reset
input in,
output out);
wire q1,q2,q3;
dff dff_1(clk, resetn, in, q1);
dff dff_2(clk, resetn, q1, q2);
dff dff_3(clk, resetn, q2, q3);
dff dff_4(clk, resetn, q3, out);
endmodule
module dff(input clk,input r,input d,output q);
always@(posedge clk)
begin
if(!r)
q <= 0;
else
q <= d;
end
endmodule
同样思路的另外一套代码就没问题:
module top_module (
input clk,
input resetn, // synchronous reset
input in,
output out);
wire q0,q1,q2;
my_sr inst0(in,clk,resetn,q0);
my_sr inst1(q0,clk,resetn,q1);
my_sr inst2(q1,clk,resetn,q2);
my_sr inst3(q2,clk,resetn,out);
endmodule
module my_sr(
input D,
input clk,
input R,
output Q
);
always@(posedge clk)begin
if(R==1'b0)
Q<=0;
else
Q<=D;
end
endmodule