キューを使った遅延バッファ


代入に遅延を入れる(Verilog)

  1. initial begin
  2. forever begin
  3. fork
  4. o_DATA_R <= #400 i_DATA_R;
  5. join
  6. @(posedge CLK_SYS);
  7. end
  8. end
  9.  

  • #400ってどうよ?→パラメータ記述にすれば多少はマシに
  • verilogで使えるのはやっぱりうれしい

キューを使った遅延バッファ(SystemVerilog)

  1. input wire signed [15:0] i_DATA_R ;
  2. input wire signed [15:0] i_DATA_G ;
  3. input wire signed [15:0] i_DATA_B ;
  4. output reg signed [15:0] o_DATA_R ;
  5. output reg signed [15:0] o_DATA_G ;
  6. output reg signed [15:0] o_DATA_B ;
  7. // Queues
  8. reg signed [15:0] q_DATA_R [$];
  9. reg signed [15:0] q_DATA_G [$];
  10. reg signed [15:0] q_DATA_B [$];
  11. // clocking
  12. clocking sys@(posedge CLK);
  13. default input #setup_time;
  14. default output #hold_time;
  15. input i_DATA_R ;
  16. input i_DATA_G ;
  17. input i_DATA_B ;
  18. output o_DATA_R ;
  19. output o_DATA_G ;
  20. output o_DATA_B ;
  21. endclocking
  22.  
  23. initial begin
  24. forever fork
  25. @(sys);
  26. q_DATA_R.push_front (sys.i_DATA_R );
  27. q_DATA_G.push_front (sys.i_DATA_G );
  28. q_DATA_B.push_front (sys.i_DATA_B );
  29. join
  30. end
  31.  
  32. initial begin
  33. repeat(10)@(sys);
  34. forever fork
  35. @(sys);
  36. sys.o_DATA_R <= q_DATA_R.pop_back ();
  37. sys.o_DATA_G <= q_DATA_G.pop_back ();
  38. sys.o_DATA_B <= q_DATA_B.pop_back ();
  39. join
  40. end
  41.  
  • 重いかもしれない。
  • clockingは好みによる。
  • キュー自体をclockingはできなかった。(VCS A-2008.09)














最終更新:2008年11月21日 11:16