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

Maverick_

Модератор
  • Постов

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

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


  1. К сведению: Пример проекта AMBA приведен в книге Суворова Е.А. Шейнин Ю.Е. Проектирование цифровых систем на VHDL. Скачать: http://community.livejournal.com/ru_hdl_fpga/568.html
  2. Доброго времени суток!!! Пожалуйста, помогите в архиве Mem_test.zip проект для Xilinx ISE 8.02.03 в котором есть два модуля: 1) модуль для работы с SRAM памятью cy7c1061av33 (файл mem.vhd) Циклограмма работы в приложенном даташите страницы 5 -> (Read Cycle No. 2 (OE Controlled)) 6 -> (Write Cycle No. 1 (CE1 or CE2 Controlled)) 2) попытка сделать модуль для проверки работы с памятью ( файл count_pwm.vhd), но из-за того что не могу точно определить задержку данных в тактах - то цифровой компаратор еще не вставлял. Идея заключается в следующем, записать определенное количество данных(у меня реализовано циклическая запись и считывания 1023 значения инкрементируемого счетчика), а потом при считывании проверять компаратором значения записанных и прочитанных данных. Собственно в чем вопрос проверить правильность модуля работы с SRAM памятью т.к. на плате практически все дорожки идут под микросхемой SRAM и есть большая вероятность, что могут быть зацепки между проводниками. Оборудование у меня имеющиеся мне кажется не позволит достоверно сказать о правильности работы с SRAM (в наличии только 4-х канальный осцилограф) - мое мнение. Хотелось бы быть полностью уверенным хотя бы в логическом уровне. С моей стороны к mem.vhd по результатам моделирования вопросов нет, если у Вы скажите что все хорошо в логическом уровне, тогда буду пытаться в железе писать и читать и искать ошибки в плате. Чуть не забыл упомянуть :) , что работа с SRAM будет происходить не более, чем на 32 МГц. P. S. Понимаю, что Вы не учителя в школе и проверять не обязаны, но я просто не знаю к кому обратиться за помощью. С уважением Maverick!!!
  3. например у Xilinx: http://www.xilinx.com/products/boards/s3_sk_promo.htm
  4. Тут вот какое дело получилось. Это предприятие (которое работает на наше предприятие) взяло на практику студента. Дали ему задание разбираться с USB контроллером и его программировать. Связавшись с ним, он ответил что просто забыл вывести сигнал синхронизации автомата GPIF наружу. Студент этот потом уволился и получилось как всегда :). Разработчик работая вместе, я так понимаю, даже не вникал в работу студента и USB контроллера. Я с этим разработчиком (который писал модуль для ПЛИС) разговаривал и при разговоре было видно вообще делиться информацией никакой не хочет, отвечая работает и пользуйся, мне такой ответ не подходит. Когда вопрос по USB контроллеру он отвечает, что он этим не занимался и отправляет к разработчику. Его конечно я могу понять деньги и все такое, но все таки... Всем спасибо за помощь!!! :a14:
  5. Дело может быть в том как ты с ней работаешь, т.е. как производишь цикл считывания и запись данных. Проверь по циклограмме работы. Присоединил наиболее последний вариант даташита. Удачи!
  6. Вот что ответил разработчик (дословно из письма): . Для согласования двух разно скоростных потоков данных необходимо учитывать следующие их характеристики. - Средняя интегральная мощность потоков, которая характеризуется средней скоростью передачи за время сеанса. - Максимальная мощность потоков , которая характеризуется скоростью обмена при передачи одного непрерывного пакета - Временем между двумя соседними пакетами. В нашем случае поток данных от CCD матрицы практически равномерный и имеет мощность < 6* 16 Мбит/сек (с учетом межстрочных интервалов около 85 Мбит/сек ). Контроллер USB в выбранном режиме работы ”balk” передает данные пакетами по 512х 16 бит на частоте чуть ниже 24 МГц, то есть с мощностью около 380 Мбит/сек. Но при этом между пакетами существуют временные интервалы, которые зависят от загрузки HOST контроллера. При моно связи они снижают производительность в два раза и средняя скорость становиться равной около 200 Мбит/сек. Существует еще один вид пакетирования верхнего уровня - данные принимаются программой обработки блоками по 32 000 шестнадцатиразрядных слов, после чего происходит их обработка до следующего приема. Это интервал обработки является самым критичным. Его время напрямую зависит от мощности используемого компьютера и его загрузки. В этом случае для передачи полного потока надо выбрать согласующее FIFO (в нашем случае внутренне FIFO ПЛИС), которое бы не успело переполниться за время интервала обработки. В том проекте, который вам передан FIFO - 4096 х 16 бит будет заполнено за 680 мкс. На имеющихся у нас компьютерах с тактовой частотой 1.7 ГГц программа успевает выполнить обработку между принимаемыми блоками. З.Ы. Маленькое пояснение к тексту. Это USB канал используется для передачи изображения с CCD матрицы (1002*1004), которая тактируется 6МГц. З.Ы. З.Ы. Почитав книгу Агурова "Интерфейс USB Практика использования и программирования" на мой взгляд здесь более подходит изохронная передача. К сожелению пока код выложить не могу (начальство не разрешает). О том что код написан корректно я засомневался сразу, а здесь еще и: WARNING:PhysDesignRules:372 - Gated clock. Clock net u4_usb_data_controll/_cmp_eq0000 is sourced by a combinatorial pin. This is not good design practice. Use the CE pin to control the loading of data into the flip-flop. WARNING:PhysDesignRules:372 - Gated clock. Clock net u4_usb_data_controll/_not0011 is sourced by a combinatorial pin. This is not good design practice. Use the CE pin to control the loading of data into the flip-flop. Спасибо des00 :a14:
  7. Мне ответили так на этот вопрос. От контроллера приходит короткий импульс готовности (порядка 24 нс), модуль в ПЛИС должен не более чем через такт работы контроллера USB (48 МГц) дать сигнал готовности данных в фифо. Сказал, что на 100 МГц он не мог захватить передний фронт импульса
  8. Мне прислали разработчики (работают на наше предприятие по наряд заказу) модуль (на VHDL) для работы с контролером USB CY7C68013A. Теперь собственно вопрос: Может ли корректно работать модуль (на VHDL) на 200 МГц если синтезатор показывает следующее: Timing Summary: Selected Device : 3s400pq208-4 --------------- Speed Grade: -4 Minimum period: 8.431ns (Maximum Frequency: 118.610MHz) Minimum input arrival time before clock: 8.758ns Maximum output required time after clock: 9.216ns Maximum combinational path delay: 10.426ns Проверка на плате конечно показало что устройство работает, но корректно ли его работа в ПЛИС? Могут ли быть сбои или возникнуть метастабильное состояние? З.Ы. Мое мнение это не есть гуд. Но всякое бывает. :(
  9. Пример простого генератора псевдослучайных чисел с кратким объяснением работы смотри вложения :)
  10. Для работы с двунаправленными портами: Делаешь две программы: одна читает из порта другая записывает в этот порт. Потом создаешь файл верхнего уровня в котором объединяешь две программы через if и обязательно должно быть else "zzzzz" (количество z - твоя разрядность порта). Для более полного понимания можешь открыть описание на inout буфер. :) Просматривая форум и наткнулся на http://electronix.ru/forum/index.php?showtopic=45434 В принципе это и есть ответ на твой вопрос
  11. Конечный результат я так понимаю вам нужно что - то подобное что и мне на http://electronix.ru/forum/index.php?showtopic=43110
  12. Я этого не знал. Тогда просьба. Вы можете дать эти исходники. Мне нужен 32бит/32бит и вывод остатка 32бит(дробный). Буду очень признателен если еще и на VHDL
  13. Впервые слышу чтобы CoreGenerator давал исходный код!!! Извини за глупый вопрос, ты уверен? Ради этого создал проект модуля деления двух чисел с остатком. Открыл папку с проектом просмотрел все файлы, что создал CoreGenerator но исходного кода я не увидел!!! :( P. S. Пользуюсь Xilinx ISE 8.02.03 полностью лицензионным.
  14. Буду благодарен еcли cможeте поделиться SPI core (если мастер и если можно с описанием) на: starbox @ meta точка ua. Спасибо.
  15. Спасибо! :crying: Но у меня Xilinx ISE 8.2.03 пишет следующие ошибки при попытке синтеза ========================================================================= * HDL Compilation * ========================================================================= Compiling vhdl file "C:/PROJECTS_XILINXS/qqq/test.vhd" in Library work. Entity <divide> compiled. ERROR:HDLParsers:800 - "C:/PROJECTS_XILINXS/qqq/test.vhd" Line 42. Type of ready_xhdl3 is incompatible with type of NOT. ERROR:HDLParsers:3312 - "C:/PROJECTS_XILINXS/qqq/test.vhd" Line 82. Undefined symbol 'ShiftLeft'. ERROR:HDLParsers:1209 - "C:/PROJECTS_XILINXS/qqq/test.vhd" Line 82. ShiftLeft: Undefined symbol (last report in this block) ERROR:HDLParsers:3312 - "C:/PROJECTS_XILINXS/qqq/test.vhd" Line 88. Undefined symbol 'ShiftRight'. ERROR:HDLParsers:1209 - "C:/PROJECTS_XILINXS/qqq/test.vhd" Line 88. ShiftRight: Undefined symbol (last report in this block) -->
  16. Сделай модуль с двунаправленными выводами и ПЛИС будет полностью работать с внешней памятью, а когда DSP потребуются данные из памяти то ПЛИС будет считывать эти данные из памяти и передавать в DSP. В простоях DSP ПЛИС будет заполнять память новыми данными. Правда здесь должна быть полная согласованость по времени с DSP. Другими словами, как раньше писалось, на ПЛИС организовываешь арбитр. Или надо было ставить двупортовую память для таких целей.
  17. Посмотри ветку и вложенный файл ;) http://electronix.ru/forum/index.php?showt...mp;#entry257812
  18. Спасибо! Мне нужен открытый код, заказчик требует!!!
  19. Я ничего не понял в этой библиотеке. Очень прошу помогите, уже горит!!!!! поискал в интернете наткнулся на http://www.kip.uni-heidelberg.de/ti/TRD/al...ydiv/index.html просинтезировал и промоделировал результат с калькулятором сходится :) Но хотелось бы иметь варианты и другие.
  20. Не знаю кто как у меня на работе принято делать в начале макетную плату, а в макетной взять заранее стабилизаторы напряжения с завышенными требованиями. Проверить работоспособность прибора в целом, а потом на основе полученных результатов макетирования спроектировать боевую плату. И мое мнение таково, что в принципе должны быть у разработчика под рукой макетные платы, где все можно проверить и посмотреть. Внешние параметры (на какие токи и емкости нагружены выходы) кажется сильно влияют на потребляюмую мощность ПЛИС, конечно в XPower можно задать и ориентировочные значения и получить рассчитанное значение. :) З.Ы. Вопрос: Какой же путь для выбора стабилизаторов выбрать? на мой взгляд сделать макетную плату и удостовериться во всем (если расчетные значения совпадут с практикой -- супер)
  21. ВЫ их проверяли реально работают? т.е. что я хочу спросить вы плату с ПЛИС соединяли с компьютером и производили обмен И не могли посмотреть архив который я выложил по UART там тоже имеется исходник от Altera и сравнить со своим?
  22. Дополняю еще необходимо знать нагрузку по каждому выходу (емкость, ток). Лучшая проверка - запрограммировать и посмотреть на вольтметре и амперметре реальные значения, так как бывает что теория расходится с практикой! :)
  23. ViLand извини но объем 20 Мб я буду на почту дого заливать (diall up(выход через телефонную линию) Internet), :crying: попробуй еще раз должно работать
  24. Пример VHDL испытательного стенда (VHDL Test Bench) VHDL испытательный стенд - программа VHDL, которая описывает ввод моделирования, использующего процедуры языка стандартного VHDL. Данный пример VHDL испытательного стенда позволяет читать из текстового файла и записывать результаты моделирования в текстовый файл, находящиеся в папке проекта. Код рабочий!!! Файлы для записи и чтения должны находится в папке проекта Извините код правильно не вставил - получилось и к тому же спешил LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; use ieee.std_logic_arith.all; use std.textio.all; LIBRARY UNISIM; USE UNISIM.Vcomponents.ALL; ENTITY shema_shema_sch_tb IS END shema_shema_sch_tb; ARCHITECTURE behavioral OF shema_shema_sch_tb IS COMPONENT shema PORT( Clock : IN STD_LOGIC; DOOR : IN STD_LOGIC_VECTOR (11 DOWNTO 0); I : OUT STD_LOGIC_VECTOR (9 DOWNTO 0); J : OUT STD_LOGIC_VECTOR (9 DOWNTO 0); PIXEL : OUT STD_LOGIC_VECTOR (11 DOWNTO 0); Reset : IN STD_LOGIC; W : OUT STD_LOGIC; constt : IN STD_LOGIC_VECTOR (11 DOWNTO 0); xx : OUT STD_LOGIC_VECTOR (2 DOWNTO 0); c1 : OUT STD_LOGIC; c2 : OUT STD_LOGIC; c3 : OUT STD_LOGIC; c4 : OUT STD_LOGIC; z1 : OUT STD_LOGIC; z2 : OUT STD_LOGIC; z3 : OUT STD_LOGIC; z4 : OUT STD_LOGIC; ih : OUT STD_LOGIC; jh : OUT STD_LOGIC; jl : OUT STD_LOGIC; ssjl : OUT STD_LOGIC_VECTOR (9 DOWNTO 0); cchk : OUT STD_LOGIC); END COMPONENT; SIGNAL Clock : STD_LOGIC; SIGNAL DOOR : STD_LOGIC_VECTOR (11 DOWNTO 0); SIGNAL PIXEL : STD_LOGIC_VECTOR (11 DOWNTO 0); SIGNAL Reset : STD_LOGIC; SIGNAL constt : STD_LOGIC_VECTOR (11 DOWNTO 0); SIGNAL z1 : STD_LOGIC; SIGNAL z2 : STD_LOGIC; SIGNAL z3 : STD_LOGIC; SIGNAL z4 : STD_LOGIC; SIGNAL I : STD_LOGIC_VECTOR (9 DOWNTO 0); SIGNAL J : STD_LOGIC_VECTOR (9 DOWNTO 0); SIGNAL xx : STD_LOGIC_VECTOR (2 DOWNTO 0); SIGNAL c1 : STD_LOGIC; SIGNAL c2 : STD_LOGIC; SIGNAL c3 : STD_LOGIC; SIGNAL c4 : STD_LOGIC; SIGNAL w : STD_LOGIC; SIGNAL ih : STD_LOGIC; SIGNAL jh : STD_LOGIC; SIGNAL jl : STD_LOGIC; SIGNAL ssjl : STD_LOGIC_VECTOR (9 DOWNTO 0); SIGNAL cchk : STD_LOGIC; BEGIN UUT: shema PORT MAP( Clock => Clock, DOOR => DOOR, PIXEL => PIXEL, Reset => Reset, constt => constt, z1 => z1, z2 => z2, z3 => z3, z4 => z4, I => I, J => J, w => w, xx => xx, c1 => c1, c2 => c2, c3 => c3, c4 => c4, ih => ih, jh => jh, jl => jl, ssjl =>ssjl, cchk => cchk ); read_from_file: process(Clock) variable indata_line: line; variable indata: integer; file input_data_file: text open read_mode is "DATA.txt"; begin if rising_edge(Clock) then readline(input_data_file,indata_line); read(indata_line,indata); DOOR <= conv_std_logic_vector(indata,12); if endfile(input_data_file) then report "end of file -- looping back to start of file"; file_close(input_data_file); file_open(input_data_file,"DATA.txt"); end if; end if; end process; write_to_file: process(Clock) variable outdata_line: line; variable outdata: integer :=0; file output_data_file: text open write_mode is "vhdl_output.txt"; begin if rising_edge(Clock) then outdata := 1*CONV_INTEGER(To_X01Z(z1))+2*CONV_INTEGER(To_X01Z(z2))+4*CONV_INTEGER(To_X01Z(z 3))+8 *CONV_INTEGER(To_X01Z(z4)); write(outdata_line,outdata); writeline(output_data_file,outdata_line); end if; end process; clock_gen: process begin Clock <= '0'; wait for 50 ns; Clock <= '1'; wait for 50 ns; end process; reset_gen: process begin Reset <= '0'; wait for 10 ns; Reset <= '1'; wait; end process; const_gen: process begin constt <= "000000000000"; wait for 10 ns; constt <= "000000010100"; wait; end process; END; [\code]
×
×
  • Создать...