Перейти к содержанию
    

likeasm

Участник
  • Постов

    229
  • Зарегистрирован

  • Посещение

Весь контент likeasm


  1. Микросхема spartan6. Создал через CORE Generator fifo элемент. Тип fifo Native, шина 8 бит, глубина 8, выбрал тип block RAM. Схема работает в железе все устраивает, но вот в Device Utilization Summary: Number of RAMB16BWERs 0 52 0% Number of RAMB8BWERs 0 104 0% Я полагаю, что данную память можно использовать только в соответствии с xilinx ug383? Разъясните пожалуйста. :rolleyes:
  2. по дисплею пример работы с мегой и схема включения. http://chipenable.ru/index.php/programming...rezultatov.html на плис делаете автомат аналогичным образом и будет вам счастье.
  3. Я формировал enable сигнал по основной частоте как советовал iosifk, делитель частоты брал с fpga4fun.com пример ниже. Там он с погрешностью, но суть от этого не меняется. module BaudTickGen( input clk, enable, output tick // generate a tick at the specified baud rate * oversampling ); parameter ClkFrequency = 24000000; parameter Baud = 4800; parameter Oversampling = 1; function integer log2(input integer v); begin log2=0; while(v>>log2) log2=log2+1; end endfunction localparam AccWidth = log2(ClkFrequency/Baud)+8; // +/- 2% max timing error over a byte reg [AccWidth:0] Acc = 0; localparam ShiftLimiter = log2(Baud*Oversampling >> (31-AccWidth)); // this makes sure Inc calculation doesn't overflow localparam Inc = ((Baud*Oversampling << (AccWidth-ShiftLimiter))+(ClkFrequency>>(ShiftLimiter+1)))/(ClkFrequency>>ShiftLimiter); always @(posedge clk) if(enable) Acc <= Acc[AccWidth-1:0] + Inc[AccWidth:0]; else Acc <= Inc[AccWidth:0]; assign tick = Acc[AccWidth]; endmodule
  4. bus transceiver

    Поделитесь опытом, нужен bus transceiver с 5V на 3.3V, частота работы не менее 50 МГц. Собственно проблема в габаритах, их нужно разместить довольно много на небольшой площади. Из-за этого размер очень критичен. Покопал инет, корпуса довольно большие, может есть в природе что-нить миниатюрное?
  5. http://rutracker.org/forum/viewtopic.php?t=4490017 тут товарищ китайской таблеткой кидался для 13 версии
  6. тут статья про UART http://www.fpga4fun.com/SerialInterface.html там же есть модуль приемника и передатчика,сам пользовался работает нормально тут про fifo http://we.easyelectronics.ru/plis/realizac...ke-oshibok.html ну а если нужен полноценный UART, лучше поискать IP ядро.
  7. Имеем такой код: reg [39:0] main_buffer_ch1 always @(posedge CFGMCLK) begin if(RxD_data_ready5)//записываем байт от ЭВМ в сдвиговый буфер begin main_buffer_ch1<=main_buffer_ch1<<8;//1 main_buffer_ch1[7:0]<=RxD_data5;//2 end end данный код работает нормально и в железе и в симуляторе, но стоит поменять две строки://1 и //2 местами, то данная конструкция меняет последовательность действий и сдвиг буфера съедает нулями RxD_data5. Мне всегда казалось, что все выполняется параллельно, поправьте если не прав :05:
  8. ага отладка, терминал видел этот конвертер, в моем случае он не подошел. Задача врезаться в С1-ФЛ канал готового изделия для дополнительного помехоустойчивого кодирования.
  9. цель не синхронный rs-232, а старенький синхронный С1-ФЛ(И) канал с биимпульсным кодированием. Точность нужна для того, что приемник и передатчик не рассинхронизировались несколько минут в случае длительных помех. Спасибо за ответы товарищи, толкнули в нужную сторону!!!!
  10. Можно пример или ссылку если не сложно :rolleyes:
  11. Прошу прощения, сразу надо было сказать, что речь идет о verilog и Spartan6, конструкция такая для 9,6КГц такая always @(posedge 48M) begin if(counter==5000) begin counter<=0; trig<=~trig; end end
  12. Имеется PLL с которой выходит 48МГц на схему, требуется получить частоту 1,2-9,6 КГц. Я делаю ее через счетчик, который дергает триггер. Но вот погрешность получается 0,01%. Канал передачи синхронный, хотелось бы получиться значение получше чем 0,01%.
  13. Лет 10 пройдет пока они закончатся на рынке. TMS320C50 снят с производства в середине 90-х годов. До сих пор его можно купить. С точки зрения цены считайте серию и время которое потратите на переход.
  14. Сам сравнительно недавно сел за Verilog после C++,Assembler'ов. Поначалу голова взрывалась... Тут надо понимать, что ты не пишешь программу, а создаешь цифровую схему, у которой входы, выходы и логика. Советую начать с описания синтеза простейших конструкций, для понимания как вообще код преобразуется в цифровую схему, тогда придет понимание, что можно, а что нельзя.
  15. Частоту следует увеличить как минимум в 8 раз и сделать строб, который будет долбить данные в регистр, если идеально, то по середине, иначе прием будет непредсказуем. Почитать можно тут http://www.fpga4fun.com/SerialInterface.html. Если надо пропустить первый бит, предположу что он для синхронизации, лучше сделать автомат (state машину). 1 состояние(state) ожидание и обработка 1-го бита, со 2 state начинаем делать дела с записью и сдвигами.
  16. Довольно неплохо написано тут http://www.fpga4fun.com/SerialInterface.html про RS-232. Там конечно не VHDL, а Verilog, но делитель частоты на счетчиках описан понятно.
  17. Спасибо за ответы. завтра, попробую синтезировать схему через IP core, может что-то другое получиться. Да как-то коряво симулируется, адреса DADDR state машина выставляет согласно мануала, запись DWE и разрешение DEN тоже дергает. На шину данных DI почему-то выставляется состояния типа xx1011xx1x01, может так и задумано, чтобы не дергать не нужные биты. В общем в итоге после последнего state на выходы клоков CLKOUT0-CLKOUT5 устанавливается либо 1 либо 0, никакими меандрами и не пахнет.
  18. Вот код основного модуля. Если под галочкой подразумевается .DEN, то им управляет DRP State машина. Или разговор, про другую галочку? module main( input wire DRP_SADDR, input wire DRP_SEN, input wire DRP_RST, output wire CLKOUT0, output wire CLKOUT1, output wire CLKOUT2, output wire CLKOUT3, output wire CLKOUT4, output wire CLKOUT5, output wire DRP_SRDY ); wire [15:0] DO; wire [15:0] DI; wire [4:0] DADDR; STARTUP_SPARTAN6 STARTUP_SPARTAN6_inst ( .CFGCLK(CFGCLK), // 1-bit output: Configuration logic main clock output. .CFGMCLK(CFGMCLK), // 1-bit output: Configuration internal oscillator clock output. .EOS(EOS), // 1-bit output: Active high output signal indicates the End Of Configuration. .CLK(1'b0), // 1-bit input: User startup-clock input .GSR(1'b0), // 1-bit input: Global Set/Reset input (GSR cannot be used for the port name) .GTS(1'b0), // 1-bit input: Global 3-state input (GTS cannot be used for the port name) .KEYCLEARB(1'b0) // 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM) ); PLL_ADV #( .BANDWIDTH("OPTIMIZED"), // "HIGH", "LOW" or "OPTIMIZED" .CLKFBOUT_MULT(20), // Multiply value for all CLKOUT clock outputs (1-64) .CLKFBOUT_PHASE(0.0), // Phase offset in degrees of the clock feedback output (0.0-360.0). .CLKIN1_PERIOD(20.0), // Input clock period in ns to ps resolution (i.e. 33.333 is 30 .CLKIN2_PERIOD(0.0), // MHz). // CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for CLKOUT# clock output (1-128) .CLKOUT0_DIVIDE(20), .CLKOUT1_DIVIDE(20), .CLKOUT2_DIVIDE(20), .CLKOUT3_DIVIDE(20), .CLKOUT4_DIVIDE(20), .CLKOUT5_DIVIDE(20), // CLKOUT0_DUTY_CYCLE - CLKOUT5_DUTY_CYCLE: Duty cycle for CLKOUT# clock output (0.01-0.99). .CLKOUT0_DUTY_CYCLE(0.5), .CLKOUT1_DUTY_CYCLE(0.5), .CLKOUT2_DUTY_CYCLE(0.5), .CLKOUT3_DUTY_CYCLE(0.5), .CLKOUT4_DUTY_CYCLE(0.5), .CLKOUT5_DUTY_CYCLE(0.5), // CLKOUT0_PHASE - CLKOUT5_PHASE: Output phase relationship for CLKOUT# clock output (-360.0-360.0). .CLKOUT0_PHASE(0.0), .CLKOUT1_PHASE(0.0), .CLKOUT2_PHASE(0.0), .CLKOUT3_PHASE(0.0), .CLKOUT4_PHASE(0.0), .CLKOUT5_PHASE(0.0), .CLK_FEEDBACK("CLKFBOUT"), // Clock source to drive CLKFBIN ("CLKFBOUT" or "CLKOUT0") .COMPENSATION("SYSTEM_SYNCHRONOUS"), // "SYSTEM_SYNCHRONOUS", "SOURCE_SYNCHRONOUS", "EXTERNAL" .DIVCLK_DIVIDE(1), // Division value for all output clocks (1-52) .REF_JITTER(0.1), // Reference Clock Jitter in UI (0.000-0.999). .RESET_ON_LOSS_OF_LOCK("FALSE") // Must be set to FALSE ) PLL_ADV_inst ( .CLKFBDCM(CLKFBDCM), // 1-bit output: PLL_ADV feedback output to compensate if the PLL_ADV is driving // the DCM .CLKFBOUT(CLKFBOUT), // 1-bit output: PLL_ADV feedback output // CLKOUT0 - CLKOUT5: 1-bit (each) output: Clock outputs .CLKOUT0(CLKOUT0), .CLKOUT1(CLKOUT1), .CLKOUT2(CLKOUT2), .CLKOUT3(CLKOUT3), .CLKOUT4(CLKOUT4), .CLKOUT5(CLKOUT5), // CLKOUTDCM0 - CLKOUTDCM5: 1-bit (each) output: Clock output to directly drive DCM when cascading PLL to // DCM .CLKOUTDCM0(CLKOUTDCM0), .CLKOUTDCM1(CLKOUTDCM1), .CLKOUTDCM2(CLKOUTDCM2), .CLKOUTDCM3(CLKOUTDCM3), .CLKOUTDCM4(CLKOUTDCM4), .CLKOUTDCM5(CLKOUTDCM5), .DO(DO), // 16-bit output: DRP output bus .DRDY(DRDY), // 1-bit output: DRP ready output .LOCKED(LOCKED), // 1-bit output: PLL_ADV lock status output .CLKFBIN(CLKFBIN), // 1-bit input: Feedback clock input .CLKIN1(CLKIN1), // 1-bit input: General clock input .CLKIN2(CLKIN2), // 1-bit input: Unsupported .CLKINSEL(1'b1), // 1-bit input: Always connect high .DADDR(DADDR), // 5-bit input: DRP address .DCLK(DCLK), // 1-bit input: Clock input for DRP .DEN(DEN), // 1-bit input: DRP enable .DI(DI), // 16-bit input: DRP Data Input .DWE(DWE), // 1-bit input: DRP write enable .REL(REL), // 1-bit input: Unsupported .RST(RST) // 1-bit input: Reset input ); drp_pll U1(.SADDR(DRP_SADDR), .SEN(DRP_SEN), .SCLK(DRP_SCLK), .RST(DRP_RST), .SRDY(DRP_SRDY), .DO(DO), .DRDY(DRDY), .LOCKED(LOCKED), .DWE(DWE), .DEN(DEN), .DADDR(DADDR), .DI(DI), .DCLK(DCLK), .RST_PLL(RST)); assign CLKIN1=CFGMCLK; assign CLKFBIN=CLKFBOUT; assign DRP_SCLK=CFGMCLK; endmodule drp_pll.v main.v
  19. Задался вопросом динамической реконфигурации модуля PLL_ADV для Spartan 6. Скачал DRP модуль для Spartan 6, действовал по мануалу xapp879.pdf, cобрал проект в ISE 14.3. Начал симулировать... Тут PLL начал ругаться: Warning : Address DADDR=00101 is unsupported at PLL_ADV instance main.PLL_ADV_inst at time Warning : Address DADDR=00101 is unsupported at PLL_ADV instance main.PLL_ADV_inst at time Warning : Address DADDR=00101 is unsupported at PLL_ADV instance main.PLL_ADV_inst at time Warning : Address DADDR=00111 is unsupported at PLL_ADV instance main.PLL_ADV_inst at time Warning : Address DADDR=00111 is unsupported at PLL_ADV instance main.PLL_ADV_inst at time Warning : Address DADDR=01000 is unsupported at PLL_ADV instance main.PLL_ADV_inst at time такое ощущение, что адреса регистров реконфигурации PLL другие нежели в описании. Есть у кого опыт по данному вопросу?
  20. получается либо нормальный внешний генератор, либо танец с осциллографом после синтеза и определением погрешности периода частоты :wacko:
  21. Я предполагал такой ответ, спасибо. Буду подбирать внешний генератор.
  22. Спасибо, что читаете мои мысли, именно этого я и хочу, только не знаю как.
×
×
  • Создать...