在以下SystemC
SC_THREAD
我尝试执行以下操作:image_buffer
是一个3行x 720列矩阵,其中填充了从端口{{ 1}}。当p_in
有2行并填充前5个字节时,它必须开始将字节复制到另一个名为image_buffer
的矩阵中,其大小为576行×720列。如果信号img
为h_in
,则保存该字节。 true
完成后,将生成格式为png的图像。我写的代码的问题是img
和i
分别总是2和4,只有2个第一行和第3行的4个像素保存在图像中。你能否告诉我如何实施这个?
j
更新
我修改了代码如下,但是当我这样做时,新计数器void FILTER::filtering(){
while(1){
while(!h_in) wait(h_in.posedge_event());
for(i=0; i<3; i++){
for(j=0; j<720; j++){
image_buffer.pixel[i*image_buffer.width+j] = p_in;
wait();
while(!h_in) wait();
//Begin of the block code I'm trying to test with
if ( (i > 1) && (j > 3) ){
for(int bi=0; bi<576; bi++){
for(int bj=0; bj<720; bj++){
if (bi < 3){
img.pixel[bi*img.width+bj] = image_buffer.pixel[bi*image_buffer.width+bj];
}
else{
img.pixel[bi*img.width+bj] = image_buffer.pixel[(bi%3)*image_buffer.width+bj];
}
cout << "i: " << i << " j: " << j << endl;
if ( (bi == 575)&&(bj == 719) ){
image_write( &img, "test.png" );
exit(1);
}
}
}
}
wait();
//End of the block code I'm trying to test with
}
}
}
}
和bi
始终是bj
:
0
答案 0 :(得分:1)
如果我正确理解您的问题,您不希望循环复制到的第二个数组。您需要跟踪第二组索引变量,这些变量基于外部循环递增。
int ii, jj
for i = 0 to n
for j = 0 to m
if i > v and j > u
img[ii,jj] = val
++ii, ++jj
答案 1 :(得分:1)
要执行单线程解决方案,您需要遍历最终图像的维度,并跟踪(row,col)
和计算的(bufrow,bufcol)
。您可能不希望为此使用for循环,因为您将具有可以递增图像位置和缓冲区位置的迭代。每次迭代都可以具有以下条件之一:
(bufrow,bufcol)
增量,
(row,col)
不h
是真的&amp;&amp; (bufrow,bufcol)
在某些时候已超过(2,5)
(sticky buffer_is_ready指标)!h
),
但复制到图像正在发生 - 增加(row,col)
您可能希望while(row<576&&col<720)
作为您唯一的循环(在while(1)内)。在每次迭代中,手动处理(row,col)和(bufrow,bufcol)的增量。别忘了缓冲环绕:
if (h) {
bufrow = (bufcol == 719 && bufrow == 2) ? 0
(bufcol == 719) ? bufrow+1 : bufrow;
bufcol = (bufcol == 719) ? 0 : bufcol+1;
}
它还可以简化使用双线程解决方案的代码。使用两个线程也可以将缓冲区填充与任何计算和复制分离到最终图像。