[英]D Flip Flop Verilog Behavioral Implementation has compile errors
I have ad flip flop tutorial, and when I try to compile, some errors occur.我有广告触发器教程,当我尝试编译时,会出现一些错误。 I've taken this tutorial from technobyte.org , and anything changed, but it doesn't work.我从technobyte.org获取了本教程,并进行了任何更改,但它不起作用。 D Flip Flop and Test Bench Code is below. D 触发器和测试台代码如下。
Can you find the problem?你能找到问题吗?
D Flip Flop D 触发器
module D_Flip_Flop(d,clk,clear,q,qbar);
input d, clk, clear;
output reg q, qbar;
always@(posedge clk)
begin
if(clear== 1)
q <= 0;
qbar <= 1;
else
q <= d;
qbar = !d;
end
endmodule
Test Bench for D Flip Flop D触发器测试台
//test bench for d flip flop
//1. Declare module and ports
module dff_test;
reg D, CLK,reset;
wire Q, QBAR;
//2. Instantiate the module we want to test. We have instantiated the dff_behavior
D_Flip_Flop dut(.q(Q), .qbar(QBAR), .clear(reset), .d(D), .clk(CLK)); // instantiation by port name.
//3. Monitor TB ports
$monitor("simtime = %g, CLK = %b, D = %b,reset = %b, Q = %b, QBAR = %b", $time, CLK, D, reset, Q, QBAR);
//4. apply test vectors
initial begin
clk=0;
forever #10 clk = ~clk;
end
initial begin
reset=1; D <= 0;
#100; reset=0; D <= 1;
#100; D <= 0;
#100; D <= 1;
end
endmodule
Errors错误
There are 3 types of syntax errors in your code:您的代码中有 3 种类型的语法错误:
begin/end
around multiple statements in your if/else
.您需要在if/else
中围绕多个语句begin/end
。$monitor
statement should be inside an initial block. $monitor
语句应该在初始块内。clk
was not declared. clk
没有被声明。 Change all CLK
to clk
.将所有CLK
更改为clk
。You should report these errors to the person who created that tutorial.您应该向创建该教程的人报告这些错误。
Here is code that compiles cleanly for me.这是为我编译干净的代码。 I also added proper indentation to your DFF:我还为您的 DFF 添加了适当的缩进:
module D_Flip_Flop(d,clk,clear,q,qbar);
input d, clk, clear;
output reg q, qbar;
always@(posedge clk) begin
if(clear== 1) begin
q <= 0;
qbar <= 1;
end else begin
q <= d;
qbar = !d;
end
end
endmodule
module dff_test;
reg D, clk,reset;
wire Q, QBAR;
//2. Instantiate the module we want to test. We have instantiated the dff_behavior
D_Flip_Flop dut(.q(Q), .qbar(QBAR), .clear(reset), .d(D), .clk(clk)); // instantiation by port name.
//3. Monitor TB ports
initial $monitor("simtime = %g, clk = %b, D = %b,reset = %b, Q = %b, QBAR = %b", $time, clk, D, reset, Q, QBAR);
//4. apply test vectors
initial begin
clk=0;
forever #10 clk = ~clk;
end
initial begin
reset=1; D <= 0;
#100; reset=0; D <= 1;
#100; D <= 0;
#100; D <= 1;
end
endmodule
Good coding practice recommends using nonblocking assignments for sequential logic.良好的编码实践建议对顺序逻辑使用非阻塞分配。 Change:改变:
qbar = !d;
to至
qbar <= !d;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.