Consider the n-bit shift register circuit shown below:
注意:这里的子模块写法不能使用
错误代码:
module top_module (
input [3:0] SW,
input [3:0] KEY,
output [3:0] LEDR
); //
MUXDFF u_1(
.clk(KEY[0]),
.r(SW[3]),
.e(KEY[1]),
.w(KEY[3]),
.l(KEY[2]),
.q(LEDR[3])
);
MUXDFF u_2(
.clk(KEY[0]),
.r(SW[2]),
.e(KEY[1]),
.w(LEDR[3]),
.l(KEY[2]),
.q(LEDR[2])
);
MUXDFF u_3(
.clk(KEY[0]),
.r(SW[1]),
.e(KEY[1]),
.w(LEDR[2]),
.l(KEY[2]),
.q(LEDR[1])
);
MUXDFF u_4(
.clk(KEY[0]),
.r(SW[0]),
.e(KEY[1]),
.w(LEDR[1]),
.l(KEY[2]),
.q(LEDR[0])
);
endmodule
module MUXDFF (
input clk,
input r,e,w,l,
output q
);
reg temp;
always@(posedge clk)begin
q<=l?r:temp;
temp<=e?w:q;///这里错误,不可以使用这种方法
end
endmodule
子模块正确写法:
module MUXDFF (
input clk,
input w, R, E, L,
output Q
);
always@(posedge clk)begin
if(L)begin
Q <= R;
end
else begin
if(E)begin
Q <= w;
end
else begin
Q <= Q;
end
end
end
endmodule