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

时间:2016-10-26 06:22:40

标签: 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 = 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

1 个答案:

答案 0 :(得分:2)

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

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

另外你需要知道你不能在总是阻塞内部驱动有线信号,所以我把它们改成了regs。

更加注意代码格式,因为您的代码段几乎无法读取。