ВНИМАНИЕ! На форуме начался конкурс - астрофотография месяца - ИЮЛЬ!
0 Пользователей и 1 Гость просматривают эту тему.
Диаграмма в симуляторе вроде та. Почему в железе не срабатывает, другой вопрос. Диаграмма несложная, способ должен быть. Фрагмент верилога замысловатый, красивым и понятным не назвать, но, видимо, на то какие-то свои причины были. Иногда бывает надобность впихнуть невпихуемое. А духу Гаусса недалеко лететь
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Description: Time generator 1MHz 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 [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, //тактирование // 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.reg [25:0]pix_; //always @ (posedge clock)begin if (buffer == 47) begin // new tick if (pix == 5737)// кол-во пикселей в строке 688+9+20+4+4992+4+20 = 5737 begin if (row == 6703) // кол-во строк в кадре 6703 begin // wait if (transport == 1'b1) begin row <= 0; pix_ <= 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; pix_ <= pix_ + 1; //cr_ <= cr_ + 1;//Charge Reset (CR) pulse on VNS buffer <= 0; end end else begin buffer <= buffer + 1; endendwire SSC = !((pix > 0) && (pix <= 688)); // 0,688wire SSC_ADC = !((pix > 0) && (pix <= 684)); // 0,684 пропускаем 4 такта ацпwire SSC_CCD = !((pix > 0) && (pix <= 688)); // 0,688 //импульсы вертикального переноса заряда 50кГц //при накоплении выставляем 8 вольт, а при переносе пульсируем - с ампл. 11 вольтwire TG_A1 = integration ? 1'b0 : transport ? (pix >= 188) && (pix <= 501) : 1'b0 ; //188,501wire A2 = integration ? 1'b1 : transport ? !((pix >= 125) && (pix <= 313)) : 1'b0 ; //125,313wire A3 = integration ? 1'b1 : transport ? !((pix >= 250) && (pix <= 438)) : 1'b0 ; //250,438wire A4 = integration ? 1'b1 : transport ? !((pix >= 375) && (pix <= 563)) : 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) ///================== ГОРИЗОНТАЛЬНЫЙ ПЕРЕНОС 1 МГц ============================================ 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 && !SSC; header <= pix >= 380 && pix <= 391; //8 byte 380-391 ///=============================================================================================== case (pix) 380: header_data <= 8'h01; //01 заголовок маркера 381: header_data <= 8'h02; //02 заголовок маркера 382: header_data <= row[15:8]; //ст.байт номер строки 383: header_data <= row[7:0]; //мл.байт номер строки 384: header_data <= data_msb[7:0]; //ст.байт Т.Пельтье 385: header_data <= data_lsb[7:0]; //мл.байт Т.Пельтье 386: header_data <= data_gain[5:0]; //усиление АЦП 387: header_data <= data_offset[7:0]; //смещение АЦП 388: header_data <= 8'h00; 389: header_data <= 8'h00; 390: header_data <= 8'h00; 391: header_data <= 8'h00; endcase ///===== тактирование ацп. ========================================================= CDSCLK1 <= buffer >= 20 && buffer <= 21 && SSC_ADC; //==> импульс фиксации CDSCLK2 <= buffer >= 42 && buffer <= 45 && SSC_ADC; //==> импульс выборки ADCCLK <= !(buffer < 45 || buffer > 46) && SSC_ADC; //==> HB,LB 16 bit короткий импульс. ОК //ADCCLK <= (buffer < 20 || buffer > 43) && SSC_ADC; //==> HB,LB 16 bit меандр. приложение падает///================================================================================= endinitial begin buffer = 47; pix = 5737;// row = 6703; pix_ = 0; //cr_ = 0; endendmodule
вот так же должны быть совмещены импульсы
Все-таки попробуйте сначала без матрицы. Просто постоянный уровень.
///===== тактирование ацп. =========================================================case (buffer) 20,21: CDSCLK1 <= SSC_ADC; //==> импульс фиксации default: CDSCLK1 <= 1'b0; endcase case (buffer) 43,44,45: CDSCLK2 <= SSC_ADC; //==> импульс выборки default: CDSCLK2 <= 1'b0; endcase case (buffer) 45,46: ADCCLK <= SSC_ADC; //==> HB,LB 16 bit короткий импульс. ОК default: ADCCLK <= 1'b0; endcase ///=================================================================================
Цитата: Майоров Виктор от 01 Дек 2015 [21:51:23]Все-таки попробуйте сначала без матрицы. Просто постоянный уровень.попробовал . СКО == 0. если не считать мелких брызг.
но в плане каких-то изменений , ничего не превнёс. кроме красоты, в чём его преимущество?
не знаю как, но у меня вот такое получилось
на входе ничего, сигнал от матрицы,оффсет=0, усиление ==55 , но затвор закрыт.приложение, которым я камерой управляю, самописное на визуале си++
Я поначалу думал, что компилятор верилога падает, или с FPGA что-то не то, если прошивку приложением назвать.
вобщем с указанными настройками , усиление 0 и смещение 255,правый конец входного кондёра посажен на землю.основная масса пикселей имеет значение в районе 08В4, некоторые 14В1
Цитата: Andreichk от 02 Дек 2015 [01:58:35]вобщем с указанными настройками , усиление 0 и смещение 255,правый конец входного кондёра посажен на землю.основная масса пикселей имеет значение в районе 08В4, некоторые 14В1Что-то не складывается понимание. В окошке Screen Stretch гистограмма обрывается рядом с 192, т. е. max 00C0 или 00BF. Откуда значение в районе 08В4 ?В любом случае, это не то, что ожидается: ровное поле с легким приятным шумом.