-3

Как преобразовать поток данных 4: 2: 2 YCbCr в 4: 4: 4 YCbCr в Verilog? Я новичок в verilog, и я не знаю, с чего начать. Я попытался создать 2D-массив, но я понятия не имею, как его реализовать в этом вопросе.4: 2: 2 to 4: 4: 4 Конвертер YCbCr в verilog

module test3(clk,datastream_in,datastream_out); 
input clk; 
input [11:0] datastream_in [0:7]; //input datastream 

output [17:0] datastream_out[0:7];  //output datastream 

reg [17:0] datastream_out[0:7]; 

reg temp2[0:7];   //temporary variables to store the value from the input 
reg temp3[0:7]; 
reg temp4[0:7]; 

integer i; 
integer y; 

[email protected](posedge clk) 
begin 

assign i=0; 
assign y=0; 

while(1) 
begin 

datastream_out[y]=datastream_in[i+0];  
temp2=datastream_in[i+1]; 
datastream_out[y+1]=temp2; 
temp3=datastream_in[i+2];       //input pattern:  4:2:2 
temp4=datastream_in[i+3];       //output pattern 013213 :4:4:4 
datastream_out[y+2]=temp4; 
datastream_out[y+3]=temp3; 
datastream_out[y+4]=temp2; 
datastream_out[y+5]=temp4; 
i=i+5; 
y=y+6; 
end 
end 
endmodule 

ОШИБКА: 251 НЕ МОЖЕТ ДОСТУПИТЬ ПАМЯТЬ temp4 ПРЯМО. ОШИБКА: 252 НЕ МОЖЕТ ASSIGN распакованные ТИПА К насадочному типу

+2

Вам необходимо отделить алгоритм от реализации, по крайней мере, в качестве первого прохода. Если бы вы могли показать, как обычно вы конвертируете 4: 2: 2 YCbCr в 4: 4: 4, тогда мы можем посмотреть Verilog. – Morgan

+0

На самом деле алгоритм состоит в том, чтобы повторно хранить входной сигнал от потока данных i.e 4 байта и соответственно назначать вывод для 6 байтов, где образец повторяется. – Sara

ответ

0

Если хранящие байты вы хотите использовать:

module converter (
    input  [7:0] datastream_in [0:11], //input datastream 
    output reg [7:0] datastream_out[0:5] //output datastream 
); 


reg [7:0] temp2;   //temporary variables to store the value from the input 
reg [7:0] temp3; 
reg [7:0] temp4; 

Присвоить обычно используются для проводов, не назначения в регистры внутри всегда или начальном процессы. Выбор байта и assigmnets должны быть вдоль линий:

i=0; 
datastream_out[i] =datastream_in[i+0];  
temp2    =a[i+1]; 
datastream_out[i+1] =temp2; 
temp3    =datastream_in[i+2]; //input pattern: 4:2:2 
temp4    =datastream_in[i+3]; //output pattern 013213 :4:4:4 
datastream_out[i+2] =temp4; 
datastream_out[i+3] =temp3; 
datastream_out[i+4] =temp2; 
datastream_out[i+5] =temp4; 

Temp2 имеет это назначение: temp2=a[i+1];a Не было упоминать где-либо еще в фрагменте кода это опечатка?

Я не уверен, что вы пытаетесь со следующим:

while(i!=10) begin 
    i=0; 

i никогда не получает приращение.

Смежные вопросы