作者gm560622 (我不是娘泡)
看板Electronics
标题[问题] Direct form 4-tap FIR (Verilog)
时间Fri Mar 19 20:08:15 2010
请问各位高手
我下面写的code是哪里有问题呢?
是整合module的地方有错不能这样使用吗
我是想要让他能够循序有讯号进去才会运作
可是照理讲应该是3个clock完成
可是怎麽输入的第一个正缘clock就有讯号输出呢?
而且输出的波型图跟我预想的不太一样
我附个图:
http://www.csie.ncu.edu.tw/~965002075/new_page_1
以下是我写的code
module DF4_FIR_1(m2, n0, clk, reset); //Direct Form 4-tap FIR
output [15:0] m2;
input [3:0] n0;
input clk, reset;
wire [3:0] n0, n1, n2, n3; //input 包含所有D正反器output
wire [7:0] X0, X1, X2, X3; //所有经过乘法器之後的wire
wire [15:0] m0,m1,m2; //所有经过加法器的wire
//wire [3:0] A, B, C, D;
parameter A = 4'b0001, //给定4个常数 让讯号通过乘法器能跟这些值相乘
B = 4'b0010,
C = 4'b0011,
D = 4'b0100;
multi multi0(X0,n0,A);
D_FF D_FF0(n1,n0,clk,reset);
multi multi1(X1,n1,B);
add add0(m0,X0,X1);
D_FF D_FF1(n2,n1,clk,reset);
multi multi2(X2,n2,C);
add add1(m1,m0,X2);
D_FF D_FF2(n3,n2,clk,reset);
multi multi3(X3,n3,D);
add add2(m2,m1,X3);
endmodule
module add(c, a, b); //加法器
output [15:0] c;
input [15:0] a, b;
wire [15:0] c;
assign c = a + b;
endmodule
module multi(x, y, z); //乘法器
output [7:0]x;
input [3:0] y, z;
wire [7:0] x;
assign x = y * z;
endmodule
module D_FF(q, d, clk, reset); //D型正反
output [3:0]q;
input [3:0]d;
input clk, reset;
reg [3:0]q;
always@(posedge clk)
begin
if(reset)
q = 4'b0000;
else
q = d;
end
endmodule
谢谢各位 因为我这种很多module合成真的不太懂
不知道能不能这样用达到目的
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.13.191
1F:推 pupucar:当然会有输出 所以你要到第三个CLK才能取值 03/20 17:04
2F:推 CompileUltra:前两个是根据你的FF reset值出来的阿 错的要mask起来 03/20 18:57
3F:→ gm560622:了解了 谢谢! 03/20 20:01
4F:推 gieks:flip-flop一般习惯用non-blocking assignment "<=" 03/21 23:09
5F:→ gieks:btw, 你文中倒数第二行, "合成"在数位电路有特别的意思, 03/21 23:11
6F:→ gieks:依你的文意应该是多个sub-module组合而成的意思吧XD 03/21 23:11
7F:→ gm560622:刚起步学 不太懂>_< 感谢纠正^^ 03/22 00:23