ВНИМАНИЕ! На форуме началось голосование в конкурсе - астрофотография месяца - ИЮЛЬ!
0 Пользователей и 1 Гость просматривают эту тему.
делаю серии снимков по 10 штук. и всего лишь на одном замечен косяк в виде каких-то полосок
да, у меня именно так и подключается камера. должно быть как-то иначе?
У меня впечатление, что даже в искаженных строках частично просматривается полезное изображение.
Должно быть так, как хотел разработчик устройства
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Description: Time generator 8 MHz for DALSA CCD FTF5066C//reg1[1] byte=0x02;//подача питания на MAX618//reg1[2] byte=0x04;//управление накоплением заряда//reg1[3] byte=0x08;//управление экспозицией//////////////////////////////////////////////////////////////////////////////////module FTF5066C_8 /*#(parameter BASE = 0)*/( // Clock input wire clock, input wire f2hReady, input wire [5:0]data_gain,//<===== input wire [7:0]data_offset,//<===== input wire [7:0]data_msb, input wire [7:0]data_lsb, // Config input wire CR_IN,//<== перед открытием затвора и началом накопления заряда разряжаем матрицу импульсом CR input wire power_MAX618,//<== подача питания на MAX618(reg1[1]) input wire integration, //<== накопление пикселей(reg1[2]) input wire transport, //<== перенос заряда в хост(reg1[3]) // CCD output wire PWRTGDRW_MAX618,//LOC = P190;//УПРАВЛЕНИЕ ПИТАНИЕМ MAX618 output wire V_DRIVE11, //LOC = P164;//УПРАВЛЕНИЕ ПИТАНИЕМ 1 включить 11 вольт output wire PWRTGDRW, //LOC = P189;//УПРАВЛЕНИЕ ПИТАНИЕМ 2 SN74LVC1T45 output wire TD_WTHLVL, //LOC = P102;//ИМПУЛЬСЫ УПРАВЛЕНИЯ EL7156 off-11V, on-8V//======================CCD DALSA FTF5066C output wire CR, //LOC = P103; output reg TGZ, //LOC = P100; output reg TGY, //LOC = P96; output reg TGX, //LOC = P80; output reg TGW, //LOC = P76; output reg A1T, //LOC = P99; output reg A2T, //LOC = P93; output reg A3T, //LOC = P94; output reg A4T, //LOC = P97; output reg A1B, //LOC = P77; output reg A2B, //LOC = P90; output reg A3B, //LOC = P89; output reg A4B, //LOC = P78; output reg C1X, //LOC = P68; output reg C2X, //LOC = P69; output reg C3X, //LOC = P65; output reg C1W, //LOC = P62; output reg C2W, //LOC = P63; output reg C3W, //LOC = P64; output reg SG, //LOC = P74; output reg RG, //LOC = P75; // ADC output reg CDSCLK1,//фиксация уровня output reg CDSCLK2,//выборка output reg ADCCLK, //тактирование output reg REGWR, // out output reg frame, output reg header, output reg [7:0]header_data, output reg header_clock);reg [7:0] buffer;reg [12:0] pix;// кол-во пикселей в строкеreg [15:0] row;// кол-во строк в кадре//reg [25:0]cr_; // Charge Reset (CR) pulse on VNS.//============================================5always @ (posedge clock)begin if ( f2hReady ) begin if (buffer == 5) begin // new tick if (pix == 5149)// кол-во пикселей в строке 100+9+20+4+4992+4+20 = 5149 begin if (row == 6703) // кол-во строк в кадре 6703 begin // wait if (transport == 1'b1) begin row <= 0; //cr_ <= 0; end end else begin // new line pix <= 0; row <= row + 1; buffer <= 0; end end else begin // new pixel pix <= pix + 1; //cr_ <= cr_ + 1;//Charge Reset (CR) pulse on VNS buffer <= 0; end end else begin buffer <= buffer + 1; end endendwire SSC = !((pix > 0) && (pix <= 100)); // 0,688 wire SSC_ADC = !((pix > 0) && (pix <= 96)); // 0,684 пропускаем 4 такта ацпwire SSC_CCD = !((pix > 0) && (pix <= 100)); // 0,688 //импульсы вертикального переноса заряда 1552 Гц //при накоплении выставляем 8 вольт, а при переносе пульсируем - с ампл. 11 вольтwire TG_A1 = integration ? 1'b0 : transport ? (pix >= 30) && (pix <= 80) : 1'b0 ; //188,501wire A2 = integration ? 1'b1 : transport ? !((pix >= 20) && (pix <= 50)): 1'b0 ; //125,313wire A3 = integration ? 1'b1 : transport ? !((pix >= 40) && (pix <= 70)): 1'b0 ; //250,438wire A4 = integration ? 1'b1 : transport ? !((pix >= 60) && (pix <= 90)): 1'b0 ; //375,563// CR <= !(cr_ >= 0 && cr_ <= 687); //LOC = P103; Charge Reset (CR) pulse on VNS. assign CR = CR_IN; //LOC = P103; Charge Reset (CR) pulse on VNS. assign PWRTGDRW_MAX618 = !power_MAX618; //подача питания на драйверы MAX618 pin190// при накоплении заряда устанавливаем 8 вольт, а при переносе 11 вольт.assign V_DRIVE11 = integration ; //8V - накопление заряда, 11V - вертикальный перенос pin164assign TD_WTHLVL = integration ;//|| SSC; //переключатель напр.11/8 вольт на EL7156. pin102assign PWRTGDRW = transport ; //подача питания на драйверы гориз.переноса pin189 //====================== CCD DALSA FTF5066C ===================================================always @ (posedge clock) begin//================== ВЕРТИКАЛЬНЫЙ ПЕРЕНОС 1552 Гц ============================================== TGZ <= TG_A1; //LOC = P100;Image Clock Transfer Gate(Phase 1) TGY <= TG_A1; //LOC = P96; TGX <= TG_A1; //LOC = P80; TGW <= TG_A1; //LOC = P76; //TOP A1T <= TG_A1; //LOC = P99; Image Clock (Phase 1) A2T <= A2; //LOC = P93; Image Clock (Phase 2) A3T <= A3; //LOC = P94; Image Clock (Phase 3) A4T <= A4; //LOC = P97; Image Clock (Phase 4)//BOT A1B <= TG_A1; //LOC = P77; Image Clock (Phase 1) A2B <= A2; //LOC = P90; Image Clock (Phase 2) A3B <= A3; //LOC = P89; Image Clock (Phase 3) A4B <= A4; //LOC = P78; Image Clock (Phase 4) ///================== ГОРИЗОНТАЛЬНЫЙ ПЕРЕНОС 8 МГц ============================================ RG <= (buffer == 0) && SSC_CCD; //LOC = P75; Reset Gate SG <= buffer < 3 && SSC_CCD; //LOC = P74; Summing Gate //LEFT (SINGLE OUTPUT Left C1 C2 C3) //RIGHT (SINGLE OUTPUT Right C2 C1 C3) C1W <= !((buffer < 2 || buffer > 4 ) && SSC_CCD);//LOC = P62; Register Clock (Phase 1) C2W <= !(!( buffer < 1 || buffer > 3 ) && SSC_CCD);//LOC = P63; Register Clock (Phase 2) C3W <= buffer < 3 && SSC_CCD; //LOC = P64; Register Clock (Phase 3) C1X <= !((buffer < 2 || buffer > 4 ) && SSC_CCD); //LOC = P68; Register Clock (Phase 1) C2X <= !(!(buffer < 1 || buffer > 3 ) && SSC_CCD); //LOC = P69; Register Clock (Phase 2) C3X <= buffer < 3 && SSC_CCD; //LOC = P65; Register Clock (Phase 3) ///=============================================================================================== frame <= SSC; //SSC header_clock <= buffer == 0 && pix >= 91 && pix <= 100; header <= pix >= 91 && pix <= 100; //8 бит заголовка строки ///=============================================================================================== case (pix) 91: header_data <= 8'h01; //01 заголовок маркера 92: header_data <= 8'h02; //02 заголовок маркера 93: header_data <= row[15:8]; //ст.байт номер строки 94: header_data <= row[7:0]; //мл.байт номер строки 95: header_data <= data_msb[7:0]; //ст.байт Т.Пельтье 96: header_data <= data_lsb[7:0]; //мл.байт Т.Пельтье 97: header_data <= data_gain[5:0]; //усиление АЦП 98: header_data <= data_offset[7:0]; //смещение АЦП default: header_data <= 8'h00; endcase ///===== тактирование ацп. HB,LB 16 bit ============================================== case (buffer) 1: CDSCLK1 <= SSC_ADC; //==> импульс фиксации default: CDSCLK1 <= 1'b0; endcase case (buffer) 3,4: CDSCLK2 <= SSC_ADC; //==> импульс выборки default: CDSCLK2 <= 1'b0; endcase case (buffer) 4,5,0: ADCCLK <= SSC_ADC; //==> меандр такт ацп default: ADCCLK <= 1'b0; endcase end ///================================================================================= always @ (negedge clock) // по спаду тактового импульса begin case (buffer) 2,5: //удвоенная частота //==> такт записи данных в FX2 REGWR <= SSC_ADC; default: REGWR <= 1'b0; endcase end///================================================================================= initial begin buffer = 5; pix = 5149;// row = 6703; //cr_ = 0; end endmodule
offset_raw = offset_raw_2;//================================= поиск начала кадра ====================================================== back:for(p = 0; p <= ccd; p++) { if(ccd_buf[p] == 0x01) { //ищем первый байт заголовка строки if(ccd_buf[p+1] == 0x02) { //ищем второй байт заголовка строки if(ccd_buf[(p+2)] = 0x00) { //ищем ст.байт номера строки if(ccd_buf[(p+3)] = 0x01) { //ищем мл.байт номера строки anf_kadr++; break; //если нашли, то выпрыгиваем } else {line=0; goto back;} //иначе возвращаемся к нач.поиска } } } }//============== переписывание буфера ===============================================for(p = anf_kadr; p <= ccd; p++) { if(ccd_buf[p] == 0x01) { if(ccd_buf[p+1] == 0x02) { if(ccd_buf[(p+8)] != 0x00) { //если кривая строка - сдвигаем байер,иначе пропускаем и наслаждаемся красивой картинкой offset_raw_2 = offset_raw; offset_raw +=4; } else memmove(&buf_out[pixel * line++], &ccd_buf[p + offset_raw], pixel);// } } }//========================================================================================================================== fwrite(buf_out, sizeof(unsigned char), write_raw, fp); //записываем данные в файл. последовательная запись flSleep(pause_time); //задаём время паузы между экспозициями fclose(fp); //закрываем созданный файл next_file=1; //разрешаем преобразование raw2tiff.exe//==========================================================================================================================
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Description: Time generator 4 MHz for DALSA CCD FTF5066C//reg1[1] byte=0x02;//подача питания на MAX618//reg1[2] byte=0x04;//управление накоплением заряда//reg1[3] byte=0x08;//управление экспозицией//////////////////////////////////////////////////////////////////////////////////module FTF5066C_4 /*#(parameter BASE = 0)*/( // Clock input wire clock, input wire f2hReady, input wire [5:0]data_gain,//<===== input wire [7:0]data_offset,//<===== input wire [7:0]data_msb, input wire [7:0]data_lsb, // Config input wire CR_IN,//<== перед открытием затвора и началом накопления заряда разряжаем матрицу импульсом CR input wire power_MAX618,//<== подача питания на MAX618(reg1[1]) input wire integration, //<== накопление пикселей(reg1[2]) input wire transport, //<== перенос заряда в хост(reg1[3]) // CCD output wire PWRTGDRW_MAX618,//LOC = P190;//УПРАВЛЕНИЕ ПИТАНИЕМ MAX618 output wire V_DRIVE11, //LOC = P164;//УПРАВЛЕНИЕ ПИТАНИЕМ 1 включить 11 вольт output wire PWRTGDRW, //LOC = P189;//УПРАВЛЕНИЕ ПИТАНИЕМ 2 SN74LVC1T45 output wire TD_WTHLVL, //LOC = P102;//ИМПУЛЬСЫ УПРАВЛЕНИЯ EL7156 off-11V, on-8V//======================CCD DALSA FTF5066C output wire CR, //LOC = P103; output reg TGZ, //LOC = P100; output reg TGY, //LOC = P96; output reg TGX, //LOC = P80; output reg TGW, //LOC = P76; output reg A1T, //LOC = P99; output reg A2T, //LOC = P93; output reg A3T, //LOC = P94; output reg A4T, //LOC = P97; output reg A1B, //LOC = P77; output reg A2B, //LOC = P90; output reg A3B, //LOC = P89; output reg A4B, //LOC = P78; output reg C1X, //LOC = P68; output reg C2X, //LOC = P69; output reg C3X, //LOC = P65; output reg C1W, //LOC = P62; output reg C2W, //LOC = P63; output reg C3W, //LOC = P64; output reg SG, //LOC = P74; output reg RG, //LOC = P75; // ADC output reg CDSCLK1,//фиксация уровня output reg CDSCLK2,//выборка output reg ADCCLK, //тактирование output reg REGWR, // out output reg frame, output reg header, output reg [7:0]header_data, output reg header_clock);reg [7:0] buffer;reg [12:0] pix;// кол-во пикселей в строкеreg [15:0] row;// кол-во строк в кадре//reg [25:0]cr_; // Charge Reset (CR) pulse on VNS.//=======================================11always @ (posedge clock)begin if ( f2hReady ) begin if (buffer == 11) begin // new tick if (pix == 5149)// кол-во пикселей в строке 100+9+20+4+4992+4+20 = 5149 begin if (row == 6703) // кол-во строк в кадре 6703 begin // wait if (transport == 1'b1) begin row <= 0; //cr_ <= 0; end end else begin // new line pix <= 0; row <= row + 1; buffer <= 0; end end else begin // new pixel pix <= pix + 1; //cr_ <= cr_ + 1;//Charge Reset (CR) pulse on VNS buffer <= 0; end end else begin buffer <= buffer + 1; end endendwire SSC = !((pix > 0) && (pix <= 100)); // 0,688 wire SSC_ADC = !((pix > 0) && (pix <= 96)); // 0,684 пропускаем 4 такта ацпwire SSC_CCD = !((pix > 0) && (pix <= 100)); // 0,688 //импульсы вертикального переноса заряда 776 Гц //при накоплении выставляем 8 вольт, а при переносе пульсируем - с ампл. 11 вольтwire TG_A1 = integration ? 1'b0 : transport ? (pix >= 30) && (pix <= 80) : 1'b0 ; //188,501wire A2 = integration ? 1'b1 : transport ? !((pix >= 20) && (pix <= 50)): 1'b0 ; //125,313wire A3 = integration ? 1'b1 : transport ? !((pix >= 40) && (pix <= 70)): 1'b0 ; //250,438wire A4 = integration ? 1'b1 : transport ? !((pix >= 60) && (pix <= 90)): 1'b0 ; //375,563// CR <= !(cr_ >= 0 && cr_ <= 687); //LOC = P103; Charge Reset (CR) pulse on VNS. assign CR = CR_IN; //LOC = P103; Charge Reset (CR) pulse on VNS. assign PWRTGDRW_MAX618 = !power_MAX618; //подача питания на драйверы MAX618 pin190// при накоплении заряда устанавливаем 8 вольт, а при переносе 11 вольт.assign V_DRIVE11 = integration ; //8V - накопление заряда, 11V - вертикальный перенос pin164assign TD_WTHLVL = integration || SSC; //переключатель напр.11/8 вольт на EL7156. pin102assign PWRTGDRW = transport ; //подача питания на драйверы гориз.переноса pin189 //====================== CCD DALSA FTF5066C ===================================================always @ (posedge clock) // по фронту тактового импульса begin//================== ВЕРТИКАЛЬНЫЙ ПЕРЕНОС 776 Гц ============================================== TGZ <= TG_A1; //LOC = P100;Image Clock Transfer Gate(Phase 1) TGY <= TG_A1; //LOC = P96; TGX <= TG_A1; //LOC = P80; TGW <= TG_A1; //LOC = P76; //TOP A1T <= TG_A1; //LOC = P99; Image Clock (Phase 1) A2T <= A2; //LOC = P93; Image Clock (Phase 2) A3T <= A3; //LOC = P94; Image Clock (Phase 3) A4T <= A4; //LOC = P97; Image Clock (Phase 4)//BOT A1B <= TG_A1; //LOC = P77; Image Clock (Phase 1) A2B <= A2; //LOC = P90; Image Clock (Phase 2) A3B <= A3; //LOC = P89; Image Clock (Phase 3) A4B <= A4; //LOC = P78; Image Clock (Phase 4) ///================== ГОРИЗОНТАЛЬНЫЙ ПЕРЕНОС 4 МГц ============================================ RG <= buffer == 0 && SSC_CCD; //LOC = P75; Reset Gate SG <= buffer < 6 && SSC_CCD; //LOC = P74; Summing Gate //LEFT (SINGLE OUTPUT Left C1 C2 C3) //RIGHT (SINGLE OUTPUT Right C2 C1 C3) C1W <= !((buffer < 4 || buffer > 9 ) && SSC_CCD);//LOC = P62; Register Clock (Phase 1) C2W <= !(!( buffer < 2 || buffer > 7 ) && SSC_CCD);//LOC = P63; Register Clock (Phase 2) C3W <= buffer < 6 && SSC_CCD; //LOC = P64; Register Clock (Phase 3) C1X <= !((buffer < 4 || buffer > 9 ) && SSC_CCD); //LOC = P68; Register Clock (Phase 1) C2X <= !(!(buffer < 2 || buffer > 7 ) && SSC_CCD); //LOC = P69; Register Clock (Phase 2) C3X <= buffer < 6 && SSC_CCD; //LOC = P65; Register Clock (Phase 3) ///=============================================================================================== frame <= SSC; //SSC header_clock <= buffer == 0 && pix >= 91 && pix <= 100; header <= pix >= 91 && pix <= 100; //8 бит заголовка строки ///=============================================================================================== case (pix) 91: header_data <= 8'h01; //01 заголовок маркера 92: header_data <= 8'h02; //02 заголовок маркера 93: header_data <= row[15:8]; //ст.байт номер строки 94: header_data <= row[7:0]; //мл.байт номер строки 95: header_data <= data_msb[7:0]; //ст.байт Т.Пельтье 96: header_data <= data_lsb[7:0]; //мл.байт Т.Пельтье 97: header_data <= data_gain[5:0]; //усиление АЦП 98: header_data <= data_offset[7:0]; //смещение АЦП default: header_data <= 8'h00; endcase ///===== тактирование ацп. HB,LB 16 bit ===================================================== case (buffer) 2: CDSCLK1 <= SSC_ADC; //==> импульс фиксации уровня чёрного default: CDSCLK1 <= 1'b0; endcase case (buffer) 7,8: CDSCLK2 <= SSC_ADC; //==> импульс выборки значения яркости пикселя default: CDSCLK2 <= 1'b0; endcase case (buffer) 0,1,8,9,10,11: //==> меандр, такт АЦП ADCCLK <= SSC_ADC; default: ADCCLK <= 1'b0; endcase end///=================================================================================always @ (negedge clock) // по спаду тактового импульса begin case (buffer) 5,11: //удвоенная частота //==> такт записи данных в FX2 REGWR <= SSC_ADC; default: REGWR <= 1'b0; endcase end///================================================================================= initial begin buffer = 11; pix = 5149;// row = 6703; //cr_ = 0; endendmodule
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Description: Time generator 2 MHz for DALSA CCD FTF5066C//reg1[1] byte=0x02;//подача питания на MAX618//reg1[2] byte=0x04;//управление накоплением заряда//reg1[3] byte=0x08;//управление экспозицией//////////////////////////////////////////////////////////////////////////////////module FTF5066C_2 /*#(parameter BASE = 0)*/( // Clock input wire clock, input wire f2hReady, input wire [5:0]data_gain,//<===== input wire [7:0]data_offset,//<===== input wire [7:0]data_msb, input wire [7:0]data_lsb, // Config input wire CR_IN,//<== перед открытием затвора и началом накопления заряда разряжаем матрицу импульсом CR input wire power_MAX618,//<== подача питания на MAX618(reg1[1]) input wire integration, //<== накопление пикселей(reg1[2]) input wire transport, //<== перенос заряда в хост(reg1[3]) // CCD output wire PWRTGDRW_MAX618,//LOC = P190;//УПРАВЛЕНИЕ ПИТАНИЕМ MAX618 output wire V_DRIVE11, //LOC = P164;//УПРАВЛЕНИЕ ПИТАНИЕМ 1 включить 11 вольт output wire PWRTGDRW, //LOC = P189;//УПРАВЛЕНИЕ ПИТАНИЕМ 2 SN74LVC1T45 output wire TD_WTHLVL, //LOC = P102;//ИМПУЛЬСЫ УПРАВЛЕНИЯ EL7156 off-11V, on-8V//======================CCD DALSA FTF5066C output wire CR, //LOC = P103; output reg TGZ, //LOC = P100; output reg TGY, //LOC = P96; output reg TGX, //LOC = P80; output reg TGW, //LOC = P76; output reg A1T, //LOC = P99; output reg A2T, //LOC = P93; output reg A3T, //LOC = P94; output reg A4T, //LOC = P97; output reg A1B, //LOC = P77; output reg A2B, //LOC = P90; output reg A3B, //LOC = P89; output reg A4B, //LOC = P78; output reg C1X, //LOC = P68; output reg C2X, //LOC = P69; output reg C3X, //LOC = P65; output reg C1W, //LOC = P62; output reg C2W, //LOC = P63; output reg C3W, //LOC = P64; output reg SG, //LOC = P74; output reg RG, //LOC = P75; // ADC output reg CDSCLK1,//фиксация уровня output reg CDSCLK2,//выборка output reg ADCCLK, //тактирование output reg REGWR, // out output reg frame, output reg header, output reg [7:0]header_data, output reg header_clock);reg [7:0] buffer;reg [12:0] pix;// кол-во пикселей в строкеreg [15:0] row;// кол-во строк в кадре//reg [25:0]cr_; // Charge Reset (CR) pulse on VNS.always @ (posedge clock)begin if ( f2hReady ) begin if (buffer == 23) begin // new tick if (pix == 5149)// кол-во пикселей в строке 100+9+20+4+4992+4+20 = 5149 begin if (row == 6703) // кол-во строк в кадре 6703 begin // wait if (transport == 1'b1) begin row <= 0; //cr_ <= 0; end end else begin // new line pix <= 0; row <= row + 1; buffer <= 0; end end else begin // new pixel pix <= pix + 1; //cr_ <= cr_ + 1;//Charge Reset (CR) pulse on VNS buffer <= 0; end end else begin buffer <= buffer + 1; end endendwire SSC = !((pix > 0) && (pix <= 100)); // 0,688 wire SSC_ADC = !((pix > 0) && (pix <= 96)); // 0,684 пропускаем 4 такта ацпwire SSC_CCD = !((pix > 0) && (pix <= 100)); // 0,688 //импульсы вертикального переноса заряда 388 Гц //при накоплении выставляем 8 вольт, а при переносе пульсируем - с ампл. 11 вольтwire TG_A1 = integration ? 1'b0 : transport ? (pix >= 30) && (pix <= 80) : 1'b0 ; //188,501wire A2 = integration ? 1'b1 : transport ? !((pix >= 20) && (pix <= 50)): 1'b0 ; //125,313wire A3 = integration ? 1'b1 : transport ? !((pix >= 40) && (pix <= 70)): 1'b0 ; //250,438wire A4 = integration ? 1'b1 : transport ? !((pix >= 60) && (pix <= 90)): 1'b0 ; //375,563// CR <= !(cr_ >= 0 && cr_ <= 687); //LOC = P103; Charge Reset (CR) pulse on VNS. assign CR = CR_IN; //LOC = P103; Charge Reset (CR) pulse on VNS. assign PWRTGDRW_MAX618 = !power_MAX618; //подача питания на драйверы MAX618 pin190// при накоплении заряда устанавливаем 8 вольт, а при переносе 11 вольт.assign V_DRIVE11 = integration ; //8V - накопление заряда, 11V - вертикальный перенос pin164assign TD_WTHLVL = integration ;//|| SSC; //переключатель напр.11/8 вольт на EL7156. pin102assign PWRTGDRW = transport ; //подача питания на драйверы гориз.переноса pin189 //====================== CCD DALSA FTF5066C ===================================================always @ (posedge clock) begin//================== ВЕРТИКАЛЬНЫЙ ПЕРЕНОС 348 Гц ============================================== TGZ <= TG_A1; //LOC = P100;Image Clock Transfer Gate(Phase 1) TGY <= TG_A1; //LOC = P96; TGX <= TG_A1; //LOC = P80; TGW <= TG_A1; //LOC = P76; //TOP A1T <= TG_A1; //LOC = P99; Image Clock (Phase 1) A2T <= A2; //LOC = P93; Image Clock (Phase 2) A3T <= A3; //LOC = P94; Image Clock (Phase 3) A4T <= A4; //LOC = P97; Image Clock (Phase 4)//BOT A1B <= TG_A1; //LOC = P77; Image Clock (Phase 1) A2B <= A2; //LOC = P90; Image Clock (Phase 2) A3B <= A3; //LOC = P89; Image Clock (Phase 3) A4B <= A4; //LOC = P78; Image Clock (Phase 4) ///================== ГОРИЗОНТАЛЬНЫЙ ПЕРЕНОС 2 МГц ============================================ RG <= buffer == 0 && SSC_CCD; //LOC = P75; Reset Gate SG <= buffer < 12 && SSC_CCD; //LOC = P74; Summing Gate //LEFT (SINGLE OUTPUT Left C1 C2 C3) //RIGHT (SINGLE OUTPUT Right C2 C1 C3) C1W <= !((buffer < 8 || buffer > 19) && SSC_CCD);//LOC = P62; Register Clock (Phase 1) C2W <= !(!(buffer < 4 || buffer > 15) && SSC_CCD);//LOC = P63; Register Clock (Phase 2) C3W <= buffer < 12 && SSC_CCD; //LOC = P64; Register Clock (Phase 3) C1X <= !((buffer < 8 || buffer > 19) && SSC_CCD);//LOC = P68; Register Clock (Phase 1) C2X <= !(!(buffer < 4 || buffer > 15) && SSC_CCD);//LOC = P69; Register Clock (Phase 2) C3X <= buffer < 12 && SSC_CCD; //LOC = P65; Register Clock (Phase 3) ///=============================================================================================== frame <= SSC; //SSC header_clock <= buffer == 0 && pix >= 91 && pix <= 100; header <= pix >= 91 && pix <= 100; //8 бит заголовка строки ///=============================================================================================== case (pix) 91: header_data <= 8'h01; //01 заголовок маркера 92: header_data <= 8'h02; //02 заголовок маркера 93: header_data <= row[15:8]; //ст.байт номер строки 94: header_data <= row[7:0]; //мл.байт номер строки 95: header_data <= data_msb[7:0]; //ст.байт Т.Пельтье 96: header_data <= data_lsb[7:0]; //мл.байт Т.Пельтье 97: header_data <= data_gain[5:0]; //усиление АЦП 98: header_data <= data_offset[7:0]; //смещение АЦП default: header_data <= 8'h00; endcase ///===== тактирование ацп.HB,LB 16 bit =========================================== case (buffer) 7: CDSCLK1 <= SSC_ADC; //==> импульс фиксации default: CDSCLK1 <= 1'b0; endcase case (buffer) 18,19: CDSCLK2 <= SSC_ADC; //==> импульс выборки default: CDSCLK2 <= 1'b0; endcase case (buffer) 19,20,21,22,23,0,1,2,3,4,5,6: //меандр takt АЦП ADCCLK <= SSC_ADC; default: ADCCLK <= 1'b0; endcase end///================================================================================= always @ (negedge clock) // по спаду тактового импульса begin case (buffer) 11,22: //удвоенная частота //==> такт записи данных в FX2 REGWR <= SSC_ADC; default: REGWR <= 1'b0; endcase end///=================================================================================initial begin buffer = 23; pix = 5149;// row = 6703; //cr_ = 0; endendmodule
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Description: Time generator 1 MHz for DALSA CCD FTF5066C//reg1[1] byte=0x02;//подача питания на MAX618//reg1[2] byte=0x04;//управление накоплением заряда//reg1[3] byte=0x08;//управление экспозицией//////////////////////////////////////////////////////////////////////////////////module FTF5066C_1 /*#(parameter BASE = 0)*/( // Clock input wire clock, input wire f2hReady, input wire [5:0]data_gain,//<===== input wire [7:0]data_offset,//<===== input wire [7:0]data_msb, input wire [7:0]data_lsb, // Config input wire CR_IN,//<== перед открытием затвора и началом накопления заряда разряжаем матрицу импульсом CR input wire power_MAX618,//<== подача питания на MAX618(reg1[1]) input wire integration, //<== накопление пикселей(reg1[2]) input wire transport, //<== перенос заряда в хост(reg1[3]) // CCD output wire PWRTGDRW_MAX618,//LOC = P190;//УПРАВЛЕНИЕ ПИТАНИЕМ MAX618 output wire V_DRIVE11, //LOC = P164;//УПРАВЛЕНИЕ ПИТАНИЕМ 1 включить 11 вольт output wire PWRTGDRW, //LOC = P189;//УПРАВЛЕНИЕ ПИТАНИЕМ 2 SN74LVC1T45 output wire TD_WTHLVL, //LOC = P102;//ИМПУЛЬСЫ УПРАВЛЕНИЯ EL7156 off-11V, on-8V//======================CCD DALSA FTF5066C output wire CR, //LOC = P103; output reg TGZ, //LOC = P100; output reg TGY, //LOC = P96; output reg TGX, //LOC = P80; output reg TGW, //LOC = P76; output reg A1T, //LOC = P99; output reg A2T, //LOC = P93; output reg A3T, //LOC = P94; output reg A4T, //LOC = P97; output reg A1B, //LOC = P77; output reg A2B, //LOC = P90; output reg A3B, //LOC = P89; output reg A4B, //LOC = P78; output reg C1X, //LOC = P68; output reg C2X, //LOC = P69; output reg C3X, //LOC = P65; output reg C1W, //LOC = P62; output reg C2W, //LOC = P63; output reg C3W, //LOC = P64; output reg SG, //LOC = P74; output reg RG, //LOC = P75; // ADC output reg CDSCLK1,//фиксация уровня output reg CDSCLK2,//выборка output reg ADCCLK, //тактирование output reg REGWR, // out output reg frame, output reg header, output reg [7:0]header_data, output reg header_clock);reg [7:0] buffer;reg [12:0] pix;// кол-во пикселей в строкеreg [15:0] row;// кол-во строк в кадре//reg [25:0]cr_; // Charge Reset (CR) pulse on VNS.always @ (posedge clock)begin if ( f2hReady ) begin if (buffer == 47) begin // new tick if (pix == 5149)// кол-во пикселей в строке 100+9+20+4+4992+4+20 = 5149 begin if (row == 6703) // кол-во строк в кадре 6703 begin // wait if (transport == 1'b1) begin row <= 0; //cr_ <= 0; end end else begin // new line pix <= 0; row <= row + 1; buffer <= 0; end end else begin // new pixel pix <= pix + 1; //cr_ <= cr_ + 1;//Charge Reset (CR) pulse on VNS buffer <= 0; end end else begin buffer <= buffer + 1; end endendwire SSC = !((pix > 0) && (pix <= 100)); // 0,688 wire SSC_ADC = !((pix > 0) && (pix <= 96)); // 0,684 пропускаем 4 такта ацпwire SSC_CCD = !((pix > 0) && (pix <= 100)); // 0,688 //импульсы вертикального переноса заряда 776 Гц //при накоплении выставляем 8 вольт, а при переносе пульсируем - с ампл. 11 вольтwire TG_A1 = integration ? 1'b0 : transport ? (pix >= 30) && (pix <= 80) : 1'b0 ; //188,501wire A2 = integration ? 1'b1 : transport ? !((pix >= 20) && (pix <= 50)): 1'b0 ; //125,313wire A3 = integration ? 1'b1 : transport ? !((pix >= 40) && (pix <= 70)): 1'b0 ; //250,438wire A4 = integration ? 1'b1 : transport ? !((pix >= 60) && (pix <= 90)): 1'b0 ; //375,563// CR <= !(cr_ >= 0 && cr_ <= 687); //LOC = P103; Charge Reset (CR) pulse on VNS. assign CR = CR_IN; //LOC = P103; Charge Reset (CR) pulse on VNS. assign PWRTGDRW_MAX618 = !power_MAX618; //подача питания на драйверы MAX618 pin190// при накоплении заряда устанавливаем 8 вольт, а при переносе 11 вольт.assign V_DRIVE11 = integration ; //8V - накопление заряда, 11V - вертикальный перенос pin164assign TD_WTHLVL = integration ;//|| SSC; //переключатель напр.11/8 вольт на EL7156. pin102assign PWRTGDRW = transport ; //подача питания на драйверы гориз.переноса pin189 //====================== CCD DALSA FTF5066C ===================================================always @ (posedge clock) begin//================== ВЕРТИКАЛЬНЫЙ ПЕРЕНОС 50 кГц ============================================== TGZ <= TG_A1; //LOC = P100;Image Clock Transfer Gate(Phase 1) TGY <= TG_A1; //LOC = P96; TGX <= TG_A1; //LOC = P80; TGW <= TG_A1; //LOC = P76; //TOP A1T <= TG_A1; //LOC = P99; Image Clock (Phase 1) A2T <= A2; //LOC = P93; Image Clock (Phase 2) A3T <= A3; //LOC = P94; Image Clock (Phase 3) A4T <= A4; //LOC = P97; Image Clock (Phase 4)//BOT A1B <= TG_A1; //LOC = P77; Image Clock (Phase 1) A2B <= A2; //LOC = P90; Image Clock (Phase 2) A3B <= A3; //LOC = P89; Image Clock (Phase 3) A4B <= A4; //LOC = P78; Image Clock (Phase 4) ///================== ГОРИЗОНТАЛЬНЫЙ ПЕРЕНОС 25МГц ============================================ RG <= buffer == 0 && SSC_CCD; //LOC = P75; Reset Gate SG <= buffer < 24 && SSC_CCD; //LOC = P74; Summing Gate //LEFT (SINGLE OUTPUT Left C1 C2 C3) //RIGHT (SINGLE OUTPUT Right C2 C1 C3) C1W <= !((buffer < 16 || buffer > 39) && SSC_CCD);//LOC = P62; Register Clock (Phase 1) C2W <= !(!(buffer < 8 || buffer > 31) && SSC_CCD);//LOC = P63; Register Clock (Phase 2) C3W <= buffer < 24 && SSC_CCD; //LOC = P64; Register Clock (Phase 3) C1X <= !((buffer < 16 || buffer > 39) && SSC_CCD);//LOC = P68; Register Clock (Phase 1) C2X <= !(!(buffer < 8 || buffer > 31) && SSC_CCD);//LOC = P69; Register Clock (Phase 2) C3X <= buffer < 24 && SSC_CCD; //LOC = P65; Register Clock (Phase 3) ///=============================================================================================== frame <= SSC; //SSC header_clock <= buffer == 0 && pix >= 91 && pix <= 100; header <= pix >= 91 && pix <= 100; //8 бит заголовка строки ///=============================================================================================== case (pix) 91: header_data <= 8'h01; //01 заголовок маркера 92: header_data <= 8'h02; //02 заголовок маркера 93: header_data <= row[15:8]; //ст.байт номер строки 94: header_data <= row[7:0]; //мл.байт номер строки 95: header_data <= data_msb[7:0]; //ст.байт Т.Пельтье 96: header_data <= data_lsb[7:0]; //мл.байт Т.Пельтье 97: header_data <= data_gain[5:0]; //усиление АЦП 98: header_data <= data_offset[7:0]; //смещение АЦП default: header_data <= 8'h00; endcase ///===== тактирование ацп. HB,LB 16 bit ============================================ case (buffer) 16: CDSCLK1 <= SSC_ADC; //==> импульс фиксации default: CDSCLK1 <= 1'b0; endcase case (buffer) 39,40: CDSCLK2 <= SSC_ADC; //==> импульс выборки default: CDSCLK2 <= 1'b0; endcase case (buffer) 40,41,42,43,44,45,46,47,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15://меандр ADCCLK <= SSC_ADC; //==> тактирование ацп default: ADCCLK <= 1'b0; endcase ///================================================================================= endalways @ (negedge clock) // по спаду тактового импульса begin case (buffer) 22,46: //удвоенная частота //==> такт записи данных в FX2 REGWR <= SSC_ADC; default: REGWR <= 1'b0; endcase end///=================================================================================initial begin buffer = 47; pix = 5149;// row = 6703; //cr_ = 0; endendmodule
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Description: Time generator 8 MHz for DALSA CCD FTF5066C//reg1[1] byte=0x02;//подача питания на MAX618//reg1[2] byte=0x04;//управление накоплением заряда//reg1[3] byte=0x08;//управление экспозицией//////////////////////////////////////////////////////////////////////////////////module FTF5066C_8 /*#(parameter BASE = 0)*/( // Clock input wire clock, input wire f2hReady, input wire [5:0]data_gain,//<===== input wire [7:0]data_offset,//<===== input wire [7:0]data_msb, input wire [7:0]data_lsb, // Config input wire CR_IN,//<== перед открытием затвора и началом накопления заряда разряжаем матрицу импульсом CR input wire power_MAX618,//<== подача питания на MAX618(reg1[1]) input wire integration, //<== накопление пикселей(reg1[2]) input wire transport, //<== перенос заряда в хост(reg1[3]) // CCD output wire PWRTGDRW_MAX618,//LOC = P190;//УПРАВЛЕНИЕ ПИТАНИЕМ MAX618 output wire V_DRIVE11, //LOC = P164;//УПРАВЛЕНИЕ ПИТАНИЕМ 1 включить 11 вольт output wire PWRTGDRW, //LOC = P189;//УПРАВЛЕНИЕ ПИТАНИЕМ 2 SN74LVC1T45 output wire TD_WTHLVL, //LOC = P102;//ИМПУЛЬСЫ УПРАВЛЕНИЯ EL7156 off-11V, on-8V//======================CCD DALSA FTF5066C output wire CR, //LOC = P103; output reg TGZ, //LOC = P100; output reg TGY, //LOC = P96; output reg TGX, //LOC = P80; output reg TGW, //LOC = P76; output reg A1T, //LOC = P99; output reg A2T, //LOC = P93; output reg A3T, //LOC = P94; output reg A4T, //LOC = P97; output reg A1B, //LOC = P77; output reg A2B, //LOC = P90; output reg A3B, //LOC = P89; output reg A4B, //LOC = P78; output reg C1X, //LOC = P68; output reg C2X, //LOC = P69; output reg C3X, //LOC = P65; output reg C1W, //LOC = P62; output reg C2W, //LOC = P63; output reg C3W, //LOC = P64; output reg SG, //LOC = P74; output reg RG, //LOC = P75; // ADC output reg CDSCLK1,//фиксация уровня output reg CDSCLK2,//выборка output reg ADCCLK, //тактирование output reg REGWR, // out output reg frame, output reg header, output reg [7:0]header_data, output reg header_clock);reg [7:0] buffer;reg [12:0] pix;// кол-во пикселей в строкеreg [15:0] row;// кол-во строк в кадре//============================================5always @ (posedge clock)begin if ( f2hReady ) begin if (buffer == 5) begin // new tick if (pix == 5149)// кол-во пикселей в строке 100+9+20+4+4992+4+20 = 5149 begin if (row == 6703) // кол-во строк в кадре 6703 begin // wait if (transport == 1'b1) begin row <= 0; end end else begin // new line pix <= 0; row <= row + 1; buffer <= 0; end end else begin // new pixel pix <= pix + 1; buffer <= 0; end end else begin buffer <= buffer + 1; end endendwire SSC = !((pix > 0) && (pix <= 100)); // 0,100 wire SSC_ADC = !((pix > 0) && (pix <= 96)); // 0,96 пропускаем 4 такта ацпwire SSC_CCD = !((pix > 0) && (pix <= 100)); // 0,100 //импульсы вертикального переноса заряда 1552 Гц //при накоплении выставляем 8 вольт, а при переносе пульсируем - с ампл. 11 вольтwire TG_A1 = integration ? 1'b0 : transport ? (pix >= 30) && (pix <= 80) : 1'b0 ; //188,501wire A2 = integration ? 1'b1 : transport ? !((pix >= 20) && (pix <= 50)): 1'b0 ; //125,313wire A3 = integration ? 1'b1 : transport ? !((pix >= 40) && (pix <= 70)): 1'b0 ; //250,438wire A4 = integration ? 1'b1 : transport ? !((pix >= 60) && (pix <= 90)): 1'b0 ; //375,563// CR <= !(cr_ >= 0 && cr_ <= 687); //LOC = P103; Charge Reset (CR) pulse on VNS. assign CR = CR_IN; //LOC = P103; Charge Reset (CR) pulse on VNS. assign PWRTGDRW_MAX618 = !power_MAX618; //подача питания на драйверы MAX618 pin190// при накоплении заряда устанавливаем 8 вольт, а при переносе 11 вольт.assign V_DRIVE11 = integration ; //8V - накопление заряда, 11V - вертикальный перенос pin164assign TD_WTHLVL = integration ;//|| SSC; //переключатель напр.11/8 вольт на EL7156. pin102assign PWRTGDRW = transport ; //подача питания на драйверы гориз.переноса pin189 //====================== CCD DALSA FTF5066C ===================================================always @ (posedge clock) begin//================== ВЕРТИКАЛЬНЫЙ ПЕРЕНОС 1552 Гц ============================================== TGZ <= TG_A1; //LOC = P100;Image Clock Transfer Gate(Phase 1) TGY <= TG_A1; //LOC = P96; TGX <= TG_A1; //LOC = P80; TGW <= TG_A1; //LOC = P76; //TOP A1T <= TG_A1; //LOC = P99; Image Clock (Phase 1) A2T <= A2; //LOC = P93; Image Clock (Phase 2) A3T <= A3; //LOC = P94; Image Clock (Phase 3) A4T <= A4; //LOC = P97; Image Clock (Phase 4)//BOT A1B <= TG_A1; //LOC = P77; Image Clock (Phase 1) A2B <= A2; //LOC = P90; Image Clock (Phase 2) A3B <= A3; //LOC = P89; Image Clock (Phase 3) A4B <= A4; //LOC = P78; Image Clock (Phase 4) ///================== ГОРИЗОНТАЛЬНЫЙ ПЕРЕНОС 8 МГц ============================================ RG <= (buffer == 0) && SSC_CCD; //LOC = P75; Reset Gate case(buffer) 0,1,2: SG <= SSC_CCD; //LOC = P74; Summing Gate default: SG <= 1'b0;endcase //LEFT (SINGLE OUTPUT Left C1 C2 C3) //RIGHT (SINGLE OUTPUT Right C2 C1 C3) case(buffer) 0,1,5: C1W <= !SSC_CCD && pix<=99;//LOC = P62; Register Clock (Phase 1) default: C1W <= 1'b1; endcase case(buffer) 1,2,3: C2W <= !SSC_CCD;//LOC = P63; Register Clock (Phase 2) default: C2W <= 1'b1; endcase case(buffer) 0,1,2: C3W <= SSC_CCD; //LOC = P64; Register Clock (Phase 3) default: C3W <= 1'b0; endcase case(buffer) 0,1,5: C1X <= !SSC_CCD && pix<=99;//LOC = P68; Register Clock (Phase 1) default: C1X <= 1'b1; endcase case(buffer) 1,2,3: C2X <= !SSC_CCD; //LOC = P69; Register Clock (Phase 2) default: C2X <= 1'b1; endcase case(buffer) 0,1,2: C3X <= SSC_CCD;//LOC = P65; Register Clock (Phase 3) default: C3X <= 1'b0; endcase///=============================================================================================== frame <= SSC; //SSC header_clock <= buffer == 0 && pix >= 91 && pix <= 100; header <= pix >= 91 && pix <= 100; //8 бит заголовка строки ///=============================================================================================== case (pix) 91: header_data <= 8'h01; //01 заголовок маркера 92: header_data <= 8'h02; //02 заголовок маркера 93: header_data <= row[15:8]; //ст.байт номер строки 94: header_data <= row[7:0]; //мл.байт номер строки 95: header_data <= data_msb[7:0]; //ст.байт Т.Пельтье 96: header_data <= data_lsb[7:0]; //мл.байт Т.Пельтье 97: header_data <= data_gain[5:0]; //усиление АЦП 98: header_data <= data_offset[7:0]; //смещение АЦП default: header_data <= 8'h00; endcase ///===== тактирование ацп. HB,LB 16 bit ============================================== case (buffer) 1: CDSCLK1 <= SSC_ADC; //==> импульс фиксации default: CDSCLK1 <= 1'b0; endcase case (buffer) 3,4: CDSCLK2 <= SSC_ADC; //==> импульс выборки default: CDSCLK2 <= 1'b0; endcase case (buffer) 4,5,0: ADCCLK <= SSC_ADC; //==> меандр такт ацп default: ADCCLK <= 1'b0; endcase end ///================================================================================= always @ (negedge clock) // по спаду тактового импульса begin case (buffer) 2,5: //удвоенная частота //==> такт записи данных в FX2 REGWR <= SSC_ADC; default: REGWR <= 1'b0; endcase end///================================================================================= initial begin buffer = 5; pix = 5149;// row = 6703; end endmodule
Сигналы frame/header - зачем нужны?
frame как раз и служит границей для импульсов гор. сдвига, но сдвинуть его на пол-периода ну никак не получаается, только на целый можно.хотя есть идея формировать его не по фронту клока, а по спаду. дома проверю.