作者magician1 (不如归去)
看板Electronics
标题Re: [问题] Verilog
时间Sun Mar 21 18:23:58 2010
※ 引述《CompileUltra (超强合成器)》之铭言:
: 没啥不妥阿
: 但是 state_1 clk1 没被用到 这是要干麻 想被我化简掉吗 =.=
: 哪种filter有点忘了 orz 有劳原po说明
是 interpolation filter; CIC_FILTER: (1-z^-8)^3 / (1-z^-1)^3
clk 是 4 倍 x_in 输入速度 (共用加法器的关系), clk1 是 4倍 clk 速度, 一样是共用
加法器的关系
: ※ 引述《magician1 (不如归去)》之铭言:
module adder_25b(a,b,c);
input [24:0] a;
input [24:0] b;
output [24:0] c;
assign c = a + b;
endmodule
:
: : endmodule
: : module CIC_FILTER(v_in, v_out, clk, clk1, reset);
: : input [15:0] v_in;
: : output reg [15:0] v_out;
: : reg [24:0] x_tap[5:0];
: : reg [24:0] y_tap[2:0];
: : reg [24:0] tmp;
: : reg [24:0] tmp_1;
: : wire [24:0] tmp_out;
: : reg [24:0] tmp_2;
: : reg [24:0] tmp_3;
: : wire [24:0] tmp_out1;
: : reg [1:0] state;
: : reg [1:0] state_1;
: : reg [24:0] x_tmp_2;
: : wire [24:0] x_in;
: : sub_25b s0(.a(tmp), .b(tmp_1), .c(tmp_out));
adder_25b s1(.a(tmp_2), .b(tmp_3), .c(tmp_out1));
: : assign x_in = {{9{v_in[15]}}, v_in[15:0]};
: : always @(negedge clk or negedge reset) begin
: : if(!reset) begin
: : state[1:0] <= 2'b0;
: : end
: : else begin
: : state[1:0] <= state[1:0] + 1;
: : end
: : end
: : always @(negedge clk1 or negedge reset) begin
: : if(!reset) begin
: : state_1[1:0] <= 2'b0;
: : end
: : else begin
: : state_1[1:0] <= state_1[1:0] + 1;
: : end
: : end
: : always @(negedge clk or negedge reset) begin
: : if(!reset) begin
: : x_tap[0] <= 0;
: : x_tap[1] <= 0;
: : x_tap[2] <= 0;
: : x_tap[3] <= 0;
: : x_tap[4] <= 0;
: : x_tap[5] <= 0;
: : tmp <= 0;
: : tmp_1 <= 0;
: : end
: : else begin
: : case(state[1:0])
: : 2'b00: begin
: : tmp <= x_in;
: : tmp_1 <= x_tap[1];
: : end
: : 2'b01: begin
: : tmp <= tmp_out;
: : tmp_1 <= x_tap[3];
: : x_tap[2] <= tmp_out;
: : x_tap[3] <= x_tap[2];
: : end
: : 2'b10: begin
: : tmp <= tmp_out;
: : tmp_1 <= x_tap[5];
: : x_tap[4] <= tmp_out;
: : x_tap[5] <= x_tap[4];
: : end
: : 2'b11: begin
: : x_tmp_2 <= tmp_out;
: : x_tap[0] <= x_in;
: : x_tap[1] <= x_tap[0];
: : end
: : endcase
: : end
: : end
always @(negedge clk1 or negedge reset) begin
if(!reset) begin
y_tap[0] <= 0;
y_tap[1] <= 0;
y_tap[2] <= 0;
tmp_2 <= 0;
tmp_3 <= 0;
end
else begin
case(state_1)
2'b00: begin
tmp_2 <= x_tmp_2;
tmp_3 <= y_tap[0];
end
2'b01: begin
tmp_2 <= tmp_out1;
tmp_3 <= y_tap[1];
y_tap[0] <= tmp_out1;
end
2'b10: begin
tmp_2 <= tmp_out1;
tmp_3 <= y_tap[2];
y_tap[1] <= tmp_out1;
end
2'b11: begin
v_out <= tmp_out1[24:9];
y_tap[2] <= tmp_out1;
end
endcase
end
end
: : endmodule
: : 请问 这些写法 有哪里不妥吗 谢谢
现在的问题是 实际上IC 结果 输出都为 0, 但从post sim 与 FPGA 结果都很正常
实在不得其解
想先从 RTL code style 看是否有违一般的规则;
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 115.43.49.101
※ 编辑: magician1 来自: 115.43.49.101 (03/21 18:30)
※ 编辑: magician1 来自: 115.43.49.101 (03/21 18:31)
1F:→ chingth:要不要先检查clk跟reset的输入是不是你要的状态呢...? 03/21 19:31
※ 编辑: magician1 来自: 115.43.49.101 (03/21 20:14)
※ 编辑: magician1 来自: 115.43.49.101 (03/21 20:16)
※ 编辑: magician1 来自: 115.43.49.101 (03/21 20:17)
2F:推 gieks:实际IC? 这是晶片量测结果? 03/21 22:56
3F:→ gieks:还有你的post sim 是post-synthesis sim还是post-layout sim 03/21 22:57
4F:→ gieks:语法上的话 你最後一个always block中的case 2'b11 03/21 22:58
5F:→ gieks:冒出一个v_out的assignment 然而这个flip-flop却没有被reset 03/21 23:00
6F:→ gieks:不晓得这是不是你想要问的? 03/21 23:01
7F:推 fnrj:先检查clk reset v_in, code看起来没大问题 不知道你当初FPGA 03/22 00:24
8F:→ fnrj:环境是怎样 尽量把相同的环境移植到晶片上 都不行的话检查 03/22 00:25
9F:→ fnrj:layout看有没有pin/port/net short或floating 不然切成reset 03/22 00:27
10F:→ fnrj:看VDD power有没有过大的电流 检查晶片有没有短路 差不多这 03/22 00:28
11F:→ fnrj:些给原po参考 祝你好运 03/22 00:28