作者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