Jump to content

    

axalay

Свой
  • Content Count

    386
  • Joined

  • Last visited

Everything posted by axalay


  1. вот ща у многих бомбанет :)))) Вот это вы подкинули на вентилятор - ай да молодца! Сам на аллегро если че
  2. если колбасит только один бит и трассы норм выровнены, то возможно непропай. У меня подобное было
  3. Нужно смотреть как выровнены линии в шинах по длине, ну а далее задержки
  4. Вам же тут выше правильно писали - важнее смотреть на рекомендации по разводке памяти самого контроллера. а не памяти. Есть контроллеры, которые вообще флайбай не потдерживают. Я разводил и ддр3 и ддр4. Если вопросы-пишите
  5. есть I2C свичи. И там даже если какой то канал выгорел, можно перестать к нему обращаться. Смотрите у техаса например
  6. Поднимем тему? Интересно решение. Сам в силовой электронике не силен Вот что то отдаленно похожее есть у линеар, но не подходит http://cds.linear.com/docs/en/datasheet/3886fd.pdf
  7. Просматривал форум и наткнулся. Одному товарищу как раз интересен второй пунт - регулируемый выход с постоянным током. К чему то автор вопроса пришел? Вообще даже интересует красивое решение, если даже 4 - 8 фиксировнных напряжений в диапазоне от 3.3 до 30 вольт. Ток вроде товарищу надо около 30 ампер
  8. вот проект. Нужен как бы десериалайзер. Цель - перевод сигналов в отрицательную логику. AC-coupling, поэтому каждый второй бит выкидывается (проще,чем 8b/10b). С латтисом работаю раз в 2 пятилетки, поэтому любую критику выслушаю skl_new_cpld.rar
  9. Микруха LCMXO3L-640E-6MG121I, В даташите написано про LVDS33. А в софте не вижу. Хочу запитать все порты одним питанием 3.3, поэтому хотел бы LVDS33. Чую, что будет работать, если укажу, что 25, а подам 3.3 вольта.... только нет права на ошибку. И еще : Timing Report Summary -------------- -------------------------------------------------------------------------------- Constraint | Constraint| Actual|Levels -------------------------------------------------------------------------------- | | | create_clock -period 5.000000 -name | | | clk0 [get_nets Clock200] | 200.000 MHz| 720.461 MHz| 1 | | | -------------------------------------------------------------------------------- Я установил IDDRXE. А по этому таймингрепорту я просто офигеваю - это такая шустрая микруха? :) В доках написано, что 400 МГц максимум, и то если LVDS25 И еще - как избавиться от таких варнингов WARNING - Skipping pad insertion on Clock_p due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Clock_n due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Frame_p due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Frame_n due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Data_p[4] due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Data_p[3] due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Data_p[2] due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Data_p[1] due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Data_p[0] due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Data_n[4] due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Data_n[3] due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Data_n[2] due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Data_n[1] due to black_box_pad_pin attribute. WARNING - Skipping pad insertion on Data_n[0] due to black_box_pad_pin attribute.
  10. вот другая реализация. Это простые делители - первый итерационный, а этот нет // Fast Array Divider 8 bit to 4 bit module fast_array_divider (a_in, d_in, q_out, r_out); input [7:0] a_in; input [3:0] d_in; output [7:0] q_out; wire [7:0] q_out; output [3:0] r_out; wire [3:0] r_out; wire [12:1] a; wire [4:1] d; wire [8:1] q; wire [8:5] r; wire c_0_3, c_0_2, c_0_1, c_0_0; wire s_0_3, s_0_2, s_0_1, s_0_0; wire q1_inv; restoring_array_divider array_0_0 ( a[2], d[1], c_0_1, q1_inv, c_0_0, s_0_0); restoring_array_divider array_0_1 ( a[3], d[2], c_0_2, q1_inv, c_0_1, s_0_1); restoring_array_divider array_0_2 ( a[4], d[3], c_0_3, q1_inv, c_0_2, s_0_2); restoring_array_divider array_0_3 ( a[5], d[4], 1'b0, q1_inv, c_0_3, s_0_3); assign q[1] = ( a[1] | !c_0_0 ); assign q1_inv=!q[1]; wire c_1_3, c_1_2, c_1_1, c_1_0; wire s_1_3, s_1_2, s_1_1, s_1_0; wire q2_inv; restoring_array_divider array_1_0 ( s_0_1, d[1], c_1_1, q2_inv, c_1_0, s_1_0); restoring_array_divider array_1_1 ( s_0_2, d[2], c_1_2, q2_inv, c_1_1, s_1_1); restoring_array_divider array_1_2 ( s_0_3, d[3], c_1_3, q2_inv, c_1_2, s_1_2); restoring_array_divider array_1_3 ( a[6], d[4], 1'b0, q2_inv, c_1_3, s_1_3); assign q[2] = ( s_0_0 | !c_1_0 ); assign q2_inv=!q[2]; wire c_2_3, c_2_2, c_2_1, c_2_0; wire s_2_3, s_2_2, s_2_1, s_2_0; wire q3_inv; restoring_array_divider array_2_0 ( s_1_1, d[1], c_2_1, q3_inv, c_2_0, s_2_0); restoring_array_divider array_2_1 ( s_1_2, d[2], c_2_2, q3_inv, c_2_1, s_2_1); restoring_array_divider array_2_2 ( s_1_3, d[3], c_2_3, q3_inv, c_2_2, s_2_2); restoring_array_divider array_2_3 ( a[7], d[4], 1'b0, q3_inv, c_2_3, s_2_3); assign q[3] = ( s_1_0 | !c_2_0 ); assign q3_inv=!q[3]; wire c_3_3, c_3_2, c_3_1, c_3_0; wire s_3_3, s_3_2, s_3_1, s_3_0; wire q4_inv; restoring_array_divider array_3_0 ( s_2_1, d[1], c_3_1, q4_inv, c_3_0, s_3_0); restoring_array_divider array_3_1 ( s_2_2, d[2], c_3_2, q4_inv, c_3_1, s_3_1); restoring_array_divider array_3_2 ( s_2_3, d[3], c_3_3, q4_inv, c_3_2, s_3_2); restoring_array_divider array_3_3 ( a[8], d[4], 1'b0, q4_inv, c_3_3, s_3_3); assign q[4] = ( s_2_0 | !c_3_0 ); assign q4_inv=!q[4]; wire c_4_3, c_4_2, c_4_1, c_4_0; wire s_4_3, s_4_2, s_4_1, s_4_0; wire q5_inv; restoring_array_divider array_4_0 ( s_3_1, d[1], c_4_1, q5_inv, c_4_0, s_4_0); restoring_array_divider array_4_1 ( s_3_2, d[2], c_4_2, q5_inv, c_4_1, s_4_1); restoring_array_divider array_4_2 ( s_3_3, d[3], c_4_3, q5_inv, c_4_2, s_4_2); restoring_array_divider array_4_3 ( a[9], d[4], 1'b0, q5_inv, c_4_3, s_4_3); assign q[5] = ( s_3_0 | !c_4_0 ); assign q5_inv=!q[5]; wire c_5_3, c_5_2, c_5_1, c_5_0; wire s_5_3, s_5_2, s_5_1, s_5_0; wire q6_inv; restoring_array_divider array_5_0 ( s_4_1, d[1], c_5_1, q6_inv, c_5_0, s_5_0); restoring_array_divider array_5_1 ( s_4_2, d[2], c_5_2, q6_inv, c_5_1, s_5_1); restoring_array_divider array_5_2 ( s_4_3, d[3], c_5_3, q6_inv, c_5_2, s_5_2); restoring_array_divider array_5_3 ( a[10], d[4], 1'b0, q6_inv, c_5_3, s_5_3); assign q[6] = ( s_4_0 | !c_5_0 ); assign q6_inv=!q[6]; wire c_6_3, c_6_2, c_6_1, c_6_0; wire s_6_3, s_6_2, s_6_1, s_6_0; wire q7_inv; restoring_array_divider array_6_0 ( s_5_1, d[1], c_6_1, q7_inv, c_6_0, s_6_0); restoring_array_divider array_6_1 ( s_5_2, d[2], c_6_2, q7_inv, c_6_1, s_6_1); restoring_array_divider array_6_2 ( s_5_3, d[3], c_6_3, q7_inv, c_6_2, s_6_2); restoring_array_divider array_6_3 ( a[11], d[4], 1'b0, q7_inv, c_6_3, s_6_3); assign q[7] = ( s_5_0 | !c_6_0 ); assign q7_inv=!q[7]; wire c_7_3, c_7_2, c_7_1, c_7_0; wire s_7_3, s_7_2, s_7_1, s_7_0; wire q8_inv; restoring_array_divider array_7_0 ( s_6_1, d[1], c_7_1, q8_inv, c_7_0, s_7_0); restoring_array_divider array_7_1 ( s_6_2, d[2], c_7_2, q8_inv, c_7_1, s_7_1); restoring_array_divider array_7_2 ( s_6_3, d[3], c_7_3, q8_inv, c_7_2, s_7_2); restoring_array_divider array_7_3 ( a[12], d[4], 1'b0, q8_inv, c_7_3, s_7_3); assign q[8] = ( s_6_0 | !c_7_0 ); assign q8_inv=!q[8]; assign r[8:5]={s_7_3, s_7_2, s_7_1, s_7_0}; assign a[12:1]={a_in[0], a_in[1], a_in[2], a_in[3], a_in[4], a_in[5], a_in[6], a_in[7], 4'b0000}; assign d[4:1]={d_in[0], d_in[1], d_in[2], d_in[3]}; assign q_out[7:0]={q[1] ,q[2], q[3], q[4], q[5], q[6], q[7], q[8]}; assign r_out[3:0]={r[5], r[6], r[7], r[8]}; endmodule //fast_array_divider
  11. может кому будет нужно `timescale 1ns / 1ps // module divider # ( parameter WIDTH_DIVIDENT = 27, parameter WIDTH_DIVIDER = 9 ) ( // global input Clock, // input input DivIn, input [WIDTH_DIVIDENT-1 : 0] Divident, input [WIDTH_DIVIDER-1 : 0] Divider, // output output wire DivOut, output wire [WIDTH_DIVIDENT-1 : 0] Result, output wire [WIDTH_DIVIDER-1 : 0] Fractional, // debug output wire Test ); // wire [0 : 0] Comp [WIDTH_DIVIDENT-1 : 0]; wire [WIDTH_DIVIDER-1 : 0] CarryTemp [WIDTH_DIVIDENT-1 : 0]; // sift registers reg [0 : 0] DivTemp [WIDTH_DIVIDENT-1 : 0]; reg [WIDTH_DIVIDENT-1 : 0] ResultTemp [WIDTH_DIVIDENT-1 : 0]; reg [WIDTH_DIVIDENT+WIDTH_DIVIDER-1 : 0] DividentTemp [WIDTH_DIVIDENT-1 : 0]; reg [WIDTH_DIVIDER-1 : 0] DividerTemp [WIDTH_DIVIDENT-1 : 0]; // first always @(posedge Clock) begin DivTemp[0][0 : 0] = DivIn; ResultTemp[0][WIDTH_DIVIDENT-1 : 0] = (Comp[0]) ? 8'd1 : 8'd0; DividentTemp[0][WIDTH_DIVIDENT+WIDTH_DIVIDER-2 : 0] = {{(WIDTH_DIVIDER-1){1'b0}}, Divident[WIDTH_DIVIDENT-1 : 0]}; DividerTemp[0][WIDTH_DIVIDER-1 : 0] = Divider[WIDTH_DIVIDER-1 : 0]; end //always // next all genvar i; generate for (i=1; i<WIDTH_DIVIDENT; i=i+1) begin: shift always @(posedge Clock) begin DivTemp[0 : 0] = DivTemp[i-1][0 : 0]; ResultTemp[WIDTH_DIVIDENT-1 : 0] = {(ResultTemp[i-1][WIDTH_DIVIDENT-2 : 0]), ((Comp) ? 1'b1 : 1'b0)}; DividentTemp[WIDTH_DIVIDENT+WIDTH_DIVIDER-2 : 0] = {CarryTemp[i-1][WIDTH_DIVIDER-2 : 0], DividentTemp[i-1][WIDTH_DIVIDENT-2 : 0], 1'b0}; DividerTemp[WIDTH_DIVIDER-1 : 0] = DividerTemp[i-1][WIDTH_DIVIDER-1 : 0]; end //always end endgenerate // calculate genvar j; generate for (j=0; j<WIDTH_DIVIDENT; j=j+1) begin: calc assign Comp[j][0 : 0] = (DividentTemp[j][WIDTH_DIVIDENT+WIDTH_DIVIDER-2 :WIDTH_DIVIDENT-1] >= DividerTemp[j][WIDTH_DIVIDER-1 : 0]) ? 1'b1 : 1'b0; assign CarryTemp[j][WIDTH_DIVIDER-1 : 0] = (Comp[j]) ? (DividentTemp[j][WIDTH_DIVIDENT+WIDTH_DIVIDER-2 :WIDTH_DIVIDENT-1] - DividerTemp[j][WIDTH_DIVIDER-1 : 0]) : DividentTemp[j][WIDTH_DIVIDENT+WIDTH_DIVIDER-2 :WIDTH_DIVIDENT-1]; end endgenerate // fractional reg [WIDTH_DIVIDER-1 : 0] FractionalReg; always @(posedge Clock) FractionalReg[WIDTH_DIVIDER-1 : 0] = CarryTemp[WIDTH_DIVIDENT-1]; // result valid reg DivReg; always @(posedge Clock) DivReg = DivTemp[WIDTH_DIVIDENT-1][0 : 0]; // output assign Result[WIDTH_DIVIDENT-1 : 0] = ResultTemp[WIDTH_DIVIDENT-1]; assign Fractional[WIDTH_DIVIDER-1 : 0] = FractionalReg[WIDTH_DIVIDER-1 : 0]; assign DivOut = DivReg; // debug assign Test = 1'b0; endmodule //divider
  12. он к сожалению на систем верилоге.... а я в айсе работаю. НА установку симплифая пока не решился
  13. Доброго дня! А можно ссылочку. Я 2 варианта нашел. Один на системверилоге, другой на верилоге - https://github.com/russdill/bch_verilog . Интересно рассмотреть и другой ресурс. Хотелось бы исправлять 12 битовых ошибок в блоке размером 256 байт.
  14. Спасибо конечно. У AOZ1232-01 6 А, но при использовании в режиме бакбуст хватит ли тока ключа для получения 2 ампер? У линеара я смотрел, и как то в голове сложилось что 6 ампер не хватит. Возможно я и не прав - это не моё. Я пока присмотрелся на LTC1624 с внешним ключом. Но есть желание уменьшить. И кстати 4.7uF не мало ли для моего случая?
  15. модули со встроенными индуктивностями не годятся - не выдержат g
  16. тут как раз сначала надо знать какие напряжения и токи будут потребляться. Иначе как я могу нарисовать схему БП? А LT8614 включить в режиме инвертора - это внешний ключ, и обвязка. Не думаю что выигрыш по площади...
  17. да. С этим проблем не будет. Даже если кпд 70% будет. Тут еще всплыло....надо и -1.7В (300 мА). Грусть-пичаль. Но для -12 и -1.7 вроде подойдет LT1931. Только проверить прошивку FPGA сколько все будет кушать. инвертирующий DC тут (LT1931) реализован на двух индуктивностях (sepic). Есть же схемотехника с одной индуктивностью (back-boost). У меня ума наверно не хватит переделать все это. Давно я уже этим не занимался - ушел в цифру. А каждая индуктивность - нехилое место на ПП
  18. высота 3,5 мм - 5 мм. Ну место как можно меньше. Я схему доделываю - но чую - места очень мало....
  19. Выбрал LTC1624 для получения -5В, но у него обвязки много и индуктивности большие.... А у меня на ПП места очень мало.... Может кто посоветует? :1111493779:
  20. Констрейны как в екзампле. От компиляции к компиляции то работает то не работает. ISE 14.7. Не работает - это в плане того, что в авроре что что переклинивает и появляются пакеты не той длины. Ну и что заметил после этого - LANE_UP[3:0] == 4'b1111, но CHANNEL_UP то в 0 то в 1. Жара...разбираться пипец как тяжко. Есть идеи или мож кто сталкивался?
  21. Доброго дня. Есть проблема. Возникает hard error. В принципе лечится несколькими нажатиями на ресет и одновременным просмотром данного счетчика :)). И далее работает как часики. Но б...я надоело. Подскажет кто? Спасибо!
  22. Спасибо. Отпишусь о результатах после праздников. А пока может кто по виде мыслю покинет?