找回密码
 注册
关于网站域名变更的通知
查看: 409|回复: 1
打印 上一主题 下一主题

xilinx FIR 7.2 系数在线重载不生效问题

[复制链接]
  • TA的每日心情
    郁闷
    2021-5-20 15:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2021-5-20 14:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    我在使用 FIR 7.2 系数重载的时候总是得不到想要的输出
    , {* @3 Y+ t$ w- G  n1 . 首先用matlab生成波形数据以及滤波前后对比:
    ; c# L0 X+ N& M9 L4 N$ i" ]3 E2 T; f" S wave1:
    ( J* z# ?' O# I- Y/ D( C- U5 g* F; i) R, \. c- i) r" W( M
    2. 把matlab 生成的数据导入到vivado中中进行仿真,但是结果并没有得到跟mablab相同的结果。下面是仿真结果以及时序图:
    / Q+ ^5 l- `$ d  f2 L9 ~                 wave2:/ L* w" W; w6 }: V& R2 Z3 I- {, \
    6 ~5 E- }" M  R2 v4 n& ~7 Q$ m
                     wave3:) x7 I- l* M# c1 s+ M
    ( C( K. t1 j0 g9 Q- u: u* ^

    6 r' J* _- M5 x3 Q( ?/ L' W( e  r* s0 T7 d7 J7 ~0 n% [: h8 G
    3. IP 的配置,不知道是不是配置那里出了问题
    3 c$ Z) m; [, A; l4 Y, [, H3 |- u; Q8 r( a4 u. @3 ?

    . [% b( F" i* }5 c; z/ }' E* c1 c% y: k- G. K3 `! c" @
    & p8 s" R( M/ j$ A' k
    7 l5 T& q) x) @3 Z% Y! y

    $ U- M% l6 g1 A% s9 N* w% e, e* h* Q! ^
    % J7 \7 f) C) J0 y  Z
      p- ?& p6 b6 {/ [9 s

    & R( ~; l. J2 B9 e/ ~' ~4 k9 l4 r+ a1 J6 I$ S. ?

    & x1 Z) D7 Q$ N( A# z3 \& D, i4. testbench 仿真代码
    ' p# H* I4 Z; Q- [; p. Y! B1 O2 Z1 f2 S`timescale 1ns / 1ps3 z" i, z/ \  B- h% f8 ^& R
    module fir_tb(
    ! s1 ^8 c' l# e! N& M);4 v+ L  F4 I2 O+ U5 }& [
    reg aclk_0;
    % y  |- Y# r; E0 r  h' W) Lwire M_AXIS_DATA_0_tvalid;
    2 z2 ^5 t& j  K. ^) ewire m_axis_data_tvalid_0;
    - K  q6 p' I  e; ^0 T7 }) m6 |wire [41:0]m_axis_data_tdata_0;0 E. _/ j/ W; C' X, C, X
    reg [15:0]outData;
    3 o( g! X1 j% o- Vwire [15:0]S_0;
    , s4 I9 q  V9 f/ E' e+ n6 B& c  ]) [reg [15:0]s_axis_data_tdata_0;
    " P- H7 }( L7 m6 Jreg s_axis_data_tvalid_0;
    5 r' t2 k; N, L) Bwire s_axis_data_tready_0;
    ' j3 f- X  ^( N$ l( xreg [7:0]s_axis_config_tdata_0;4 R  K. S- J' L' R: F( L
    wire s_axis_config_tready_0;
    - K. k& @& t8 ~* Z, @: T- Rreg s_axis_config_tvalid_0;: D+ W' \. O9 U6 ?, ^, B" _
    reg [15:0]s_axis_reload_tdata_0;* R' U# n3 q; E! u5 u
    reg s_axis_reload_tlast_0;: \4 ^* B, m4 [$ C0 o
    wire s_axis_reload_tready_0;9 `; p8 x! }2 o9 u. B! i' H( q
    reg s_axis_reload_tvalid_0;
    2 N  \7 H8 `% R" a# x 7 |0 Y; A, v# t
    wire [47 : 42] m_axis_data_null = 0;  Y( c% g2 y, D* J: {
    ( v9 e1 W8 |( W! F- ^
    integer k = 0;
    ; T, `! a( Q. B) }; s& @integer j = 0;; Y; g# O% P, R, U3 u. y/ l+ x6 J& }8 J# _
    integer m = 0;! A& v0 `* \9 ]
    integer n = 360;
    ' @3 o' @+ g/ ]6 C0 j. mreg[15:0] coeffData [1023:0];
    ' G! d: U: a7 j% g2 Eparameter DATA_NUM = 2048;
    8 _( K- M7 d. ~
    - k( t5 n3 m3 Y8 S7 v% K///////////////////////////////////////////////////////////////////////6 s  h0 R0 ]5 s# l8 w7 j' Q) [
    //fir IP Core  A' ^) \! N  S2 U* b
    dds_fir dds_fir_i
    1 \! m- n7 d& h(.S_0(S_0),
    5 W# w# l1 h+ S; C: h% V4 H' M" j.aclk_0(aclk_0),+ ?! y# U$ o  }: \2 B
    .m_axis_data_tdata_0({m_axis_data_null,m_axis_data_tdata_0}),$ e, b; l' N) k) e+ a5 `* c
    .m_axis_data_tvalid_0(m_axis_data_tvalid_0),
    ! C( t9 _0 `7 W.s_axis_config_tdata_0(s_axis_config_tdata_0),
    2 [; `# ?3 `  z' M' Z. S: X.s_axis_config_tready_0(s_axis_config_tready_0),
    : @! N! e7 W( B# y5 g0 E# g' D.s_axis_config_tvalid_0(s_axis_config_tvalid_0),. f$ a7 u; d8 K9 E2 \, }
    .s_axis_data_tdata_0(s_axis_data_tdata_0),
    2 h6 w$ t) K6 Z! j6 g0 `& T$ `.s_axis_data_tready_0(s_axis_data_tready_0),8 C  p& }; J/ j0 y& O0 V
    .s_axis_data_tvalid_0(s_axis_data_tvalid_0),7 H/ y7 ]+ V8 g3 U9 h0 P
    .s_axis_reload_tdata_0(s_axis_reload_tdata_0),
    % q% U6 ~* X. ~9 G% J# Q.s_axis_reload_tlast_0(s_axis_reload_tlast_0),2 U/ s! h! j' v  o$ }. A
    .s_axis_reload_tready_0(s_axis_reload_tready_0),$ U3 Y6 i$ z) y) {
    .s_axis_reload_tvalid_0(s_axis_reload_tvalid_0));! A- G, L; t9 U% j0 D0 y
    ///////////////////////////////////////////////////////////////////////
    9 R0 p6 |  ]1 z ! \; D4 E& I! [* A( N, m/ p
    integer i;
    0 E" r2 t' S0 |3 {' \reg[15:0] data_mem [DATA_NUM-1:0];1 K4 N3 v8 p  P! _$ o& d
    initial #500 $readmemh("./OriginalSignal.txt", data_mem);
    3 f6 j7 v4 v$ l% P: w6 Linitial #600 $readmemh("./coeffData_250~400.txt", coeffData);* P' z! _2 e: o! c3 L
    initial
    & N' }1 e4 A* f% a8 f, L) sbegin
    7 f! h( B! g# y7 \aclk_0 = 0;$ C& ]2 f1 \+ J7 @
    s_axis_config_tdata_0 = 8'd0;
    - j# _' b2 I& _/ {: K# \s_axis_config_tvalid_0 = 1'b0;
    2 E% T( e6 n. C. L$ y. E! Gs_axis_reload_tvalid_0 <= 1'b0;
    $ w  d; ^/ K- C' A. z* m$ vs_axis_data_tvalid_0 = 1'b0;
    + d3 H0 a) b7 s$ N& ~s_axis_data_tdata_0 = 16'd0;3 n. e/ q. T# @# |

    ' u8 S3 ^6 p1 S, H#1000;
    8 v  g: y" J4 w/ q/ |3 a  }@(posedge aclk_0);
    - L7 b7 E8 J' R1 y5 f( P+ v" X2 @! Ki <= 1;
      q4 |& A) s& l3 dk<=1;. h; [  ^4 J; Z9 o2 O7 f
    #10000;- p% O) [& u0 @2 c4 P  P' q, P
    @(posedge aclk_0);& C, b9 }3 o8 b6 @
    #400_000;1 g% o! x+ n' j: N5 z" T3 o+ x
    $fclose(w1_file);
    # [0 ~1 W& G9 ?* F#1000;
    * E, u4 x3 \/ |# ]; T1 ?$stop;
    - i+ A. [: i. ~9 F/ W* W2 h: Fend6 O. H8 l* p' @1 v3 F  k  i
    //update fir coefficients& m, e9 }  e1 a* O' o7 \4 W0 F
    always @(posedge aclk_0) begin
    1 h* E! B$ U3 g% j. X! K. S          if(k == 0)" d+ p9 f* N0 ^& B$ W
                    k <= 0;% B0 ^6 d# o( ]$ l) `
              else if(k <= n) begin6 C6 ~7 a, d7 f( e' f; J
                   if(s_axis_reload_tready_0 && s_axis_reload_tvalid_0)/ T) t: Y! n4 g4 t* g$ `+ }
                         k <= k+1;5 d( _2 O6 `) x+ E: O( j0 ?0 y* b
                  else ;
    9 a9 l$ {! S' ]              end
    * p9 I4 y- p6 Y( I: |. `5 O+ b          else if(k < n+26)- N, F; a+ p# y, Z4 F
                    k <= k+1;0 {1 g: e0 f; N' }9 K
              else ;
    : h" h' [) H+ }* n4 _6 Bend
    ( P  r$ N# |. f- v9 x; K! I6 xalways @(*) begin# P/ `8 G6 k3 t. V* w) p% ~
              if((k>0) && (k<=n))7 V7 t: e- T+ S( t- L1 A
                    s_axis_reload_tdata_0 <= coeffData[k-1];: F7 D/ a5 Q5 E  M& G: j6 e) V
              else, h+ _) \  R9 `  v) b
                    s_axis_reload_tdata_0 <= 16'd0;
    8 B6 b+ R# d5 x, N( ]9 u2 c' n3 qend/ \# {8 A) n/ m- h
    always @(posedge aclk_0) begin
    $ F- B9 Z# m0 B6 [          if((k>=1) && (k<n-1))
    ; e+ N! k2 A8 y          begin
    0 |( t1 v* _6 j/ R- x; \                s_axis_reload_tvalid_0 <= 1'b1;2 B1 `- b/ Z1 d. i7 e
                    s_axis_reload_tlast_0 <= 1'b0;) U. j2 i* ]/ B0 }  ^
              end7 L5 e/ n7 ^% j8 P0 B6 }. a
              else if(k == n-1)
    ) u4 I6 Q! w- L" C                s_axis_reload_tlast_0 <= 1'b1;. n9 F9 {+ U. {0 i4 B  ^
              else if(k == n)
    2 Z4 c- S7 T( F3 O. u/ \# l          begin( p; ~: N) ~4 b$ e
                    s_axis_reload_tvalid_0 <= 1'b0;9 t4 j; S3 d7 Y3 ?8 p
                    s_axis_reload_tlast_0 <= 1'b0;
    1 _8 x+ {9 H  D' W          end
    7 i! ~  j$ Z9 Y! o; p6 g4 W. k: V          else if(k == n+3)
    3 z) ?9 ]* x" S; x* @  r& R3 y  A: [+ z          begin
    " o& ]; s* b$ ?                s_axis_config_tvalid_0 = 1'b1;
    ; b8 i* y5 Q, Z, E" J                s_axis_config_tdata_0 = 8'h00;
    + R% J* g1 c3 f4 a, j, K  ?               @(posedge aclk_0);7 b7 a" f( v# L3 |; U# P1 V- A
                   s_axis_config_tvalid_0 = 1'b0;
    . t3 Q& J) N8 o" }' L3 p         end
    ! M- ]8 U$ m& a! h3 c1 n: Vend
    5 n) t6 r6 x3 P/ M' a/////////////////////////////////////////////////////////////////////////////4 C- _0 J  ]5 L# T0 R
    always @(*) begin
    9 Q; ~1 h9 L* {1 P               if((i>0) && (i<DATA_NUM+1))& f+ D3 S) z1 c* B' {# A- @
                         s_axis_data_tdata_0 <= data_mem[i-1];
    / S5 r2 R, U3 `& k               else
    " s3 M' T. M0 h2 F  ]                     s_axis_data_tdata_0 <= 16'd0;5 y, u- z& r; A
    end
    : g1 [- P) E$ Z$ o& M2 Dalways @(posedge aclk_0) begin
    ( @/ T$ `6 _( [/ s" o               if(i == 0)# C2 `4 y0 R2 ~$ `
                         i <= 0;
    ' L. z  w# I0 x' [3 c" P               else if(i <= DATA_NUM) begin
    . P- r- T; C5 x2 Q2 S& \                     if(s_axis_data_tready_0 && s_axis_data_tvalid_0)
    9 u* C# _/ w% W, h                     i <= i+1;; n( p8 ]3 |9 c, ]' |1 i
                   else ;: Y, C! Y! _; {1 K
                   end
    1 o! r, g" x# _. G4 X3 p               else if(i < DATA_NUM+26)
    # p7 a8 G! I# p2 y4 c0 g* ]; |                     i <= i+1;3 Q7 c# ]& _( z
                   else ;
    ; W7 B7 {; B! r: Eend
    / A7 g9 B- t9 H' walways @(posedge aclk_0) begin
    ; |+ K: g; H+ M( X5 N1 r          if((i>=1) && (i<=DATA_NUM-1))! n6 w3 G6 c* a, o; T7 }8 T
                    s_axis_data_tvalid_0 <= 1'b1;' h6 g1 y  x9 |! B
              else
    3 N# F. M) m' U9 B8 }9 v                s_axis_data_tvalid_0 <= 1'b0;7 r; M; t4 U$ p5 i, \$ i
    end/ r$ I% b0 [6 g
    always #5 aclk_0 = ~aclk_0; //100M
    6 w( {2 x- h! n; x% o7 p' @; xinteger w1_file;4 p! z0 o  g8 W" o: }# o
    initial w1_file = $fopen("./fir_result.txt","w");
    ; N  N0 S6 [+ e, Aalways @(posedge aclk_0) begin9 s. o+ r# ^9 t; a" ~  F( O
                   if(m_axis_data_tvalid_0)
    ' H9 y7 i: U8 f# y5 z               begin" t. Z4 T* g# i6 y0 y
                         $fwrite(w1_file, "%x\n", m_axis_data_tdata_0);
    1 x  w% l& N  F$ L. @6 ~' F0 ^: ~               end
    ; z4 m# d  T. c! Bend
    7 u0 Y# W; |) X4 ^, n) zendmodule
    ' d& r2 L% _# O0 a
    3 o5 l7 C- K& d6 `7 D' E' r

    # f5 p! N5 U' C/ X( H" a6 f
    5. 对比我的仿真时序,跟官方手册 pg149的并不一样,尤其是 s_axis_reload_tready_0 信号,手册上显示最后一个系数加载前s_axis_reload_tready_0会自动拉低,但是
    / z: K) I3 c& R, k5 j+ r3 c5 J0 t! h: U2 M' u, H
    我实际使用并没有,只有全部系数加载完毕后s_axis_reload_tready_0才会拉低。! {& R9 m, C+ l; b; `1 J

      R( h, G( O. V( H# l
    2 n: j5 j4 r. z0 j  p; {$ W9 o/ N; ^2 ?# b0 L9 Y
    6. 不知道是哪里理解的不对,希望有朋友指点指点???. u* J6 C, m9 C1 h  D
        谢谢!
    ; I; z) b7 D3 ^5 t% O4 x7 j4 t8 \; G; k: C# h

    该用户从未签到

    2#
    发表于 2021-5-20 18:07 | 只看该作者
    这么长我竟然看完了                     
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-11 16:36 , Processed in 0.140625 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表