Штабскапитан Овечкин
Участник-
Постов
102 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о Штабскапитан Овечкин
-
Звание
Частый гость
-
Имеется плата с VirtexE на борту. Конфигурационный массив живёт во флешке AM29LV160. Заливается через самопальный конфигуратор, выполненный на CPLD. FPGA Конфигурируется через Slave Serial. В процессе заливки флешки конфигурационный массив льётся одновременно и в Вёртекс для контроля корректности принятых данных - если Вёртекс в результате установил DONE, стало быть, данные пришли без ошибок, и программатор считает операцию выполненной. Проблема вот в чём. В процессе заливки FPGA успешно конфигурируется, но при сбросе и попытке переконфигурации от флешки получаем облом. В результате муторных экспериментов удалось наконец корректно залить флешь, используя вместо Xilinx Platform Cable программатор, который работает через LPT. Всё остальное неизменно. Разница, по-видимому, только в скорости. Вёртекс - достаточно быстрый чип и справляется на такой скорости, а вот флешка, видимо, подкачала в этом плане. Выход, конечно, есть - шить через LPT, но это тянет за собой целую кучу неудобств. Лучше всего, конечно, было бы найти способ как-то шить через Platform Cable. А для этого, получается, надо как-то понизить его скорость. В настройках Импакта самая низкая частота TCK для Platform Cable 750 kHz, но этого, похоже, недостаточно. Есть какое-нибудь решение? Может быть, в конце-концов, можно что-то сделать с самой железякой, Xilinx Platform Cable, если уж софт не даёт ничего в этом плане?
-
К сожалению обе схемы утрачены. :crying:
-
PCAD Как создать единый нетлист для двух плат?
Штабскапитан Овечкин опубликовал тема в P-CAD 200x howto
Имеется некий девайс, состоящий из материнской платы, в которую через 2 80-пиновых разъёма вставляется модуль. Требуется создать единый нетлист данного девайса. Два писибишника со всеми связями в один удалось объединить. А вот как дальше быть? Не хочется врукопашную таскать связи между соответствующими пинами разъёмов на мамке и на модуле. Есть ли какой-то финт ушами на этот случай? -
Имеется плата с четвёртым вёртексом и третьим спартаном на борту. Задача вЫчитать назад конфигурацию этих FPGA через JTAG.
-
По поводу циклов теперь, кажется, всё ясно. Но! Вот тут мне уже натурально худо стало!!! Это же сплошное минное поле!!! Это ещё что за напасть такая?! Разъясните, пожалуйста! А как же ещё можно присваивать значение переменной? А что значит "блокирующее присвоение"? Прошу прощение за такое количество дурацких вопросов. Дело в том, что никогда не мог усвоить формальные правила без иллюстраций на живом материале. Именно поэтому в данный момент мучаю ни в чём не повинную CPLD вместо того, чтобы пытаться всё предварительно отмоделировать. :krapula:
-
Благодарю. Очень-очень медленно и со скрипом просачивается в голову идеология параллельных процессов. Когда рисовал второй вариант, было-таки смутное ощущение, что делаю нечто не вполне приличное. А вот что именно, никак не мог уловить. Теперь вытащили эту занозу из мозгов, за что душевно благодарю. Только непонятно тогда, для чего вообще нужна конструкция for - loop в синтезируемом подмножестве?! Какой толк из неё можно добыть?!
-
Как ни бьюсь я мордой апстол, никак не удаётся всосать идеологию этого языка. Подскажите пожалуйста, в чём отличие нижеприведённых конструкций. 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; Первая работает, вторая - мертвяк. Разве же это не одно и то же, только в другом изложении?!
-
На счёт "не прятать" - почему так? И что значит "лучше"? ВХДЛ же разве не формальный язык?! Юридически я разве неправ? Где сказано, что это запрещено? По-моему, это вопиющая несправедливость. По-моему, это "просто оголтелый расизм"©! На счёт чувствительности - написал "process(tck, tms)", ничего не изменилось.
-
В чём крестьянин неправ?
Штабскапитан Овечкин опубликовал тема в Языки проектирования на ПЛИС (FPGA)
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; -
Вопросы начинающих
Штабскапитан Овечкин ответил KA_ru тема в Altium Designer, DXP, Protel
Получилось. Благодарю душевно. -
Вопросы начинающих
Штабскапитан Овечкин ответил KA_ru тема в Altium Designer, DXP, Protel
Как в Альтиуме апдейтить компонент на схеме и в PCB после редактирования в библиотеке? -
Вопросы начинающих
Штабскапитан Овечкин ответил KA_ru тема в Altium Designer, DXP, Protel
Есть ли в AD (схематика) аналог пикадовского "Edit Nets". То есть, нужно просмотреть все цепи. -
Вопросы начинающих
Штабскапитан Овечкин ответил KA_ru тема в Altium Designer, DXP, Protel
Почему в Аьлтиуме библиотеки после каждого редактирования множатся как тараканы? Появляется ещё одна с тем же именем. Как избавиться от этого явления? Кроме того, отредактированная библиотека оказывается во вложенной папке, да не просто вложенной, а дважды вложенной. После пятого редактирования путь будет как до луны! -
Timmy, благодарю душевно!!! Кажется, полегчало!!! :beer:
-
Бодрый день всем. Всех категорически благодарю за отвеы. Сабжевую задачу, кажется, решил. Не хочется заводить новую тему, поэтому попрошу вашей помощи в этой. В первую очередь обращаюсь к тем, у кого под рукой имеется 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. И как вытащить наружу результат, полученный в процессе.