Filter 为什么下面的程序显示错误Q和D未声明?

Filter 为什么下面的程序显示错误Q和D未声明?,filter,verilog,Filter,Verilog,我为FIR滤波器编写了这个程序,并使用D触发器进行延迟。我需要实现脉冲响应h(n)={1,-1}的滤波器 尽管做出了各种努力,但它显示了相同的错误,即D和Q没有正确定义/声明。另一个错误是,Q被非法重新声明,为此,我删除了第二个模块中定义Q输出寄存器的行。请指出错误并告诉我如何修复 module firfilter( dout, din, clock); input din, clock; output dout; parameter b0 = 1'd1; parameter b1 =

我为FIR滤波器编写了这个程序,并使用D触发器进行延迟。我需要实现脉冲响应h(n)={1,-1}的滤波器

尽管做出了各种努力,但它显示了相同的错误,即D和Q没有正确定义/声明。另一个错误是,Q被非法重新声明,为此,我删除了第二个模块中定义Q输出寄存器的行。请指出错误并告诉我如何修复

module firfilter( dout, din, clock); 
input din, clock;
output dout; 

parameter b0 = 1'd1; 
parameter b1 = 1'd1;

assign dout = b0 - b1 * Q;

always@ (posedge clock) 

        D < = din; 

endmodule

module dff ( D, clock, Q); 
input D, clock; 
output Q; 


always@ (posedge clock) 

       Q <=  #(1) D; 

endmodule
模块过滤器(dout、din、时钟);
输入din,时钟;
输出dout;
参数b0=1'd1;
参数b1=1'd1;
分配dout=b0-b1*Q;
始终@(posedge时钟)
D<=din;
端模
模块dff(D,时钟,Q);
输入D,时钟;
输出Q;
始终@(posedge时钟)

在verilog中,模块中声明的所有信号仅在此模块中可见。您将端口D和Q声明为模块dff的输入和输出端口,这是正常的,但您尝试在firfilter模块中使用D和Q,而firfilter模块对模块dff中的D和Q一无所知。您应该做的是将模块dff的一个实例放在模块firfilter中,并将其端口连接到如下信号:

module firfilter( 
    input din, 
    input clock,
    output dout 
);
   parameter b0 = 1'd1; 
   parameter b1 = 1'd1;

   wire Q;
   reg D;
   // instance of dff module:
   dff dff_inst(.D(D), .clock(clock), .Q(Q) ); 

   assign dout = b0 - b1 * Q;

   always@ (posedge clock) 
      D <= din;     
endmodule

module dff (   
   input D, 
   input clock,
   output reg Q
);
   always@ (posedge clock) 
       Q <=  #(1) D; 

endmodule
模块过滤器(
输入din,
输入时钟,
输出dout
);
参数b0=1'd1;
参数b1=1'd1;
导线Q;
注册D;
//dff模块的实例:
dff dff_仪器(.D(D),.clock(clock),.Q(Q));
分配dout=b0-b1*Q;
始终@(posedge时钟)
D