Re: [問題] Verilog
※ 引述《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)
→
03/21 19:31, , 1F
03/21 19:31, 1F
※ 編輯: 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)
推
03/21 22:56, , 2F
03/21 22:56, 2F
→
03/21 22:57, , 3F
03/21 22:57, 3F
→
03/21 22:58, , 4F
03/21 22:58, 4F
→
03/21 23:00, , 5F
03/21 23:00, 5F
→
03/21 23:01, , 6F
03/21 23:01, 6F
推
03/22 00:24, , 7F
03/22 00:24, 7F
→
03/22 00:25, , 8F
03/22 00:25, 8F
→
03/22 00:27, , 9F
03/22 00:27, 9F
→
03/22 00:28, , 10F
03/22 00:28, 10F
→
03/22 00:28, , 11F
03/22 00:28, 11F
→
08/13 18:57, , 12F
08/13 18:57, 12F
→
09/17 22:52, , 13F
09/17 22:52, 13F
→
11/11 15:44, , 14F
11/11 15:44, 14F
→
01/04 22:08,
5年前
, 15F
01/04 22:08, 15F
討論串 (同標題文章)