Jump to content

    

evgforum

Участник
  • Content Count

    36
  • Joined

  • Last visited

Everything posted by evgforum


  1. Отправил резюме на почту, не знаю, может уже нашли.
  2. У всех своя "Масква". Я пеку творожную запеканку из хороших продуктов и угощаю коллег. Пицца = отрава, факт
  3. На выходе должна получиться 8-разрядная шина с удвоенным клоком?
  4. Здравствуйте! Какое нужно минимальное количество слоев для платы процессорного модуля, проц: BGA-361 шаг 0,8 мм (3 питания, 1.2 Vcore+1.8 DDR+3V3 System), DDR2 (16-bit databus), FLASH (8 bit databus), внешний разъем SO-DIMM (как разъем для памяти) с выведенными интерфейсами: 200 i/o. Плата примерно 70x50 мм Подскажите навскидку плюс-минус. Хочу оценить стоимость платы, разработка серийная
  5. Все понятно, спасибо всем за подробные разъяснения!
  6. Не знал, что запись вида process(CLK, RST, D) begin elsif CLK'event and CLK = '1' then if D = ... sync_signal <= .... ... end if; end if; OUTPORT <= sync_signal; end process; является ошибочной и OUTPORT может измениться на спаде CLK. Ведь он должен полностью повторять сигнал sync_signal (казалось бы)
  7. А как его правильно ставить? Сейчас его изменение строго совпадает с фронтом CLK. Вообще-то проект большой и сигнал D - выход другого триггера, одного из разрядов счетчика, т.е. должен быть синхронным. Симуляцию делаю для всего проекта. В качестве эксперимента поместил присвоение выхода внутрь условия elsif CLK..., т.е. сделал его синхронным - все работает как надо. elsif CLK'event and CLK = '1' then for i in 1 to level loop BUF(i) <= BUF(i-1); end loop; Q <= BUF(level-1); end if;
  8. Имеется простой D-триггер (цепочка триггеров), написанный на VHDL с целью создать модуль задержки сигнала на несколько тактов (количество тактов задержки - параметр level). Ожидаю на выходе Q увидеть синхронный сигнал, меняющийся по фронту CLK, который почему-то переключается по спаду CLK (см. рисунок из Active-HDL). Что я делаю не так, у кого какие соображения? Т.е. в данном случае, как мне думается, должно быть Q = BUF(1). library IEEE; use IEEE.STD_LOGIC_1164.all; entity pipeline is generic(level: natural := 1); port( CLK : in STD_LOGIC; D : in STD_LOGIC; RST : in STD_LOGIC; Q : out STD_LOGIC; nQ : out STD_LOGIC ); end pipeline; architecture pipeline of pipeline is type dff_array is array(integer range 0 to level) of STD_LOGIC; signal BUF: dff_array; begin process(CLK, RST, D) begin if RST = '1' then for i in 1 to level loop BUF(i) <= '0'; end loop; elsif CLK'event and CLK = '1' then for i in 1 to level loop BUF(i) <= BUF(i-1); end loop; end if; BUF(0) <= D; Q <= BUF(level); nQ <= not BUF(level); end process; end pipeline; из симулятора:
  9. Можно добавить RS-триггер, который будет разрешать работу схемы, его выход подключить к SET. На R-вход триггера подавать сигнал окончания счета. На S-вход подать сигнал с определителя фронта входного сигнала (см. рисунок, выход RISE - для возрастающего фронта, FALL - для падающего). На входе желательно поставить еще один D-триггер и оба триггера тактировать низкой частотой (или clock enable). Подробности сами можете додумать
  10. нет, вручную ничего не ставил. Может быть непонятность возникла из-за того, что вход PLL (у компонента) называется так же, и моя цепь - CLKA или из-за того, что клок CLKA является не абсолютным, а derived. Склоняюсь к выводу что надо именно обращать внимание на PLL.GLA (derived clock) в отчете, т.к. по моей цепи CLKA отчет тайминга странный.
  11. Имеется проект на AGLN250 с встроенной PLL. Используется только один выход PLL: GLA, он подключен к цепи CLKA - это и есть мой глобальный клок для всего проекта. В констрейне задаю CLKA, в дополнение к этому в репорте тайминг-анализатора появляется клок PLLGEN1/Core:GLA, т.е. по сути тоже самое. В листинге задержек для одинаковых путей эти два клока отличаются тем, что в GLA присутствует "Clock generation" +3.363 ns, в CLKA - отсуствует; соответственно - CLKA как правило выше на соотв. величину. Вопрос: кто знает, что это за такая "задержка" и возможно она как-то связана с синхронизацией по входной частоте PLL? Но мне подобная синхронизация не нужна, в таком случае как избавиться от этого параметра или вообще игнорировать отчет для GLA (хотя там встречаются иногда цепи, не попавшие в отчет по CLKA)?
  12. Что это? А как прошиваете?
  13. Проверил инициализацию. Вроде бы все правильно wait комментил - не помогло Светодиод загорается только в момент включения и сразу же гаснет - как и раньше было. Подключен через буфер. Может надо какие-то настройки в Linker делать или еще где в проекте? Там все по дефолту. Оптимизацию отключал Подозрение такое, что генератор не запускается. Буду проверять... Хотя с Самбой все работает. Непонятные сообщения выдает SAMBA - Unlocked involved region - два раза Это нормально?
  14. Совсем убирал Wait, пробовал volatile. Ничего не меняется. На ножке 0 В. Осциллографом пока не смотрел. Видимо дело в инициализации, хотя сразу после нее состояние выхода устанавливается правильно
  15. 1. Можно ли как-то пользоваться SAM-BA после прошивки в контроллер своей программы, не загружая ее с помощью замыкания перемычек на плате? 2. Не получается помигать светодиодом. Команда, включающая или выключающая светодиод, которая находится в LowLevelInit (сейча закоментарена) выполняется, а дальше в Main - никаких движений int main() { AT91F_LowLevelInit(); //программа как будто останавливается здесь //loop forever while(1) { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, (1<<5) ); wait(); AT91F_PIO_SetOutput( AT91C_BASE_PIOA, (1<<5) ); wait(); } } --------------------------------------------------------------------------- #include "ioat91sam7s256.h" #define __inline inline #include "lib_AT91SAM7S256.h" #define true -1 #define false 0 #define AT91F_Default_FIQ_handler 1 #define AT91F_Default_IRQ_handler 2 #define AT91F_Spurious_handler 3 void AT91F_LowLevelInit( void) { int i; AT91PS_PMC pPMC = AT91C_BASE_PMC; //* Set Flash Waite sate // Single Cycle Access at Up to 30 MHz, or 40 AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS ; //* Watchdog Disable AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS; //* Set MCK at 48 054 850 // 1 Enabling the Main Oscillator: // SCK = 1/32768 = 30.51 uSecond // Start up time = 8 * 6 / SCK = 56 * 30.51 = 1,46484375 ms pPMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x06 <<8) | AT91C_CKGR_MOSCEN )); // Wait the startup time while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS)); // 2 Checking the Main Oscillator Frequency (Optional) // 3 Setting PLL and divider: // - div by 14 Fin = 1.3165 =(18,432 / 14) // - Mul 72+1: Fout = 96.1097 =(3,6864 *73) // for 96 MHz the error is 0.11% // Field out NOT USED = 0 // PLLCOUNT pll startup time estimate at : 0.844 ms // PLLCOUNT 28 = 0.000844 /(1/32768) pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 14 ) | (AT91C_CKGR_PLLCOUNT & (28<<8)) | (AT91C_CKGR_MUL & (72<<16))); // Wait the startup time while(!(pPMC->PMC_SR & AT91C_PMC_LOCK)); while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY)); // 4. Selection of Master Clock and Processor Clock // select the PLL clock divided by 2 pPMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2 ; while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY)); pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK ; while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY)); // Set up the default interrupts handler vectors AT91C_BASE_AIC->AIC_SVR[0] = (int) AT91F_Default_FIQ_handler ; for (i=1;i < 31; i++) { AT91C_BASE_AIC->AIC_SVR = (int) AT91F_Default_IRQ_handler ; } AT91C_BASE_AIC->AIC_SPU = (int) AT91F_Spurious_handler ; //------------------------------------------------------------------ //Init of PIO //enable clock to PIOA AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ); //config directions AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, (1<<5) ); //PER & OER //AT91F_PIO_SetOutput( AT91C_BASE_PIOA, (1<<5) ); } __ramfunc void wait(void) { int time; for (time = 0; time < 1E+6; time++); }
  16. Gerber действительно намного точнее. _Почти_ идеально
  17. В GERBER (формат 2:5 с разр. 0,01 мил) конечно намного меньне этот эффект, но все равно на максимальном увеличении кое-где заметны отклонения. PCB Design Check нашел 7 нарушений Clearance (track-to-track), хотя Design Rule Check в PCB нарушений не находит. Как тут быть? Clearance = 9.84 mil ~= 0.25 mm
  18. В Protel 2004 (без сервиспаков) на печать выводится ПП с дорожками, смещенными относительно контактных площадок: хотя в самом редакторе PCB ничего не смещено: Вопрос 1: Можно ли как-то исправить? Вопрос 2: Повлияет ли это при заказе платы в какой-нибудь фирме? (Не знаю какие они там форматы используют.)
  19. Подскажите, есть ли такие микросхемы (микросборки)
  20. Спасибо, попробуем. Точнее говоря я не ставлю везде 32 bit, а просто ничего не пишу в range (это соответствует по умолчанию 32bit). И потом вижу после синтеза, что куча триггеров у меня занята. Вот так и определяю, что неиспользуемые триггеры не удаляются. А счетчики у меня считают до определенной константы, потом сбрасываются, из этого я делаю вывод, что биты разрядности, соответствующие числам, большим этой константы у меня не используются и должны удаляться.
  21. Можно ли создать массив переменных типа integer но с разной разрядностью? типа такого TYPE t_delays IS ARRAY(0 TO Noutsignals-1) OF integer range 0 to (2**17-1); Как при этом задать разрядность для каждой из переменной массива? Если поставить везде 32 bit (мне этого достаточно), то используются лишние триггеры и компилятор их не удаляет.
  22. до сегодняшнего дня совсем не понимал все ясно, спасибо за разъяснения :rolleyes:
  23. :smile3046: Вот как я сделал (кусок из программы): Почему то раньше не получалось, сделал как вы написали - вроде все проходит и синтезатор память добавляет, хотя саму работу памяти я еще не тестировал. [ответ на следующее сообщение] Нужно это для того чтобы в моей entity использовать внутреннюю sram память на кристалле (Actel APA075). Не хотелось писать еще один файл верхнего уровня, объединяющий мою entity и компонент SRAM. Хотя я уже попробовал их соединить в схематик, сделав файл схематик - уровнем top. Но как я только входы/выходы меняю, нужно обновлять symbol, рисовать связи - мне показалось это неудобным. Может я чего-то недопонимаю? library IEEE; use IEEE.STD_LOGIC_1164.all; entity temp is port( sramout: out STD_LOGIC_VECTOR(7 downto 0)) end temp; --}} End of automatically maintained section architecture temp of temp is component sram8x256 port(DO : out std_logic_vector (7 downto 0); DI : in std_logic_vector (7 downto 0); WRB : in std_logic; RDB : in std_logic; WADDR : in std_logic_vector (7 downto 0); RADDR : in std_logic_vector (7 downto 0)); end component; begin R_256_8: sram8x256 port map(DO => DOs, DI => DIs, WRB => WRBs, RDB => RDBs, WADDR => WADDRs, RADDR => RADDRs ); -- enter your statements here -- process(GlobalCLK,SVReset) variable rambuf : std_logic_vector(15 downto 0); variable counter0: integer range 0 to 7; variable temp: std_logic_vector (7 downto 0); begin if SVReset = '0' then DIs <= (others => '1'); WRBs <= '1'; RDBs <= '1'; WADDRs <= (others => '1'); RADDRs <= (others => '1'); counter0 := 0; temp := DOs; DIs <= "01010101"; elsif Rising_edge(GlobalCLK) then case counter0 is when 0 => WRBs <= '0'; WADDRs <= int_to_stN(counter0,7); RADDRs <= int_to_stN(counter0,7); when 1 => DIs <= "10101010"; when 2 => WRBs <= '1'; when 3 => RDBs <= '0'; when 4 => sramout <= DOs; when 5 => RDBs <= '1'; when others => end case; counter0 := counter0 + 1; end if; end process; end temp;