简体   繁体   English

D 触发器 Verilog 行为实现有编译错误

[英]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 种类型的语法错误:

  1. You need begin/end around multiple statements in your if/else .您需要在if/else中围绕多个语句begin/end
  2. The $monitor statement should be inside an initial block. $monitor语句应该在初始块内。
  3. Verilog is case-sensitive. Verilog 区分大小写。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM