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

Штабскапитан Овечкин

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о Штабскапитан Овечкин

  • Звание
    Частый гость
    Частый гость
  1. Имеется плата с VirtexE на борту. Конфигурационный массив живёт во флешке AM29LV160. Заливается через самопальный конфигуратор, выполненный на CPLD. FPGA Конфигурируется через Slave Serial. В процессе заливки флешки конфигурационный массив льётся одновременно и в Вёртекс для контроля корректности принятых данных - если Вёртекс в результате установил DONE, стало быть, данные пришли без ошибок, и программатор считает операцию выполненной. Проблема вот в чём. В процессе заливки FPGA успешно конфигурируется, но при сбросе и попытке переконфигурации от флешки получаем облом. В результате муторных экспериментов удалось наконец корректно залить флешь, используя вместо Xilinx Platform Cable программатор, который работает через LPT. Всё остальное неизменно. Разница, по-видимому, только в скорости. Вёртекс - достаточно быстрый чип и справляется на такой скорости, а вот флешка, видимо, подкачала в этом плане. Выход, конечно, есть - шить через LPT, но это тянет за собой целую кучу неудобств. Лучше всего, конечно, было бы найти способ как-то шить через Platform Cable. А для этого, получается, надо как-то понизить его скорость. В настройках Импакта самая низкая частота TCK для Platform Cable 750 kHz, но этого, похоже, недостаточно. Есть какое-нибудь решение? Может быть, в конце-концов, можно что-то сделать с самой железякой, Xilinx Platform Cable, если уж софт не даёт ничего в этом плане?
  2. Имеется некий девайс, состоящий из материнской платы, в которую через 2 80-пиновых разъёма вставляется модуль. Требуется создать единый нетлист данного девайса. Два писибишника со всеми связями в один удалось объединить. А вот как дальше быть? Не хочется врукопашную таскать связи между соответствующими пинами разъёмов на мамке и на модуле. Есть ли какой-то финт ушами на этот случай?
  3. Имеется плата с четвёртым вёртексом и третьим спартаном на борту. Задача вЫчитать назад конфигурацию этих FPGA через JTAG.
  4. По поводу циклов теперь, кажется, всё ясно. Но! Вот тут мне уже натурально худо стало!!! Это же сплошное минное поле!!! Это ещё что за напасть такая?! Разъясните, пожалуйста! А как же ещё можно присваивать значение переменной? А что значит "блокирующее присвоение"? Прошу прощение за такое количество дурацких вопросов. Дело в том, что никогда не мог усвоить формальные правила без иллюстраций на живом материале. Именно поэтому в данный момент мучаю ни в чём не повинную CPLD вместо того, чтобы пытаться всё предварительно отмоделировать. :krapula:
  5. Благодарю. Очень-очень медленно и со скрипом просачивается в голову идеология параллельных процессов. Когда рисовал второй вариант, было-таки смутное ощущение, что делаю нечто не вполне приличное. А вот что именно, никак не мог уловить. Теперь вытащили эту занозу из мозгов, за что душевно благодарю. Только непонятно тогда, для чего вообще нужна конструкция for - loop в синтезируемом подмножестве?! Какой толк из неё можно добыть?!
  6. Как ни бьюсь я мордой апстол, никак не удаётся всосать идеологию этого языка. Подскажите пожалуйста, в чём отличие нижеприведённых конструкций. process --GetCommand variable i : integer; variable shift : bit_vector(3 downto 0); begin if i = 3 then i := 0; command <= shift; elsif tck'event and tck = '1' then shift(i) := tms; i := i + 1; end if; end process; process --GetCommand variable i : integer; variable shift : bit_vector(3 downto 0); begin for i in 0 to 3 loop if tck'event and tck = '1' then shift(i) := tms; end if; end loop; if i = 3 then command <= shift; end if; end process; Первая работает, вторая - мертвяк. Разве же это не одно и то же, только в другом изложении?!
  7. На счёт "не прятать" - почему так? И что значит "лучше"? ВХДЛ же разве не формальный язык?! Юридически я разве неправ? Где сказано, что это запрещено? По-моему, это вопиющая несправедливость. По-моему, это "просто оголтелый расизм"©! На счёт чувствительности - написал "process(tck, tms)", ничего не изменилось.
  8. Signal ret_param.boady<0> cannot be synthesized, bad synchronous description. The description style you are using to describe a synchronous element (register, memory, etc.) is not supported in the current software release. Чем я не угодил этому ИСЕ? library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity loader54 is Port ( flash_a : out STD_LOGIC_VECTOR (19 downto 0); flash_d : inout STD_LOGIC_VECTOR (15 downto 0); flash_rst : out STD_LOGIC; flash_ce : out STD_LOGIC; flash_oe : out STD_LOGIC; flash_we : out STD_LOGIC; flash_byte : out STD_LOGIC; flash_ry : in STD_LOGIC; tck, tms, tdi : in bit; tdo : out bit; clk : in STD_LOGIC; clkD1, LED : out STD_LOGIC; D1 : out bit_VECTOR(3 downto 0) ); end loader54; architecture Behavioral of loader54 is signal rd, wr, erase, reset, q, q1: bit; type in_shifter is record boady : bit_vector(3 downto 0); ready : boolean; end record; function in_shifter_rdy(signal ck, inp : bit) return in_shifter is variable ret_param : in_shifter; variable i : integer; begin i := -1; if i < 3 then ret_param.ready := false; if ck'event and ck = '1' then i := i + 1; ret_param.boady := ret_param.boady ror 1; ret_param.boady(0) := inp; end if; else ret_param.ready := true; end if; return ret_param; end; ---------------------------------------- begin process --GetCommand variable command : in_shifter; begin command := in_shifter_rdy(tck,tms); if command.ready then case command.boady is when X"f" => reset <= '1'; when X"5" => rd <= '1'; when X"a" => wr <= '1'; when X"9" => erase <= '1'; when others => reset <= '0'; rd <= '0'; wr <= '0'; erase <= '0'; end case; end if; d1(0) <= reset; d1(1) <= rd; d1(2) <= wr; d1(3) <= erase; end process; end Behavioral;
  9. Как в Альтиуме апдейтить компонент на схеме и в PCB после редактирования в библиотеке?
  10. Есть ли в AD (схематика) аналог пикадовского "Edit Nets". То есть, нужно просмотреть все цепи.
  11. Почему в Аьлтиуме библиотеки после каждого редактирования множатся как тараканы? Появляется ещё одна с тем же именем. Как избавиться от этого явления? Кроме того, отредактированная библиотека оказывается во вложенной папке, да не просто вложенной, а дважды вложенной. После пятого редактирования путь будет как до луны!
  12. Бодрый день всем. Всех категорически благодарю за отвеы. Сабжевую задачу, кажется, решил. Не хочется заводить новую тему, поэтому попрошу вашей помощи в этой. В первую очередь обращаюсь к тем, у кого под рукой имеется XILINX ISE. Пожалуйста, посмотрите, что не так в коде. library IEEE; Library UNISIM; use UNISIM.vcomponents.all; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use UNISIM.vcomponents.all; package vector10x10 is type vect10 is array(9 downto 0) of std_logic_vector(9 downto 0); type vect10x10 is array(integer range 9 downto 0) of std_logic_vector(9 downto 0); end vector10x10; library IEEE; Library UNISIM; use UNISIM.vcomponents.all; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use UNISIM.vcomponents.all; use vector10x10.all; entity ADC_147 is port( generator_p,generator_n:in std_logic; clkout_p,clkout_n: out std_logic_vector(9 downto 0); clkFromADC_p,clkFromADC_n: in std_logic_vector(9 downto 0); adc10in_p ,adc10in_n:in vect10x10; adc10out:out vect10x10 ); end ADC_147; architecture Behavioral of ADC_147 is signal clk:std_logic; signal tmp1, counter, ADCclk : std_logic_vector(9 downto 0); signal tmp : std_logic_vector(15 downto 0); signal input, average :vect10x10; begin process begin if clk'event and clk = '1' then counter <= counter+1; end if; end process; IBUFDS_inst : IBUFDS port map ( O => clk, I => generator_p, IB => generator_n ); qwe: for x in 9 downto 0 generate clkTO : OBUFDS port map ( O => clkout_p(x), OB => clkout_n(x), I => counter(1) ); clkFROM : IBUFDS port map ( O => ADCclk(x), I => clkFromADC_p(x), IB => clkFromADC_n(x) ); ewq: for y in 9 downto 0 generate inputs: IBUFDS port map ( O => input(x)(y), I => adc10in_p(x)(y), IB => adc10in_n(x)(y) ); end generate; process variable st: integer:=0; begin if ADCclk(x)'event and ADCclk(x) = '1' then st:=st+1; if st=64 then average(x) <= tmp(15 downto 6); st:=0; tmp <= (others => '0'); else tmp <= tmp + not input(x); end if; end if; end process; end generate; adc10out <= average; end Behavioral; Синтезатор утверждает, что Multi-source на сигнале tmp. При этом, если убрать последнюю строку, (adc10out <= average;), синтез проходит успешно. Не могу понять, каким образом эта строка портит сигнал tmp. И как вытащить наружу результат, полученный в процессе.
×
×
  • Создать...