我为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
答案 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。
更加注意代码格式,因为您的代码段几乎无法读取。