Jump to content

    

yaghtn

Свой
  • Content Count

    52
  • Joined

  • Last visited

Community Reputation

0 Обычный

About yaghtn

  • Rank
    Участник

Контакты

  • Сайт
    http://
  • ICQ
    108906009

Информация

  • Город
    Чебоксары
  1. Быть может не обязательно использовать именно case? Три ветвления всего же: Если от 0 до 70, если 71, и default. Если в диапазоне - то инкрементировать, в 71 - стоять на месте
  2. Цитата(AlexandrY @ Jun 6 2016, 15:38) MQX по движку аналогична uC/OS и freeRTOS. А кому из них аналогичнее? Возврат из прерывания в MQX происходит как в uC/OS-II через выяснение и переключение на самую приоритетную из задач? Или как во FreeRTOS, прерывание может вернуть управление именно туда, что прервалось, без переключений контекста? MQX сейчас доступен для чего-либо, кроме kinetis? Судя по тому, что freescale.com редиректит на nxp.com, стоит ли ждать MQX для NXP?
  3. Скиньте ТЗ на ivan35635@yandex.ru
  4. Цитата(kefalle @ Jun 26 2015, 14:42) Товарищи, подскажите, у меня есть проект SPI синхронного от внутреннего генератора. Регитр состояния и регистр значения (4 байта) сделан на verilog обычным reg [7:0]. На MAX II работает нормально. А вот при портирования проекта на Lattice дурят значения Покажите код. Конкретно какая Lattice? Какая скорость SPI?
  5. Цитата(des00 @ Jun 22 2015, 16:06) смотрите : Сразу стало ясно. Прозрачность рабочего регистра spi для выходных данных слейва по ald=nCS=1 в покое и сдвигание данных по slck при транзакции. Просто блестящая в своей простоте идея. Спасибо. Моя проблема в том, что я хотел описать на верилоге, чтобы тот же код использовать ещё и для max3000/7000. но теперь стало ясно, для начала надо вдумчиво изучить Алтеровский "Coding Guidelines" Вот было интересное обсуждение около года назад на тему "dffea -- verilog" http://electronix.ru/forum/index.php?s=&am...t&p=1276608
  6. Цитата(des00 @ Jun 22 2015, 12:04) Вашу задачу решает прекрасно. Вы читаете один регистр статуса. Простите, я не понимаю, как. (Сколько регистров передаём - не суть, пусть даже всего один читаем, и всего один пишем, я согласен на это) Но Dffeas, судя по таблице истинности описания примитива в /modelsim_ase/.../maxii_atoms.v при установленном Aload становится в режим прозрачности, повторяя Adata на выходе. И не реагирует на D и Clk, пока Aload не снимется. Если подать CS на Aload, то регистр проигнорирует любое остальное шевеление на шине SPI, хотя именно тогда идут нужные данные.
  7. Цитата(Torpeda @ Jun 20 2015, 22:59) А чем по Вашему такое решение неоптимально Характер потребления плис по питанию будет мягче для асинхронного дизайна за счёт разновременности переключения отдельных логических элементов. Хотелось бы иметь поменьше побочного взаимовлияния между компонентами системы. И прежде чем сильнее фильтровать питание и экранировать чувствительные места, сначала можно попробовать поменьше шуметь. Ну и для ресинхронизации и детекта фронтов требуются дополнительные ресурсы (по два-три Dff в каждую линию), которые хочется сэкономить. Цитата(des00 @ Jun 20 2015, 11:39) dffeas на сигнал aload вешаете CS Элемент dffeas не решает задачу, потому что он работает не по фронту, а по уровню aload. Ему необходим детектор фронта. Суть задачи именно в этом и состоит: нужен D-триггер с двумя защелкивающими входами (и с двумя входами данных, соответствующих им). Возможен ли такой элемент вообще? И чтобы а)без явных детекторов фронтов на элементах задержки(на Д-триггерах синхронных мастерклоку, либо на цепочках lcell) б)без дополнительной внутренней памяти некоего автоматного состояния в)без использования аппаратно-специфичных примитивов (на синтезируемом Верилоге, например) Можете ли посоветовать литературу на эту тему?
  8. Цитата(Mad_max @ Jun 19 2015, 15:16) Так и будет смотреться, пересадите все асинхронные входные сигналы на системный клок, далее спокойно работайте в одном домене и будет у вас синхронный дизайн без состояний когда работает, но не совсем. Вы правы, так написать проще всего. Но появятся дополнительные цепочки реклока трех входных сигналов и детекта фронтов, это дополнительные 8..12 LE, которых и так маловато. Поэтому, для начала, хотелось бы попробовать асинхронный дизайн. Цитата(Mad_max @ Jun 19 2015, 15:16) А ужас это вот это Кодwire ck = spcki | ncsi; always@(posedge ck) Вы берете по или два сигнала и используете как клок. Возможно, глупый вопрос, но почему это ужас? Ведь на этом клоке работает единственный регистр, выход которого используется гарантированно больше, чем 500ns, по другому фронту этого же клока. Цитата(Mad_max @ Jun 19 2015, 15:16) А что синтехатор сделает из этого, вообще сложно представить Кодalways@(posedge ncsi) begin Я надеялся, что сделает параллельные регистры, берущие данные с шины из сдвигового регистра приёма mosi, работающие по клоку ncsi, и с энейблами, декодированными из трехбитного адреса. И судя по post-fitting map квартуса, пока синтезируется так. Подозреваю что, аналогичная синхронная логика будет не сильно проще. Нужно переписать конструкцию if-else-if как switch-case?
  9. Спасибо большое за ответы. Цитата(Mad_max @ Jun 19 2015, 13:16) сейчас это тихий ужас. Как, по вашему, будет смотреться дизайн с мастерклоком модуля, разрешаемым декодером адреса (трех входных пинов плис)? Просто не хотелось бы "шевелить" эту часть вхолостую, если фактически работа с нею происходит раз в сутки. Цитата(AlexRayne @ Jun 19 2015, 13:34) скорость будет уступать синхронным просто потому что она не может быть адекватна посчитана симуляторами. ваш проект скорее всего заработает если вы сведете количество доменов клоков к 2м, и это потребует довольно серьезных размышлений над междоменной синхронизацией. Да в том и дело, что скорость высокая совсем не требуется. Клоки в реале - не более чем 1МГц. Т.е времена - микросекундные. Рассинхронизация тут, по идее, влиять на должна. Я грешил на ошибки в алгоритме, которые почему-то не могу увидеть сам.
  10. Здравствуйте. Для связи между CPLD epm570 и MCU atsam3u задумано использовать SPI, проц - мастер, плис - слейв. Микроконтроллер должен управлять светодиодами посредством ПЛИС и считывать состояние входов ПЛИС. Регистров в ПЛИС несколько, поэтому в дополнение к сигналам SPI (mosi/miso/sck/ncs), используются три линии адреса, управляемые микроконтроллером в режиме PIO. Обмен происходит изредка и не быстрее мегагерца, поэтому мне показалось неоптимальным постоянно тактовать модуль SPI от быстрого системного клока ПЛИС. Та же шина должна использоваться для контроля внешнего ЦАП, поэтому формат SPI выбран самый обычный (CPHA=0, CPOL=0), когда данные на mosi/miso появляются сразу после падения NCS, а сигнальный клок SCK появляется позже. MCU не генерит SCK, когда NCS в единице, и эти сигналы не меняют своё состояние одновременно. Код модуля и тестбенча - ниже. Основная идея - клочить приёмопередатчик сигналом ck, получаемый объединением логическим ИЛИ сигналов SCK и NCS шины. Что нужно защелкивать в сдвиговый регистр интерфейса - выходные данные MOSI или параллельные данные состояния ПЛИС, держится в регистре state. Если по фронту объединенного клока видим положительный NCS - будем загружать данные ПЛИС. Если был SCK - значит будем загружать побитно MOSI. В итоге, проц нормально управляет регистрами ПЛИС - лампочки загораются как надо, но, хотя в симуляторе всё работает, в реальном устройстве ПЛИС не выдаёт на MISO своё состояние, а лишь повторяет прошлые пришедшие в MOSI данные. Подскажите пожалуйста, в чем я мог тут ошибиться. Или я уже готов плюнуть и сделать синхронный дизайн на мастерклоке в 20МГц с детекторами фронтов клоков шины, как во всех примерах гугла, но это не то, что хотелось. CODEmodule spislave( spcki,ncsi,mosi,miso,addri, pdati, pdat1o,pdat2o); //spi IO input spcki,ncsi,mosi; output miso; input [2:0]addri; //parallel IO input [7:0]pdati; output [7:0]pdat1o; output [7:0]pdat2o; parameter PDATI=0,MOSI=1; //что защелкивать в spishiftreg reg state=PDATI; wire ck = spcki | ncsi; always@(posedge ck) begin if(ncsi) state <= PDATI; else //(ncs==0 && spcki==1) state <= MOSI; end reg mosi_prelatch=0; always@(posedge spcki) mosi_prelatch<=mosi; reg [7:0]spishiftreg=0; always@(negedge ck) begin if(state == PDATI) spishiftreg<=pdati; else//(state == MOSI) spishiftreg<={spishiftreg[6:0],mosi_prelatch}; end assign miso=spishiftreg[7]&(~ncsi); reg [7:0]pdat1o; reg [7:0]pdat2o; always@(posedge ncsi) begin if(addri==0) pdat1o<=spishiftreg; else if(addri==1) pdat2o<=spishiftreg; end endmodule CODE`timescale 1ps/1ps parameter ps=1;parameter ns=1000*ps; module tbspi(); integer bitnum=0; reg [2:0]addr=7; reg ncs=1; reg spck=0; wire mosi; reg [7:0]spi_reg=0; assign mosi=spi_reg[7]; initial begin #(50*ns)ncs=1; for(addr=0;addr<4;addr=addr+1) begin spi_reg<=8'b01010101; #(50*ns)ncs=0; for(bitnum=0; bitnum<8; bitnum=bitnum+1) begin #(10*ns) spck=1; #(10*ns) spck=0; spi_reg<={spi_reg[6:0],1'b0}; end #(50*ns)ncs=1; #(50*ns)ncs=1; end end wire miso; wire [7:0]pdati=8'b11100111; wire [7:0]pdat1o; wire [7:0]pdat2o; spislave DUT(.spcki(spck),.ncsi(ncs),.mosi(mosi),.miso(miso),.addri(addr), .pdati(pdati), .pdat1o(pdat1o),.pdat2o(pdat2o)); endmodule [attachment=93329:simspi.PNG]
  11. Цитата(tyro @ Jun 13 2013, 15:09) А такое бывает (полностью активное при не синусоидальном потреблении)? Это как посмотреть. К примеру, диодный выпрямитель с конденсатором и нагрузкой: ток потребляется импульсно, всегда имеет один и тот же знак с напряжением, энергия не запасается с тем чтобы вернуться в источник. В конечном итоге, каждый электрон, нагревший провода, будет преобразован в полезную работу. Импульсы это импульсы, их можно лишь умозрительно разложить на гармоники и увидеть гипотетические моменты возврата энергии в источник.
  12. Цитата(AndreyVN @ Jun 13 2013, 12:52) Есть предложение считать: 1) P = Int( i * u ) dt 2) S = Int( |i| * |u| )dt 3) Q = Sqrt(S^2 - P^2) 4) Fi = arccos(P / S) Где, u, i - мгновенные значения напряжения и тока. Есть возражения? 1) P= интеграл произведения функций за период. Оно же скалярное произведение векторов последовательных отсчётов сигнала за период =(i1*u1+i2*u2+..in*un)/N 2)тут у вас что-то не так. Полная мощность это произведение действующих значений тока и напряжения. Действующее значение это корень из суммы квадратов отсчётов сигнала за период, корень скалярного произведения сигнала на самого себя. Ну или через интеграл действующее можно выразить, если вам так нравится. Пользуясь вашей нотацией: P=sqrt(Int(i*i)dt) * sqrt(Int(u*u)dt) 3)Корень разности квадратов в данном случае даст не просто реактивную мощность, а сумму реактивной и гармониковой. 4)Тогда тут будем иметь ненулевой Фи при полностью активном, но несинусоидальном потреблении.
  13. Цитата(AndreyVN @ Jun 3 2013, 16:03) А никому не попадалось представление реактивной энергии/мощности через интеграл от мгновенных значений u, i ? Обычно предлагается представить ток и напряжение в векторной форме, "амплитуда основной гармоники и её фаза" или соответствующие им ортогональные состовляющие (Re+j*Im) В таком случае, активная и реактивная мощность явятся результатами скалярного и векторного(псевдоскалярного, косоугольного) произведений тока и напряжения. Имея ряд мгновенных отсчётов тока и напряжения, предлагается вычислять преобразование Фурье для получения векторов основной гармоники тока и напряжения. Если ток и напряжение представляются двухмерными векторами размерности 2, то не обязательно иметь вектора именно в частотной области. Можно взять по два мгновенных отсчёта синусоидальных тока и напряжения и посчитать нужные скалярное и векторное этих двухкомпонентных векторов, результат будет совпадать с вычислениями в частотной области. Если брать не 2 а больше отсчетов, возможно математика будет работать аналогично. Вопрос в том, будет ли выигрыш в вычислительной сложности скалярного произведения векторов размерности N по сравнению со сложностью преобразования Фурье. Векторное произведение в размерности N тоже один большой вопрос, хотя можно вычислить просто разность полной и активной мощностей. BTW, косинус фи между векторами может иметь смысл корреляции. Косинус фи равен единице, когда один сигнал является отмасшабированной копией другого. При таких токе и напряжении будет иметь место строго активная мощность. Цитата(AndreyVN @ Jun 4 2013, 08:18) Вот, наконец-то смог сформулировать вопрос: Определено ли понятие мгновенной реактивной мощности? Полная мощность складывается из активной, реактивной и гармониковой мощности. Высшие гармоники являются ортогональными к основной, к примеру при напряжении 50 Гц потребление током строго второй или третьей гармоники даёт нулевую активную мощность, аналогично потреблению током 50Гц со сдвигом в 90 градусов. При вычислениях во временнОй области я не вижу механизмов, позволяющих разделить реактивную и гармониковую мощности.
  14. Mml, обратите внимание на FilterShop фирмы LinearX. Оно заметно гибче, чем Матлабовский FilterDesign. В FilterShop имеется возможность оптимизировать коэффициенты фильтров под необходимые амплитудные и фазовые характеристики. Гляньте аппликухи на http://www.linearx.com/support/knowledgeba...edgebaseTop.htm В частности, http://www.linearx.com/files/pdf/FilterShopApp_09.pdf - "Digital FIR Decimator & Analog Lowpass".
  15. Kokos, какое время симуляции, не слишком ли мало? Лично мне как-то удобнее время симуляции задавать в самом тестбенче, конструкцией initial #(stoptime) $stop В примере http://www.altera.com/support/examples/mod...simulation.html генерация начинается с 200ns. Можно глянуть исходники, чтобы понять, как оно примерно написано и чего оно хочет. К примеру c:\Altera\91sp2\modelsim_ase\altera\verilog\src\stratix_atoms.v : Module Name : stratix_pll Description : Timing simulation model for the Stratix StratixGX PLL. In the functional mode, it is also the model for the altpll megafunction.