Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ВитГо »

вопрос про ПЛИС EPM240:Verilog

При компиляции проекта в Quartus 9.1 sp2 получаю ошибку: Error (10137): Verilog HDL Procedural Assignment error at EPM240T100C5.v(59): object "adr_ram" on left-hand side of assignment must have a variable data type.
Ругается на строчку
adr_ram[7:0]=data8[7:0];

Сами линии объявил так

Код: Выделить всё

input wire [7:0] data8;  // шина данных\команд плис
output wire [16:0] adr_ram; // шина адреса для ram


что это за ошибка ?
как нужно обозвать линию adr_ram чтобы она стала Variable data type ?
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение avreal »

Или описывать как у Вас, но постоянное присваивание:

Код: Выделить всё

assign adr_ram[7:0]=data8[7:0]; 

или output reg adr_ram и тогда в always
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ВитГо »

еще один вопрос про Verilog

можно ли в модуле применять два always:
первый always @(posedge cs)
второй always @(negedge cs )

они у меня один за другим стоят..

сейчас у меня выдает ошибку.. это я накосячил или нельзя такое в одном модуле делать ?
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ВитГо »

а в одном блоке always компилятор не разрешает обрабатывать событие posedge и negedge - пишет что Error (10239): Verilog HDL Always Construct error at EPM240T100C5.v(50): event control cannot test for both positive and negative edges of variable "cs"

как отслеживать положительный и отрицательный фронт сигнала cs ?
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

Quartus у меня далеко - проверить нечем.
Может быть попробовать изменить тип "cs":
тут вот описание есть, но для разных сигналов: http://www.marsohod.org/index.php/veril ... raycounter

Кстати, может пригодиться: http://www.marsohod.org/index.php/veril ... mment-2130
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ВитГо »

вот ссылка на проект http://vg.ucoz.ru/oscill/EPM240T100C5.zip
писано в quartus 9.1 sp2

немного опишу задачу:

при помощи плис я хочу сделать устройство захвата для самодельного цифрового осцилографа
частота дискретизации планируется в 80 мгц (АЦП AD9057)

внешний контроллер будет управлять плис, по шине состоящей из D7-D0, и сигналов управления WR и CS (10 проводов)
нужны следующие команды:
0х00- нет операции
0х01 - установка 8 младших бит адреса
0х02 - установка средних 8 бит адреса
0х03 - установка старшего бита адреса
0х04 - чтение памяти
0x05 - запуск однократного преобразования\захвата входного сигнала

команды 0х01-0х05 двубайтовые, вслед за кодом команды идет 1 байт параметра, в 0х01-0х03 - это часть адреса (всего адресуется 128 кб озу), 0х04 - шаг приращения адреса при чтении (от 1 до 255), в 0х05 - делитель частоты преобразования

описал железо:

Код: Выделить всё

input wire clk;   // тактирующий сигнал (80 мгц)
input wire wr;  // сигнал выбора операции записи\чтения
input wire cs;  // строб операции
input wire [7:0] data8;  // шина данных\команд плис

output reg [16:0] adr_ram; // шина адреса для ram
output reg adc_enc;   // управление выборкой из АЦП
output reg reg_adc_cs;   // управление регистром АЦП
output reg reg_ram_cs; // управление регистром RAM
output reg ram_wr;      // сигнал выбора операции RAM запись\чтение
output reg ram_oe;     // строб операции с RAM

reg[16:0] adr_value;   // внутренний регистр адреса RAM для операций
reg wait_add_byte;      // признак ожидания доп. байта команды
reg   [2:0] commtype;     // команда
reg int_wr;             // сохранение копии сигнала wr
reg [7:0] adr_step;     // шаг приращения адреса для чтения RAM


дальше хочу по фронту сигнала cs считывать команду и доп. байт к ней (или читать память), выполнять какое то действие, и по спаду сигнала сбрасывать состояние управляемых устройств

для этого в always прописал реагирование на любое изменение cs

Код: Выделить всё

