finish GammaCorrection and pass simmulation

This commit is contained in:
SikongJueluo
2024-06-29 17:05:57 +08:00
parent 897db1e699
commit 24ac284c52
5 changed files with 228 additions and 41 deletions

View File

@@ -207,11 +207,15 @@ int sc_main(int argc, char* argv[]) {
sc_signal<bool> out_receive;
sc_signal<uint32_t> out_data;
sc_signal<bool> color_correction;
sc_signal<bool> blender_enable;
sc_signal<uint32_t> gain_red;
sc_signal<uint32_t> gain_green;
sc_signal<uint32_t> gain_blue;
sc_signal<bool> gamma_enable;
sc_signal<uint32_t> gamma_inverse;
sc_signal<uint32_t> gamma_table[256];
sc_signal<bool> flag_done;
// Construct the Verilated model, from inside Visp.h
@@ -236,12 +240,22 @@ int sc_main(int argc, char* argv[]) {
isp->gain_red(gain_red);
isp->gain_green(gain_green);
isp->gain_blue(gain_blue);
isp->color_correction(color_correction);
isp->blender_enable(blender_enable);
color_correction.write(true); // enable color correction
gain_red.write((uint32_t)(color_gain.red * std::pow(2, 8)));
gain_green.write((uint32_t)(color_gain.green * std::pow(2, 8)));
gain_blue.write((uint32_t)(color_gain.blue * std::pow(2, 8)));
isp->gamma_enable(gamma_enable);
// isp->gamma_inverse(gamma_inverse);
blender_enable = true; // enable color correction
gain_red = (uint32_t)(color_gain.red * std::pow(2, 8));
gain_green = (uint32_t)(color_gain.green * std::pow(2, 8));
gain_blue = (uint32_t)(color_gain.blue * std::pow(2, 8));
gamma_enable = true;
gamma_inverse = (uint32_t)((1.0 / gamma_value) * std::pow(2, 8));
for (int i = 0; i < 256; i++) {
isp->gamma_table[i](gamma_table[i]);
gamma_table[i] = (uint32_t)(255 * pow(i / 255.0, 1.0 / gamma_value));
}
// Construct testbench module
TB_ISP tb_isp("tb_isp");