我正在尝试构建一个具有异步低激活清除和预设的JK FF。然而verilog给了我";design.sv:24:语法错误我放弃了"看起来我在某个地方出错了,但我找不到。我将感谢的每一次帮助
这是我的设计代码
module JKFF(clk,J,K,Q,Qbar,Clear,Preset);
input J,K,clk,Clear;
output Q, Qbar;
reg Q;
assign Qbar= ~Q;
always@(negedge clk or negedge Clear or negedge Preset )
begin
if(!Clear)
Q<=1'b0;
else if(!Preset)
Q<=1'b1;
else if(Clear==1&&Preset==1)
if (K==0 && J==0)
Q <= Q;
if (K==1 && J==0)
Q <= 0;
if (K==0 && J==1)
Q <= 1;
else
Q <= ~Q;
end
endmodule;
这是我的TB代码
module JKFF_tb;
// Inputs
reg J;
reg K;
reg clk;
reg Clear;
// Outputs
wire Q;
wire Qbar;
// Instantiate the Unit Under Test (UUT)
JKFF uut (
.Q(Q),
.Qbar(Qbar),
.J(J),
.K(K),
.clk(clk),
.Clear(Clear)
);
initial begin
clk=0;
Clear=1;
Preset=1;
forever #10 clk = ~clk;
end
initial begin
J= 1; K= 0;
#100; J= 0; K= 1;
#100; J= 0; K= 0;
#100; J= 1; K=1;
end
// Add stimulus here
endmodule
- 您没有在模块
JKFF
输入列表中声明Preset
- 您在
endmodule
关键字后键入了分号;
else if(Clear==1&&Preset==1)
之后的开始和结束中没有代码- 在
J
和K
条件下没有else if
- 在模块
JKFF_tb
中,您不声明Preset
reg,而是为其赋值 - 您不会将
Preset
传递给名为uut
的JKFF
模块实例
module JKFF(clk,J,K,Q,Qbar,Clear,Preset);
input J,K,clk,Clear, Preset;
output Q, Qbar;
reg Q;
assign Qbar= ~Q;
always@(negedge clk or negedge Clear or negedge Preset )
begin
if(!Clear)
Q<=1'b0;
else if(!Preset)
Q<=1'b1;
else if(Clear==1&&Preset==1) begin
if (K==0 && J==0)
Q <= Q;
else if (K==1 && J==0)
Q <= 0;
else if (K==0 && J==1)
Q <= 1;
else
Q <= ~Q;
end
end
endmodule
module JKFF_tb;
// Inputs
reg J;
reg K;
reg Preset;
reg clk;
reg Clear;
// Outputs
wire Q;
wire Qbar;
// Instantiate the Unit Under Test (UUT)
JKFF uut (
.Q(Q),
.Qbar(Qbar),
.J(J),
.K(K),
.clk(clk),
.Clear(Clear),
.Preset(Preset)
);
initial begin
clk=0;
Clear=1;
Preset=1;
forever #10 clk = ~clk;
end
initial begin
J= 1; K= 0;
#100; J= 0; K= 1;
#100; J= 0; K= 0;
#100; J= 1; K=1;
end
// Add stimulus here
endmodule