キューを使った遅延バッファ
代入に遅延を入れる(Verilog)
initial begin
forever begin
fork
o_DATA_R <= #400 i_DATA_R;
join
@(posedge CLK_SYS);
end
end
- #400ってどうよ?→パラメータ記述にすれば多少はマシに
- verilogで使えるのはやっぱりうれしい
キューを使った遅延バッファ(SystemVerilog)
input wire signed [15:0] i_DATA_R ;
input wire signed [15:0] i_DATA_G ;
input wire signed [15:0] i_DATA_B ;
output reg signed [15:0] o_DATA_R ;
output reg signed [15:0] o_DATA_G ;
output reg signed [15:0] o_DATA_B ;
// Queues
reg signed [15:0] q_DATA_R [$];
reg signed [15:0] q_DATA_G [$];
reg signed [15:0] q_DATA_B [$];
// clocking
clocking sys@(posedge CLK);
default input #setup_time;
default output #hold_time;
input i_DATA_R ;
input i_DATA_G ;
input i_DATA_B ;
output o_DATA_R ;
output o_DATA_G ;
output o_DATA_B ;
endclocking
initial begin
forever fork
@(sys);
q_DATA_R.push_front (sys.i_DATA_R );
q_DATA_G.push_front (sys.i_DATA_G );
q_DATA_B.push_front (sys.i_DATA_B );
join
end
initial begin
repeat(10)@(sys);
forever fork
@(sys);
sys.o_DATA_R <= q_DATA_R.pop_back ();
sys.o_DATA_G <= q_DATA_G.pop_back ();
sys.o_DATA_B <= q_DATA_B.pop_back ();
join
end
- 重いかもしれない。
- clockingは好みによる。
- キュー自体をclockingはできなかった。(VCS A-2008.09)
最終更新:2008年11月21日 11:16