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

jokolemene

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

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

  • Посещение

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


  1. 2 embddr: Да, точно! Я понял в чём была моя ошибка. Теперь всё синтезируется без варнинга и защёлок. Большое спасибо за помощь!
  2. Да, регистр был не инициализирован. Инициализировал. Всё равно варнинг рисуется. Посмотрел сгенерённую схему: куча комбинаторики и в самом конце стоят защёлки - в них используются входы ACLR и PRESET. А насчёт порядка счёта: без разницы откуда считать. Единичный бит в регистре только в одном экземпляре. PS: Добавил в цикл break - перестало компилироваться. Выдаёт ошибку: can't resolve reference to object "break".
  3. На порту result_o нужно получить порядковый номер бита регистра result_reg, установленного в единицу. Например, если регистр result_reg имеет размер 8192 бита, и в нём установлен бит номер 4015, то на порту result_o нужно получить число 4015.
  4. Всем привет! Тема такая: создаю схему на верилоге. В ней есть регистр переменного размера. Размер его задаётся через parameter, а затем выполняется перекомпиляция схемы. В результате работы схемы в регистре только один бит устанавливается в 1, остальные остаются в нуле. Вопрос: как комбинаторикой узнать номер этого установленного бита? Вот, например, как это было бы мной реализовано, если бы регистр был постоянного размера, скажем, восьмибитовым: reg [7:0] result_reg; assign result_o = result_reg[7] ? 7 : result_reg[6] ? 6 : result_reg[5] ? 5 : result_reg[4] ? 4 : result_reg[3] ? 3 : result_reg[2] ? 2 : result_reg[1] ? 1 : 0; А как это сделать если регистр переменного размера? Пытаюсь сделать нечто в этом роде: parameter XX = 8; // Количество бит в регистре результата parameter NB = log2(XX); // Логарифм по основанию 2 от XX (вычисляется функцией log2) reg [XX-1:0] result_reg; // Регистр с результатом работы схемы reg [NB-1:0] num_bit_reg; // Номер установленного бита в регистре result_reg assign result_o = num_bit_reg; // result_o - output-порт модуля always @( result_reg ) begin integer i; for( i=0; i < XX; i=i+1 ) if( result_reg[i] ) num_bit_reg = i; end Компилируется и вроде даже работает как надо, но при компиляции выдаётся warning: inferring latch(es) for variable "num_bit_reg", which holds its previous value in one or more paths through the always construct. Как сделать так, чтобы этого варнинга не было? Очень уж мне такие варнинги не нравятся. Да и как схема синтезируется в случае подобных конструкций - не совсем понятно. А я люблю, когда всё понятно и прозрачно.
  5. Могу. Вот две картинки. PS: заметил особенность - если к этим виртуальным ножкам прицепить "неоптимизированные" сигналы - всё нормально синтезируется без выдачи подобной ошибки.
  6. Всем привет! Может вопрос детский, но что-то внезапно заступорил меня. Тема такая: нужно проверить работу синхронизатора между двумя модулями. Для этого нужно поподавать на один модуль такты, сдвинутые на разную величину времени относительно тактов другого модуля. Вот, например, пытаюсь сдвинуть такты 2 относительно тактов 1 на 6 наносекунд: reg clk1; reg clk2; always #10 clk1 = ~clk1; always #10 clk2 = ~clk2; initial begin #0 clk1 = 0; #0 clk2 = 0; #6 clk2 = 1; end Получается неправильно - результат на картинке. Как надо написать, чтобы было правильно?
  7. Спасибо за подсказку! Правда проблему уже удалось решить без установки этой микросхемы. Так что вопрос более неактуален.
  8. Всем привет! Есть плата на которую не впаяны некоторые микросхемы. С одной из микросхем (последовательный интерфейс Intel 82510) дорожки RX и TX идут на одну из таких невпаянных микросхем. Скорее всего это должен быть преобразователь уровней TTL-RS. Есть необходимость определить тип этой микросхемы. Хотя-бы для начала может кто-нибудь подскажет - что это за тип корпуса? Фото прилагается. Интересует микросхема U76.
  9. С неделю назад мне так уже рекомендовали делать. Я проверил - результат был аналогичный (правда, при проверке команда CGREG дала ответ 2, а не 0): [00:00:12] {GSM } Проверяем регистрацию в сети [00:00:12] {GSM } COMM: AT+CREG? [00:00:12] {GSM } ANSW: +CREG: 0,1 [00:00:12] {GSM } ANSW: OK [00:00:12] {GSM } Есть регистрация в сети [00:00:12] {GSM } Измеряем уровень сигнала [00:00:12] {GSM } COMM: AT+CSQ [00:00:12] {GSM } ANSW: +CSQ: 18,0 [00:00:12] {GSM } ANSW: OK [00:00:12] {GSM } Уровень сигнала = -77 dBm [00:00:12] {TCP } Проверяем состояние канала [00:00:12] {GSM } COMM: AT+QISTAT [00:00:12] {GSM } ANSW: OK [00:00:12] {GSM } ANSW: STATE: IP INITIAL [00:00:12] {TCP } Проверяем состояние сети [00:00:12] {GSM } COMM: AT+CGREG? [00:00:12] {GSM } ANSW: +CGREG: 0,2 [00:00:12] {GSM } ANSW: OK [00:00:12] {TCP } Нет регистрации в сети [00:00:12] {TCP } Подключаем GPRS-сервис [00:00:12] {GSM } COMM: AT+CGATT=1 [00:00:12] {GSM } ANSW: +CME ERROR: unknown [00:00:12] {TCP } ERROR: нет ответа 'OK' Возможно, что если бы команда CGREG ответила 0, а не 2, то модуль на команду CGATT ответил бы ОК. Но во время тестирования команда CGREG ни разу не ответила 0. Только 2 или 1.
  10. Я же говорю, что через пять секунд после "unknown" дивайс даёт эту команду повторно, получает "ОК" и дальше работает нормально. APN задаётся чуть позже - перед выполнением команды "AT+QIACT". Опять-же, точно такой-же дивайс, но с модулем SIM340DZ, аттачится к GPRS-сервису с пол-пинка, работая по точно такому-же алгоритму. Тем не менее, сделал для проверки установку APN заранее. Вот лог результата: [00:00:00] {MAIN} ADC(0)=715; Vbat=4.19В [00:00:00] {GSM } Включаем GSM-модуль [00:00:03] {GSM } ANSW: RDY [00:00:03] {GSM } COMM: AT+IPR? [00:00:03] {GSM } ANSW: AT+IPR? [00:00:03] {GSM } ANSW: +IPR: 38400 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: AT+IFC? [00:00:03] {GSM } ANSW: AT+IFC? [00:00:03] {GSM } ANSW: +IFC: 0,0 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: ATZ [00:00:03] {GSM } ANSW: ATZ [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: ATE0 [00:00:03] {GSM } ANSW: ATE0 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: ATX4 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: AT+CMEE=2 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: AT+CREG=0 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: AT+QIURC=0 [00:00:03] {GSM } ANSW: OK [00:00:09] {GSM } Проверяем наличие и залоченность SIM-карты [00:00:09] {GSM } COMM: AT+CPIN? [00:00:09] {GSM } ANSW: +CPIN: SIM PIN [00:00:09] {GSM } ANSW: OK [00:00:09] {GSM } Включена защита PIN-кодом [00:00:09] {GSM } Считываем ID SIM-карты [00:00:09] {GSM } COMM: AT+QCCID [00:00:09] {GSM } ANSW: 89997776112013633181 [00:00:09] {GSM } ANSW: OK [00:00:09] {GSM } Считываем количество оставшихся попыток набора PIN-кода [00:00:09] {GSM } COMM: AT+QTRPIN [00:00:09] {GSM } ANSW: +QTRPIN: 3,3,10,10 [00:00:09] {GSM } ANSW: OK [00:00:09] {GSM } Пытаемся разлочить карточку [00:00:09] {GSM } COMM: AT+CPIN=2586 [00:00:09] {GSM } ANSW: +CPIN: READY [00:00:09] {GSM } ANSW: OK [00:00:09] {GSM } Проверяем наличие и залоченность SIM-карты [00:00:09] {GSM } COMM: AT+CPIN? [00:00:09] {GSM } ANSW: +CPIN: READY [00:00:09] {GSM } ANSW: OK [00:00:09] {GSM } SIM-карточка открыта [00:00:10] {GSM } Проверяем регистрацию в сети [00:00:10] {GSM } COMM: AT+CREG? [00:00:10] {GSM } ANSW: +CREG: 0,2 [00:00:10] {GSM } ANSW: OK [00:00:10] {GSM } Поиск сети [00:00:10] {GSM } Измеряем уровень сигнала [00:00:10] {GSM } COMM: AT+CSQ [00:00:10] {GSM } ANSW: +CSQ: 99,99 [00:00:10] {GSM } ANSW: OK [00:00:10] {GSM } Уровень сигнала = -113 dBm [00:00:10] {MAIN} ADC(0)=714; Vbat=4.18В [00:00:15] {GSM } Проверяем регистрацию в сети [00:00:15] {GSM } COMM: AT+CREG? [00:00:15] {GSM } ANSW: +CREG: 0,1 [00:00:15] {GSM } ANSW: OK [00:00:15] {GSM } Есть регистрация в сети [00:00:15] {GSM } Измеряем уровень сигнала [00:00:15] {GSM } COMM: AT+CSQ [00:00:15] {GSM } ANSW: +CSQ: 20,0 [00:00:15] {GSM } ANSW: OK [00:00:15] {GSM } Уровень сигнала = -73 dBm [00:00:15] {TCP } Проверяем состояние канала [00:00:15] {GSM } COMM: AT+QISTAT [00:00:15] {GSM } ANSW: OK [00:00:15] {GSM } ANSW: STATE: IP INITIAL [00:00:15] {TCP } Устанавливаем имя точки доступа, логин и пароль [00:00:15] {GSM } Считываем номер оператора из GSM-модуля [00:00:15] {GSM } COMM: AT+COPS=0,2 [00:00:15] {GSM } ANSW: OK [00:00:15] {GSM } COMM: AT+COPS? [00:00:15] {GSM } ANSW: +COPS: 0,2,"40177" [00:00:15] {GSM } ANSW: OK [00:00:15] {GSM } COMM: AT+CGDCONT=1,"IP","internet" [00:00:15] {GSM } ANSW: OK [00:00:15] {GSM } COMM: AT+QIREGAPP="internet","","" [00:00:15] {GSM } ANSW: OK [00:00:15] {TCP } Подключаем GPRS-сервис [00:00:15] {GSM } COMM: AT+CGATT=1 [00:00:15] {GSM } ANSW: +CME ERROR: unknown [00:00:15] {TCP } ERROR: нет ответа 'OK' Дополнение: Проблема решилась так: не давать команду "AT+CGATT" совсем. Никогда. Такой "workaround" пока-что работает. Буду наблюдать. Но в любом случае "unknown" - это баг. Негоже модулю выдавать такие сообщения об ошибках на вполне легальные команды.
  11. Всем здравствуйте! Продолжаю писать программу для дивайса, в котором установлен M10 (Revision: M10BR06). При попытке аттача к GPRS-сервису (сразу после инициализации модуля) командой "AT+CGATT=1" появляется сообщение об ошибке "+CME ERROR: unknown". В большинстве случаев после выполнения пятисекундной задержки и повторной передачи команды "AT+CGATT=1" GPRS-сервис поднимается нормально, но один раз эта ошибка появлялась в течение нескольких минут. При этом в то-же самое время другой дивайс с модулем SIM340DZ и карточкой того-же самого провайдера поднял GPRS и соединился с сервером "на ура". Проблема не связана с каким-то конкретным оператором - проверялось на разных операторах с разными карточками (VegaLine и Tele2). Вот кусок лога работы дивайса: [00:00:00] {MAIN} ADC(0)=712; Vbat=4.17В [00:00:00] {GSM } Включаем GSM-модуль [00:00:02] {GSM } ANSW: RDY [00:00:02] {GSM } COMM: AT+IPR? [00:00:02] {GSM } ANSW: +CFUN: 1 [00:00:02] {GSM } ANSW: +CPIN: SIM PIN [00:00:02] {GSM } ANSW: AT+IPR? [00:00:02] {GSM } ANSW: +IPR: 38400 [00:00:02] {GSM } ANSW: OK [00:00:02] {GSM } COMM: AT+IFC? [00:00:03] {GSM } ANSW: AT+IFC? [00:00:03] {GSM } ANSW: +IFC: 0,0 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: ATZ [00:00:03] {GSM } ANSW: ATZ [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: ATE0 [00:00:03] {GSM } ANSW: ATE0 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: ATX4 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: AT+CMEE=2 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: AT+CREG=0 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } COMM: AT+QIURC=0 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } Проверяем наличие и залоченность SIM-карты [00:00:03] {GSM } COMM: AT+CPIN? [00:00:03] {GSM } ANSW: +CPIN: SIM PIN [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } Включена защита PIN-кодом [00:00:03] {GSM } Считываем ID SIM-карты [00:00:03] {GSM } COMM: AT+QCCID [00:00:03] {GSM } ANSW: 89997776112013633181 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } Считываем количество оставшихся попыток набора PIN-кода [00:00:03] {GSM } COMM: AT+QTRPIN [00:00:03] {GSM } ANSW: +QTRPIN: 3,3,10,10 [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } Пытаемся разлочить карточку [00:00:03] {GSM } COMM: AT+CPIN=2586 [00:00:03] {GSM } ANSW: +CPIN: READY [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } Проверяем наличие и залоченность SIM-карты [00:00:03] {GSM } COMM: AT+CPIN? [00:00:03] {GSM } ANSW: +CPIN: READY [00:00:03] {GSM } ANSW: OK [00:00:03] {GSM } SIM-карточка открыта [00:00:03] {GSM } Проверяем регистрацию в сети [00:00:03] {GSM } COMM: AT+CREG? [00:00:04] {GSM } ANSW: +CREG: 0,2 [00:00:04] {GSM } ANSW: OK [00:00:04] {GSM } Поиск сети [00:00:04] {GSM } Измеряем уровень сигнала [00:00:04] {GSM } COMM: AT+CSQ [00:00:04] {GSM } ANSW: +CSQ: 99,99 [00:00:04] {GSM } ANSW: OK [00:00:04] {GSM } Уровень сигнала = -113 dBm [00:00:08] {GSM } Проверяем регистрацию в сети [00:00:08] {GSM } COMM: AT+CREG? [00:00:08] {GSM } ANSW: +CREG: 0,2 [00:00:08] {GSM } ANSW: OK [00:00:08] {GSM } Поиск сети [00:00:08] {GSM } Измеряем уровень сигнала [00:00:08] {GSM } COMM: AT+CSQ [00:00:08] {GSM } ANSW: +CSQ: 23,0 [00:00:08] {GSM } ANSW: OK [00:00:08] {GSM } Уровень сигнала = -67 dBm [00:00:10] {MAIN} ADC(0)=687; Vbat=4.03В [00:00:13] {GSM } Проверяем регистрацию в сети [00:00:13] {GSM } COMM: AT+CREG? [00:00:13] {GSM } ANSW: +CREG: 0,1 [00:00:13] {GSM } ANSW: OK [00:00:13] {GSM } Есть регистрация в сети [00:00:13] {GSM } Измеряем уровень сигнала [00:00:13] {GSM } COMM: AT+CSQ [00:00:13] {GSM } ANSW: +CSQ: 23,0 [00:00:13] {GSM } ANSW: OK [00:00:13] {GSM } Уровень сигнала = -67 dBm [00:00:13] {TCP } Проверяем состояние канала [00:00:13] {GSM } COMM: AT+QISTAT [00:00:13] {GSM } ANSW: OK [00:00:13] {GSM } ANSW: STATE: IP INITIAL [00:00:13] {TCP } Подключаем GPRS-сервис [00:00:13] {GSM } COMM: AT+CGATT=1 [00:00:13] {GSM } ANSW: +CME ERROR: unknown [00:00:13] {TCP } ERROR: нет ответа 'OK' [00:00:15] {TCP } Проверяем состояние канала [00:00:15] {GSM } COMM: AT+QISTAT [00:00:15] {GSM } ANSW: OK [00:00:15] {GSM } ANSW: STATE: IP INITIAL [00:00:15] {TCP } GPRS-канал закрыт [00:00:15] {TCP } ERROR: неудачная попытка открыть GPRS-канал Вопрос: что это за ошибка - "unknown"? И как от неё избавиться?
  12. Да, бета-прошивка эту проблему решила. Теперь ID SIM-карты можно узнать до ввода PIN-кода.
  13. ОК. Спасибо. Тогда второй вопрос - и где же её взять, эту бета-прошивку? А также средства для заливки её в модуль? Ни на сайте quectel.com, ни на сайте quectel.ru найти прошивку не могу... Гугль тоже что-то не помогает...
  14. Всем здравствуйте! Пишу сейчас программу для дивайса, в котором установлен M10 (Revision: M10BR06A06N32). Возникла серьёзная проблема со стартовой идентификацией SIM-карты. Раньше в дивайсах стояли другие модули (Siemens MC55, SIM300, SIM340) и везде можно было запросить 20-значный ID SIM-карты до набора PIN-кода. Таким образом можно было определить - сменили ли SIM-карту в дивайсе и не пытаться разлочить её PIN-кодом, хранящимся в памяти дивайса, в случае смены SIM-карты. Модуль M10 же на запрос ID SIM-карты отвечает: at+qccid +CME ERROR: SIM PIN required Возникает вопрос - как идентифицировать SIM-карту до ввода PIN-кода?
  15. Всем привет! Проблема в следующем: отправляю с помощью модуля SIM300 SMS на свой сотовый Nokia 6230i. SMS приходит, но прочитать его не могу - вместо текста SMS отображается текст "Сообщение показать нельзя". Делаю так: at+cmgf=1 at+cmgs="номер" > текст сообщения <Ctrl+Z> Пробовал писать только латинские буквы (без русских) - результат такой-же. Пробовал менять кодировки командой at+cscs - не помогает. Кто сталкивался с этим - подскажите, пожалуйста, куда копать?
  16. WinAVR у меня установлен. Ещё до написания основной программы на C я хотел им пользоваться, но потом на IAR C перешёл. Но что-то в опциях ассемблера студии я не вижу возможности выбрать для компиляции ассемблер WinAVR. Как его к студии прикрутить?
  17. Вот порнушники. На дворе 21-й век, а они всё не могут такой элементарной вещи сделать. Сейчас так и делаю. Использую AVR Assembler Version 2 - понравился тем, что в нём комментарии можно по сишному типу оформлять (/* */). Я отлаживаю бутлоадер - ограничен местом, поэтому такой вариант отладки напрягает. Кроме того специально под этот проект был приобретён JTAGICE MkII (нифига не задёшево). Имея такой дебаггер, выводить отладочную информацию в COM-порт - это несерьёзно.
  18. Так я уже пробовал. Не работает. Пишет "Not in scope". Да, я тоже от этого Watch-а не в восторге.
  19. Отлаживаю сейчас программу, написанную на AVR ассемблере. В ней есть несколько переменных, объявленных подобным образом: xmodemLength: .byte 2 crc32: .byte 4 Переменная xmodemLength - это short int, а переменная crc32 - это long. Но при отладке в окне Watch эти переменные отображаются, как char - показывается только их младший байт. Подскажите, пожалуйста, что нужно сделать, чтобы эти переменные отображались полностью - как short и long?
  20. Да, насчёт sbi я уже разобрался, help почитал. Так что спасибо за подсказку. Просто ни разу не писал на ассемблере для atmega. Раньше работал всё больше с пиками. Поэтому тут был несколько удивлён такими ограниченными командами, которые могут работать или только с частью регистров или с частью портов ввода/вывода или с малыми константами. Такие странные ограничения несколько напрягли. И спасибо за подсказку насчёт IAR ассемблера. Правда сейчас я на него уже вряд-ли буду переходить, потому что бутлоадер уже в стадии отладки.
  21. Написал программу для ATmega64 на Си. Использовал IAR C. Всё нормально, всё работает. Теперь встала задача написать бутлоадер, чтобы грузить прошивку в проц удалённо. Решил писать на ассемблере. Выяснилось, что ассемблер IAR-а балдеет от русских комментариев - то повиснет, то какие-то другие глюки начинают происходить. Пришлось с IAR перейти на AVR Studio 4 и AVR Assembler. Теперь другая проблема - компилятор ругается на совершенно легальные команды типа "sbi tifr,icf1", что мол "Operand 1 out of range: 0x36". По доке на процессор видно, что адрес 0x36 попадает в область I/O этого проца и с включенным режимом совместимости с ATmega103 и с выключенным. Что за тема, не въеду? Как это победить?
  22. Здравствуйте! В настоящее время я пишу программу для некоего китайского дивайса GT30, в котором установлен модуль SIM340DZ. По крайней мере так написано на его наклейке. Но когда я считал ревизию из него, то она оказалась 1008B13SIM300D32_SST34HF3284. Насколько я понял из массы топиков на вашем форуме - это страшно глючная версия. Не совсем понятно, как она оказалась в модуле SIM340DZ, но это - факт. Хотелось бы в таком случае понять - на какую версию прошивки мне лучше проапгрейдиться и где её можно взять?
×
×
  • Создать...