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

DukeXar

Свой
  • Постов

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

  • Посещение

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


  1. Кто-нибудь занимался этим? Есть ли вообще смысл? Я запнулся на том, что синплифай не знает tornado_spiblock. Порылся по библиотеке, вроде среди шифрованных файлов не нашел его... Откуда квартус его берет?
  2. Найти нормальную лицензию. Команды не выполняются именно поэтому.
  3. Имеется Altera Cyclone EP1C6Q240C8. Пытаемся впихнуть в него NIOS II/s 5.0. В SOPC Builder ставим тактовую частоту 100 MHz. Включен аппаратный умножитель на логических элементах. По заверениям SOPC Builder производительность ядра будет до 58 DMIPS (он считает в зависимости от указанной частоты и чипа, судя по скриптам). SDRAM контроллер со стандартными настройками. CAS latency = 3. Какие же получаем результаты при сборке? Собирал со включенными опциями: Optimization: speed, Perform gate-level register retiming, Allow register to trade off tsu/tco with Fmax, Optimize hold timing (I/O paths), Standard fitter effort, Perform physical synthesis (все галки, effort: normal). При задании Default Requered Fmax = 75MHz (не забудьте, в SOPC Builder указано 100), PLL настроена на частоту также 75МГц, все синтезируется нормально, после прошивки и тестировании Dhrystone 2.1 получаем 15.818 DMIPS. При указании в качестве тактовых частот 50 МГц (Fmax, PLL out, SOPC Builder) получаем производительность в 11 DMIPS (CAS=3) или 12 DMIPS (CAS=2). Пробуем дальше: устанавливаем PLL=75MHz, SOPC Builder=100MHz, Fmax=75MHz - получаем 21.126 DMIPS (CAS=3). Ставим PLL=100MHz, Fmax=100MHz, SOPC Builder=100MHz - получаем Timing requirements were not met Clock Setup: 'system_pll:inst4|altpll:altpll_component|_clk0' -1.590 ns 100.00 MHz ( period = 10.000 ns ) 86.28 MHz ( period = 11.590 ns ) TrexC1:inst|cpu:the_cpu|M_alu_result[24]~1083 TrexC1:inst|cpu:the_cpu|d_readdata_d1[24] system_pll:inst4|altpll:altpll_component|_clk0 system_pll:inst4|altpll:altpll_component|_clk0 2220 Теперь вопрос: на что влияет параметр частоты в SOPC Builder и какой производительности можно все-таки достичь на циклоне с speed grade 8?
  4. Вот еще интересные вещи: ASICs... the website http://www-ee.eng.hawaii.edu/~msmith/ASICs/HTML/ASICs.htm Соответственно по Verilog: IEEE Verilog HDL Language Reference Manual Project http://www-ee.eng.hawaii.edu/~msmith/ASICs...log/Verilog.htm Опять же известная ссылка (каталог на доки и free tools): http://www.verilog.net/docs.html VHDL Tutorial: http://www.vhdl-online.de/ Книжечка интерактивная "RTL VHDL Application On Synthesis": http://www.exsultation.com/index.php?s=38 Опять же много где встречал, но повторюсь: http://www.aldec.com/products/tutorials/
  5. Да, спасибо... Что-то я действительно ступил. А файлик длл-ки и лицензии уже так нагенерил, порывшись по форуму.
  6. А вышеуказанная ссылочка почему не работает? Или у меня просто нехватает прав доступа? :(
  7. На самом деле нет. Там бесплатно - html. Конечно, если хочешь - можно заказать за деньги учебные материалы на CD или бумажные книги. Но я для себя распечатал про POSIX и доволен, учитывая мое полное незнание этого стандарта. Я не скажу, что это супер-пупер курсы, но для студента, да еще и начинающего (например меня) - в самый раз.
  8. Еще на www.intuit.ru есть курсы по разработке под POSIX, мобильных приложений под POSIX, C++.
  9. Так выходит, у тебя MPLAB неверно воспринимает код возврата от picc. IMHO за это отвечает плагин и его надо переставить. Например, так regsvr32 "d:\Tools\PICC16805\ht-picc\Suite_HITECH16.dll" Путь к библиотечке сам укажи.
  10. Скомпилить из командной строки с теми же параметрами, что и в OUTPUT, и посмотреть, какие сообщения на самом деле выдает компилятор. Посмотри также, получается ли obj? У меня было похожее, но с gpasm: MPLAB его запускал, gpasm все компилировал, а MPLAB говорил: ошибка компиляции :huh: и не давал отлаживать программу, хотя и COD и HEX были на месте. В общем - может компилятор и не виноват.
  11. А где можно почитать про необходимость тестпоинтов и про то как и куда они добавляются на плате? Я так понял, что это необходимо для многослойных плат?
  12. Да, с X86 проще - знаешь какой код сгенерит компилятор. Да и время реакции не то. И вот еще вопрос назрел. Я пока пишу на асме, но планирую перейти на C. Так вот, мне надо генерить пачку из 10 импульсов по 10мкс (скважность 50%) для управления тиристором в начале каждой фазы. Что я делал на асме: каждую миллисекунду проверял наличие фазы с датчика и, соответственно, генерил пачку. Если ее генерить не надо было - выполнял другие действия (считал, обновлял дисплейчик, проверял кнопочки итд.) К услугам таймера прибегал только для того, чтобы выдержать это время в 1мс с начала выполнения задачи. Задач было несколько и, поскольку у меня асм, я мог легко определить время выполнения каждой из них и соответственно перемешать так, чтобы суммарное время выполнения не превышало эту 1мс. Частота камня 4МГц. Прерывания не использовал. При использовании С, черт его знает, что он там состряпает. Я так понимаю, что выход один - использовать прерывание от таймера и в нем выполнять обработку? Наверняка с проблемой генерации таких коротких последовательностей сталкивались, где бы посмотреть примерчик, а то я еще студент , в смысле не волшебник :rolleyes: И еще: если вместо кварца на 4МГц поставить на 8МГц или больше - будет ли устройство более чувствительно к помехам, особенно, если монтаж пока выполнен на макетке проводом?
  13. Шаблонов не хватает, AKA C++ :a14: Спасибо, попробую и так.
  14. "ривстеч -ру" это где? <{POST_SNAPBACK}> Здесь: h**p://www.rivstech.ru
  15. Вот нашел http://www.microchipc.com/Hi-Tech_C_speed_optimization.htm Пробовал я такой switch. Нифига он его в computed goto не компилит :angry2: Делает как в первом, так и во втором случае следующее: movf c, W btfsc STATUS, Z goto case_0 xorlw 1 btfsc STATUS, Z goto case_1 xorlw 2 btfsc STATUS, Z goto case_2 Ну и в чем же разница между "Slow and Inefficient" и "Fast and Efficient"? Где грабли?
  16. Хочу простого. Есть функция, которая в зависимости от состояния автомата, реализует те или иные действия и переводит автомат в другое состояние. На MPASM сделал так: ReadUserInput: movlw high ReadUserInput_gotos movwf PCLATH movf a1_state, W ; W <- a1_state andlw b'00000011' ; clip to [0..3] addwf PCL, F ; jump ReadUserInput_gotos: goto read_user_input_0 goto read_user_input_1 goto read_user_input_2 goto read_user_input_3 ; ^^^ 8 Tcy read_user_input_0: jbc b_tst, rui_00 bsf a1_state, 0 goto read_user_input_end rui_00: jbc b_dwn, rui_01 bsf a1_state, 1 goto read_user_input_end rui_01: clb b_ui_mc jbs b_mc, read_user_input_end seb b_ui_mc bsf a1_state, 0 bsf a1_state, 1 goto read_user_input_end read_user_input_1: jbs b_tst, read_user_input_end bcf a1_state, 0 seb b_ui_tst goto read_user_input_end read_user_input_2: jbs b_dwn, read_user_input_end bcf a1_state, 1 seb b_ui_dwn goto read_user_input_end read_user_input_3: jbs b_mc, read_user_input_end bcf a1_state, 0 bsf a1_state, 1 ;seb b_ui_mc ;goto read_user_input_end read_user_input_end: return А теперь вопрос: как на C осуществить табличный переход? А то при использовании switch (a1_state) {case0: break; case 1: break; ...} или при использовании if (a1_state == 0) ... компилятор генерит код, который осуществляет проверку значения переменной a1_state на равенство сначала 0, потом 1, потом ... долго в общем. Пробовал еще так: typedef void (* StatePtr ) ( void ); void state0( void ) {} void state1( void ) {} ... const StatePtr states[] = {state0, state1, state2, state3}; char a1_state = 0; void main() { while (1) { // some stuff states[a1_state] (); } } Но перед вызовом функции states[a1_state]() компилятор загружает полный адрес функции, после чего вызывает :cranky: . А если у меня все в одной странице помещается? Зачем тогда полный адрес? Как лечить, что читать? Извиняюсь за возможные ошибки, но с пиками знаком лишь один месяц
×
×
  • Создать...