always @(cs)  // при изменении cs
begin
   if (cs==1)
      begin
         // дешифровка записываемой в ПЛИС команды   
         int_wr<=wr;   // сохраним вид операции (чтение\запись)

         if (wr==0) // запись команды в ПЛИС
            begin
               if (wait_add_byte==0) // принимаем первый байт
                  begin
                     wait_add_byte<=1;     // в следующий раз принимаем доп. байт
                     commtype<=data8[2:0]; // запомним полученную команду
                     if (commtype==`NOP) wait_add_byte<=0; // у команды NOP нет доп. байта

                  end else // получаем дополнительный байт команды
                        begin
                           wait_add_byte<=0; // следующий принимаемый байт - команда
                           case (commtype)
                              `SET_L8:  begin  // принимаем младшие 8 бит адреса для чтения
                                       adr_value[7:0]<=data8[7:0];
                                    end   
                         
                             `SET_M8:  begin   // принимаем средние 8 бит адреса для чтения
                                       adr_value[15:8]<=data8[7:0];
                                    end
                         
                             `SET_H8:  begin   // принимаем старший бит адреса для чтения
                                       adr_value[16]<=data8[0];
                                    end
                         
                           `RAM_READ:  begin   // принимаем шаг приращения адреса для чтения
                                       adr_step<=data8;
                                    end
      
                           `ADC_SYNC:  begin
                                    end
                         
                           `ADC_START:  begin
                                    end                   
                           endcase
                        end
            end else // здесь у нас wr=0
                  begin      // чтение из памяти
                     adr_ram<=adr_value;    // выдадим адрес для операции чтения
                     ram_wr<=1;  // операция чтения
                     ram_oe<=0;  // строб
                  end
      end


соответственно когда сигнал cs снимается - мы прекращаем исполнение команды

Код: Выделить всё

         else  // при спаде импульса по cs
            begin
               if (int_wr==1) // у нас была операция чтения ? 
                  begin
                     if (commtype==`RAM_READ)
                        begin
                           ram_oe<=1;  // отключим чтение с SRAM                        
                           adr_value<=adr_value+adr_step; // прирастим адрес для чтения на шаг
                        end   
                  end
            end
end


этот код компилируется с какими то не понятными мне предупреждениями

Warning: Circuit may not operate. Detected 3 non-operational path(s) clocked by clock "wr" with clock skew larger than data delay. See Compilation Report for details.

Warning: Circuit may not operate. Detected 1 non-operational path(s) clocked by clock "cs" with clock skew larger than data delay. See Compilation Report for details.

Warning: Found 16 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew
Info: Detected ripple clock "wait_add_byte" as buffer
Info: Detected ripple clock "commtype[2]" as buffer
Info: Detected ripple clock "int_wr" as buffer
Info: Detected ripple clock "commtype[0]" as buffer
Info: Detected ripple clock "commtype[1]" as buffer
Info: Detected gated clock "adr_value[16]~3" as buffer
Info: Detected gated clock "adr_value[8]~2" as buffer
Info: Detected gated clock "wait_add_byte~2" as buffer
Info: Detected gated clock "commtype[0]~0" as buffer
Info: Detected gated clock "adr_value[16]~0" as buffer
Info: Detected gated clock "adr_value[0]~1" as buffer
Info: Detected gated clock "rtl~0" as buffer
Info: Detected gated clock "ram_oe~1" as buffer
Info: Detected gated clock "ram_oe~0" as buffer
Info: Detected gated clock "wait_add_byte~0" as buffer
Info: Detected gated clock "adr_ram[16]~0" as buffer

что написано не так как нужно ?

ссылка на архив проекта в начале сообщения
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение uldemir »

ВитГо писал(а):как отслеживать положительный и отрицательный фронт сигнала cs ?
Не знаю альтеровкие чипы, нифига не рублю фишку в верилоге тоже. Но, вероятно, выбранный вами кристалл не имеет фишки dual edge, поэтому такая фишка у вас не катит. Как вариант распределить на два разных регистра, один по позитивному, а другой по отрицательному чтобы срабатывал. Т.е. получается два практически параллельных канала.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Meteor »

Насколько знаю, ПЛИС не любят игр по обоим фронтам. Задействуйте PLL, увеличьте частоту и работайте по одному фронту.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение uldemir »

Тупой вопрос. есть черно-белый *.png 7х1800 пикселей. Хочется его зашить в ПЗУ. Как? Точнее, как перевести его в текстовый вид? Желательно, под виндой. Вечером, под FreeBSD я это сделаю и так без проблем.

Заодно, может бросите идею где взять задаром ПЗУ этого объёма, но на питание 3.3в (в схеме перепрограммироваться не будет!), а то посмотрел выпаянные с разных плат 28F, 29F (про 27с даже не говорю) - они все на 5в. А 49lf002 - слишком мутная для использования.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение isx »

День добрый!!
Подскажите пожалуйста с таким вопросом. Необходимо сделать так, чтобы при отключении питания МК, он записывал в EEPROM значение одной переменной, до того как работа мк прекратится. Возможно ли организовать такое?
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение uldemir »

Вполне, контролировать наличие питания, а микроконтроллер питать от конденсатора. Как питание пропадает, делать запись, пока в конденсаторе есть заряд. Разумеется, наличие питания проверять не на конденсаторе.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение isx »

тогда перед кондёром надо диод поставить, а перед ним уже кинуть провод на ногу атмеги.... Я правильно вас понял? И хватит ли времени до разрядки кондёра, чтоб выполнить все эти операции (кондёр к примеру на 10мкФ) ?
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение uldemir »

Да, примерно так. Насчет ёмкости - смотрите даташит на свой любимый микроконтроллер, сколько времени длится запись, какой потребляемый при этом ток, ну и время реакции на пропадание питания Вашей программы и, исходя из этого, вычисляете необходимую ёмкость.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение isx »

Микроконтроллер действительно любымый :)) Уже пол года наверно прошло, как получил первый опыт с МК, так до сих пор с него никак не слезу :))
Спасибо большое!.... Дальше думаю справлюсь)
mr.boroda
Встал на лапы
Сообщения: 124
Зарегистрирован: Вт июл 10, 2012 00:13:27
Откуда: Белгородская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение mr.boroda »

День добрый, можно ли заменить ds1820 на ds18s20 без измнения кода? Или нужна библиотека cvavr именно для ds18s20? У кого есть такая скиньте плз...
RDW
Родился
Сообщения: 19
Зарегистрирован: Пт май 20, 2011 15:28:49

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение RDW »

Всем, привет.

Честно сознаюсь, не осилил 361 страницу этого раздела и по этому извиняюсь за возможность повторения вопроса:

Решил заняться на конец ПЛИС, в частности взял себе поиграться XC9572XL, копался в датащитах, но так и не нашел информации о том, какой ток нагрузки выдерживает чип? В проекте для подключения светодиода к выводу CPLD мы ставим элемент буфера, можно ли таким образом на все ноги повесить светодиоды через резюки или есть как в контроллерах ограничение общее по току кристалла?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Gudd-Head »

RDW писал(а):так и не нашел информации о том, какой ток нагрузки выдерживает чип

Честно говоря, я тоже не нашёл такой инфы для 9536. Могу только предложить опираться на рассеиваемую мощность — при увеличении выходного/входного тока напряжение на выходном буфере нарастает, и греется сильнее. Зависимости выходного напряжения от тока есть в даташите.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
RDW
Родился
Сообщения: 19
Зарегистрирован: Пт май 20, 2011 15:28:49

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение RDW »

Gudd-Head писал(а):Честно говоря, я тоже не нашёл такой инфы для 9536. Могу только предложить опираться на рассеиваемую мощность — при увеличении выходного/входного тока напряжение на выходном буфере нарастает, и греется сильнее. Зависимости выходного напряжения от тока есть в даташите.

Мне кажется, что возможно токи можно учитывать по способности вводного напряжения, площади. Я сейчас не разбираюсь в нюансах (поправьте), но если можно ещё на ноги назначать какая из них может быть "+" или "-", то таким образом можно регулировать пропускную способность тока, не?
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение uldemir »

Если мне склероз не изменияет, порядка 8ма втекающего тока и 4ма вытекающего. Это не явно можно разглядеть в последней таблице на 3-ей странице даташита

И еще, забудьте про 95-ю серию. Я сейчас тащусь от CoolrunnerII
Последний раз редактировалось uldemir Чт сен 13, 2012 11:56:55, всего редактировалось 1 раз.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Gudd-Head »

uldemir писал(а):Если мне склероз не изменияет

Не изменяет. Просто это условия замера выходных напряжений. О том, какой ток максимальный — ни слова.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

Вернуться в «Разные вопросы по МК»