jokolemene
Участник-
Постов
29 -
Зарегистрирован
-
Посещение
Весь контент jokolemene
-
2 embddr: Да, точно! Я понял в чём была моя ошибка. Теперь всё синтезируется без варнинга и защёлок. Большое спасибо за помощь!
-
Да, регистр был не инициализирован. Инициализировал. Всё равно варнинг рисуется. Посмотрел сгенерённую схему: куча комбинаторики и в самом конце стоят защёлки - в них используются входы ACLR и PRESET. А насчёт порядка счёта: без разницы откуда считать. Единичный бит в регистре только в одном экземпляре. PS: Добавил в цикл break - перестало компилироваться. Выдаёт ошибку: can't resolve reference to object "break".
-
На порту result_o нужно получить порядковый номер бита регистра result_reg, установленного в единицу. Например, если регистр result_reg имеет размер 8192 бита, и в нём установлен бит номер 4015, то на порту result_o нужно получить число 4015.
-
Всем привет! Тема такая: создаю схему на верилоге. В ней есть регистр переменного размера. Размер его задаётся через 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. Как сделать так, чтобы этого варнинга не было? Очень уж мне такие варнинги не нравятся. Да и как схема синтезируется в случае подобных конструкций - не совсем понятно. А я люблю, когда всё понятно и прозрачно.
-
помогите с
jokolemene ответил skilful тема в Работаем с ПЛИС, области применения, выбор
Могу. Вот две картинки. PS: заметил особенность - если к этим виртуальным ножкам прицепить "неоптимизированные" сигналы - всё нормально синтезируется без выдачи подобной ошибки. -
Заработало! Большое спасибо!
-
Да, получилось, спасибо!
-
Всем привет! Может вопрос детский, но что-то внезапно заступорил меня. Тема такая: нужно проверить работу синхронизатора между двумя модулями. Для этого нужно поподавать на один модуль такты, сдвинутые на разную величину времени относительно тактов другого модуля. Вот, например, пытаюсь сдвинуть такты 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 Получается неправильно - результат на картинке. Как надо написать, чтобы было правильно?
-
Помогите определить микросхему
jokolemene ответил jokolemene тема в Микросхемы
Спасибо за подсказку! Правда проблему уже удалось решить без установки этой микросхемы. Так что вопрос более неактуален. -
Помогите определить микросхему
jokolemene опубликовал тема в Микросхемы
Всем привет! Есть плата на которую не впаяны некоторые микросхемы. С одной из микросхем (последовательный интерфейс Intel 82510) дорожки RX и TX идут на одну из таких невпаянных микросхем. Скорее всего это должен быть преобразователь уровней TTL-RS. Есть необходимость определить тип этой микросхемы. Хотя-бы для начала может кто-нибудь подскажет - что это за тип корпуса? Фото прилагается. Интересует микросхема U76. -
С неделю назад мне так уже рекомендовали делать. Я проверил - результат был аналогичный (правда, при проверке команда 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.
-
Я же говорю, что через пять секунд после "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" - это баг. Негоже модулю выдавать такие сообщения об ошибках на вполне легальные команды.
-
Всем здравствуйте! Продолжаю писать программу для дивайса, в котором установлен 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"? И как от неё избавиться?
-
Да, бета-прошивка эту проблему решила. Теперь ID SIM-карты можно узнать до ввода PIN-кода.
-
ОК. Спасибо. Тогда второй вопрос - и где же её взять, эту бета-прошивку? А также средства для заливки её в модуль? Ни на сайте quectel.com, ни на сайте quectel.ru найти прошивку не могу... Гугль тоже что-то не помогает...
-
Всем здравствуйте! Пишу сейчас программу для дивайса, в котором установлен 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-кода?
-
Всем привет! Проблема в следующем: отправляю с помощью модуля SIM300 SMS на свой сотовый Nokia 6230i. SMS приходит, но прочитать его не могу - вместо текста SMS отображается текст "Сообщение показать нельзя". Делаю так: at+cmgf=1 at+cmgs="номер" > текст сообщения <Ctrl+Z> Пробовал писать только латинские буквы (без русских) - результат такой-же. Пробовал менять кодировки командой at+cscs - не помогает. Кто сталкивался с этим - подскажите, пожалуйста, куда копать?
-
WinAVR у меня установлен. Ещё до написания основной программы на C я хотел им пользоваться, но потом на IAR C перешёл. Но что-то в опциях ассемблера студии я не вижу возможности выбрать для компиляции ассемблер WinAVR. Как его к студии прикрутить?
-
Вот порнушники. На дворе 21-й век, а они всё не могут такой элементарной вещи сделать. Сейчас так и делаю. Использую AVR Assembler Version 2 - понравился тем, что в нём комментарии можно по сишному типу оформлять (/* */). Я отлаживаю бутлоадер - ограничен местом, поэтому такой вариант отладки напрягает. Кроме того специально под этот проект был приобретён JTAGICE MkII (нифига не задёшево). Имея такой дебаггер, выводить отладочную информацию в COM-порт - это несерьёзно.
-
Так я уже пробовал. Не работает. Пишет "Not in scope". Да, я тоже от этого Watch-а не в восторге.
-
Отлаживаю сейчас программу, написанную на AVR ассемблере. В ней есть несколько переменных, объявленных подобным образом: xmodemLength: .byte 2 crc32: .byte 4 Переменная xmodemLength - это short int, а переменная crc32 - это long. Но при отладке в окне Watch эти переменные отображаются, как char - показывается только их младший байт. Подскажите, пожалуйста, что нужно сделать, чтобы эти переменные отображались полностью - как short и long?
-
Да, насчёт sbi я уже разобрался, help почитал. Так что спасибо за подсказку. Просто ни разу не писал на ассемблере для atmega. Раньше работал всё больше с пиками. Поэтому тут был несколько удивлён такими ограниченными командами, которые могут работать или только с частью регистров или с частью портов ввода/вывода или с малыми константами. Такие странные ограничения несколько напрягли. И спасибо за подсказку насчёт IAR ассемблера. Правда сейчас я на него уже вряд-ли буду переходить, потому что бутлоадер уже в стадии отладки.
-
ATmega64 - Operand 1 out of range: 0x36?
jokolemene опубликовал тема в MCS51, AVR, PIC, STM8, 8bit
Написал программу для ATmega64 на Си. Использовал IAR C. Всё нормально, всё работает. Теперь встала задача написать бутлоадер, чтобы грузить прошивку в проц удалённо. Решил писать на ассемблере. Выяснилось, что ассемблер IAR-а балдеет от русских комментариев - то повиснет, то какие-то другие глюки начинают происходить. Пришлось с IAR перейти на AVR Studio 4 и AVR Assembler. Теперь другая проблема - компилятор ругается на совершенно легальные команды типа "sbi tifr,icf1", что мол "Operand 1 out of range: 0x36". По доке на процессор видно, что адрес 0x36 попадает в область I/O этого проца и с включенным режимом совместимости с ATmega103 и с выключенным. Что за тема, не въеду? Как это победить? -
Здравствуйте! В настоящее время я пишу программу для некоего китайского дивайса GT30, в котором установлен модуль SIM340DZ. По крайней мере так написано на его наклейке. Но когда я считал ревизию из него, то она оказалась 1008B13SIM300D32_SST34HF3284. Насколько я понял из массы топиков на вашем форуме - это страшно глючная версия. Не совсем понятно, как она оказалась в модуле SIM340DZ, но это - факт. Хотелось бы в таком случае понять - на какую версию прошивки мне лучше проапгрейдиться и где её можно взять?