kas
-
Постов
76 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные kas
-
-
Вы где слабую единицу планируете применить? В синтезируемом модуле или в модуле тестового воздействия?
-
спасибо, понял, думал код как в си работает.
На время изучения HDL, ИМХО, надо бы подзабыть про языки программирования, да вспомнить цифровую схемотехнику.
Изучать VHDL я начинал с Бибило Основы языка VHDL.
-
Приветствую!
[cut]
Так что это не барабан - это так себе - маленький бубен :)
Успехов! Rob.
Спасибо большое! Все получилось. Моя ошибка была в том, что я пытался сразу всю систему синтезировать.
-
Приветствую!
[cut]
Пришлось достать барабан - взял файл microblaze_0_wrapper_xst.prj который генерит EDK для синтеза. Скриптом затянул исходники из него в Synplify (ну по пути пришлось декодировать их, а-я-яй! но я потом все стер ;) ) Синтезировал и edif подставил вместо родного ngc. Результат - времянки сошлись с первого захода! И размер на 2% меньше чем результат от xst!!!! И это только блок Microblaze. Надо будет весь EDK проект перегнать так - посмотреть что получится.
Успехов! Rob.
Можно поподробнее про барабан? Как затягивать исходники в Synplify?
-
Не имею на этот счет своего особого мнения. Ку!
-
Для электрически соединненных цепей внутри компонента нужно проставить одинаковые десигнаторы. Т.е. у вас должы остаться только десигнаторы A и B.
Тоже не понятно почему так. Есть JumperID, который показывает группу соединенных выводов внутри микросхемы. Так зачем мне кроме JumperID еще и десигнаторы одинаковыми делать? Идея про JumperID хорошая, но, ИМХО, немного не доработанная.
-
kas выложите компонент, я запутался и что и как не получается.
Пожалуйста, вот весь тестовый проект.
Да дело в этом. Этот механизм подразумевает, что данные PAD физически замкнуты внутри посадочного место. (например в тактовый кнопке с 4 Pad) и достаточно подвести сигнал только к одной из PAD, а между собой на плате можно и не соединятьЯ понимаю что этот механизм говорит о замыкании выводов внутри компонента, но не могу понять почему альтиум зная о замыканиях внутри компонента не может определить замыкания между разными цепями через компонент. Похоже программисты альтиума тут немного не дороаботали :).
-
Вопрос про JumperID. Есть некоторый компонент, у которого сигналы "АА" и "ББ" выведены на несколько выводов. Я, при создании посадочного места для выводов сигнала "АА" указал параметр JumperID=1, а для выводов сигнала "ББ" JumperID=2. Получилось примерно следующее:
имя designator jumperID "АА" A1 1 "АА" A2 1 "АА" A3 1 "АА" A4 1 "ББ" Б1 2 "ББ" Б2 2 "ББ" Б3 2
Считаю, что этими действиями я указал соединения выводов внутри кристалла. Делаю следующий шаг - соединяю у компонента в схеме выводы А1 и Б1 цепью "НетАБ", выводы А2...А4 подключаю к цепи "НетАА", а выводы Б2, Б3 подключаю к цепи "НетББ". Создаю печатную плату, на плате вижу все цепи, в том числе и соединение между А1 и Б1, развожу все цепи, делаю DRC и не получаю ошибки, при этом правило запрещающее соединять цепи с разными именами включено и работает.
Получается либо я не так понимаю механизм работы JumperID, либо я что-то не настроил как надо, либо это программисты в альтиуме что-то не дописали.
Помогите, пожалуйста, разобраться.
-
в ISE особого смысла пользоваться TCL скриптами нет, так как там свой "язык" констрейнов
поэтому даже если последние ISE и поддерживают TCL, то зачем - мне не понятно
смсла может и нет, но другого пути вставить номер и дату сборки в проект автоматически я не нашел :05: .
Если кто подсажет как это сделать без tcl-скриптов - буду безмерно благодарен.
-
В ISE можно запустить tcl скрипт до синтеза?
Например в ISE нажимаю я "синтезировать", а уменя перед синтезом мой скрипт раз, и выполнился. Проверил там чего-нибудь, или даже подредактировал.
-
entity ramNxM is generic( AddrWidht : integer := 4; DataWidht : integer := 2); port ( clk : in std_logic; we : in std_logic; AddrA : in std_logic_vector(AddrWidht-1 downto 0); DataIn : in std_logic_vector(DataWidht-1 downto 0); AddrB : in std_logic_vector(AddrWidht-1 downto 0); DataOutA : out std_logic_vector(DataWidht-1 downto 0); DataOutB : out std_logic_vector(DataWidht-1 downto 0) ); end ramNxM; architecture Behavioral of ramNxM is type ram_type is array ((2**AddrWidht - 1) downto 0) of std_logic_vector (DataWidht-1 downto 0); signal RAM : ram_type; begin process (clk) begin if rising_edge(Clk) then if we = '1' then RAM(conv_integer(AddrA)) <= DataIn; end if; end if; end process; DataOutA <= RAM(conv_integer(AddrA)); DataOutB <= RAM(conv_integer(AddrB)); end Behavioral;
У меня такой код синтезируется в ISE'е. Память правда распределенная, но мне такую и надо.
-
Что-то я Вас не понимаю...Разумеется должна. Такая и есть. Так и нарисовано.
? :rolleyes:
Мы и не округляем отрицательные числа до большего по абсолютной величине - мы просто округляем к большему, когда дробная часть = 0.5 (независимо от знака числа).Какое смещение Вы имеете ввиду?
Например как на этой картинке
И уже совсем по детски конечно, но Matlab -7.5 округляет до -8
Вот я и пытаюсь разобраться. :)
-
Нет, ошибок в округлении нет - Вы ошиблись, решив, что -7.5 должно округляться к -7. Нарисуем числовую ось:
Когда значение попадает строго посередине между двух целых чисел, то его округляют к большему. Соответственно, для +7.5 большим является 8, а вот для -7.5 большим является -7. Так что никакой ошибки округления тут нет.
А разве числовая ось не должна быть зеркальной относительно нуля? Если мы будем отрицательные числа с дробной частью равной 0.5 округлять до большего по абсолютной величине, то мы получем смещение.
-
Да. Отбрасывать надо двоичные разряды у двоичного числа. Дело в том, что если у числа в дополнительном коде отбросить дробные разряды то, оно округлится к меньшему из соседних целых чисел (независимо от того, положительное оно или отрицательное). Так что если Вы число -7.5 переведете в двоичный вид (1000.1b) и отбросите дробные биты (.1b), то получите -8 (1000b).
Смотрите: -32 (100000b в двоичном дополнительном коде), прибавляем 2 (10b), получаем -30 (100010b) теперь делим на 4 - т.е отбрасываем 2 младших двоичных разряда (или сдвигаем на 2 разряда вправо - как Вам больше нравится) и получаетм 1000, что для числа в дополнительном коде с разрядностью 4 означает -8, если хотим сохранить разрядность исходного числа, то расширяем знак и получаем 111000, что для числа с разрядностью 6 все равно -8.
:)
я не совсем удачно пример выбрал и, в попыхах, посчитал неправильно :unsure:
вот, набросал небольшую програмку, и получил вот такой результат:
a = -31 (11100001b) a+2 = -29 (11100011b) (a+2)>>2 11111000 = -8; a/4= -7.75 - правильно
a = -30 (11100010b) a+2 = -28 (11100100b) (a+2)>>2 11111001 = -7; a/4= -7.50 - неправильно?
a = -29 (11100011b) a+2 = -27 (11100101b) (a+2)>>2 11111001 = -7; a/4= -7.25 - правильно
a = -28 (11100100b) a+2 = -26 (11100110b) (a+2)>>2 11111001 = -7; a/4= -7.00 - правильно
a = -27 (11100101b) a+2 = -25 (11100111b) (a+2)>>2 11111001 = -7; a/4= -6.75 - правильно
a = -26 (11100110b) a+2 = -24 (11101000b) (a+2)>>2 11111010 = -6; a/4= -6.50 - неправильно?
a = -25 (11100111b) a+2 = -23 (11101001b) (a+2)>>2 11111010 = -6; a/4 = -6.25 - правильно
a = -24 (11101000b) a+2 = -22 (11101010b) (a+2)>>2 11111010 = -6; a/4 = -6.00 - правильно
...
a = 24 (00011000b) a+2 = 26 (00011010b) (a+2)>>2 00000110 = 6; a/4 = 6.00 - правильно
a = 25 (00011001b) a+2 = 27 (00011011b) (a+2)>>2 00000110 = 6; a/4 = 6.25 - правильно
a = 26 (00011010b) a+2 = 28 (00011100b) (a+2)>>2 00000111 = 7; a/4 = 6.50 - правильно
a = 27 (00011011b) a+2 = 29 (00011101b) (a+2)>>2 00000111 = 7; a/4 = 6.75 - правильно
a = 28 (00011100b) a+2 = 30 (00011110b) (a+2)>>2 00000111 = 7; a/4 = 7.00 - правильно
a = 29 (00011101b) a+2 = 31 (00011111b) (a+2)>>2 00000111 = 7; a/4 = 7.25 - правильно
a = 30 (00011110b) a+2 = 32 (00100000b) (a+2)>>2 00001000 = 8; a/4 = 7.50 - правильно
a = 31 (00011111b) a+2 = 33 (00100001b) (a+2)>>2 00001000 = 8; a/4 = 7.75 - правильно
Получается ошибки при округлении отрицательных чисел все-таки будут?
-
По этой же причине (неправильная разрядность), видимо, Вы для округления прибавляете 4, вместо 2 - это приведет к неправильным вычислениям.
(-32 + 2)/4 = -7.5, отбрасываем младшие разряды получаем -7, а должны получить -8. При сумме больше нуля прибавление двойки перед делением на 4 дает нужный результат, а вот когда сумма меньше нуля, то появляется ошибка. Я что-то упустил?
-
Приветствую!
Пишу в ucf файле ограничения на время распространения от группы А до группы Б. Для того чтобы задать ограничения я должен сначала расписать какие сигналы/компоненты входят в группу. Если сигналов/компонент достаточно большое количество, то списки получаются просто громадным. Можно сократить количество записей используя маски?
Например имеем:
INST "Inst_bdsp/Channels[7].channel/Summ[0].Summ_L1/WorkRAM/Mram_RAM1" TNM = TNM_WorkRAM; INST "Inst_bdsp/Channels[7].channel/Summ[0].Summ_L1/WorkRAM/Mram_RAM2" TNM = TNM_WorkRAM; ... INST "Inst_bdsp/Channels[7].channel/Summ[0].Summ_L1/WorkRAM/Mram_RAM31" TNM = TNM_WorkRAM;
хотелось бы
INST "Inst_bdsp/Channels[7].channel/Summ[0].Summ_L1/WorkRAM/Mram_RAM*" TNM = TNM_WorkRAM;
-
в документации на spartan 3e (ds312.pdf) написано "Spartan-3E devices provide an on-chip ~120 differential termination across the input differential receiver terminals."
в документации на spartan 3 такого не нашел. Но и о необходимости внешнего согласующего резистора тоже ничего не нашел.
-
Приветствую.
Чего-то не могу найти как работать с LVDS в 3м спартане. Нашел как работать в 3А, 3AN, 3AN DSP. Но блоки ввода-вывода 3 и 3А, 3AN, 3AN DSP разные. Кинте ссылку что почитать? ds099 и ug331 уже смотрел. Собственно и вопрос то только по согласующим резисторам. Есть 100 омные ризисторы внутри блока ввода-вывода или нет. Если есть то как подключить? Если нет, то можно LVDS_25_DCI использовать? И если можно, то как.
-
Приветствую, All!
Кто как охлаждает ПЛИС? Интересуют способы крепления радиатора. Особенно интересно если заказ военный.
-
Так всё таки можно или нет это сделать, если нет то чем заменить XCR23032 я не могу его достать
Может XCR3032?
если так то http://efind.ru/icsearch/?search=xcr3032
-
Опубликовано · Изменено пользователем kas · Пожаловаться
Интересуют отечественные конторы, которые могут сделать СБИС. Цены, техпроцесс, сроки, качество.
С какой целью интересуетесь?
В ТЗ прописано что устройство должно быть выполнено на заказных СБИС. Устройство для военных.
Спасибо за ссылки. Кое что по техпроцессу стало ясно. А как на счет качества? Кто нибудь работал с нашими производителями? Интересует техпроцес 0.35-0.25.
-
Интересуют отечественные конторы, которые могут сделать СБИС. Цены, техпроцесс, сроки, качество.
-
А исходя из Вашего, личного опыта как соотносятся быстродействие и потребляемые мощности ПЛИС и заказных СБИС, при условии что схема и частоты одинаковы? Получу ли я выигрыш в быстродействии и снизится ли потребляемая мощность перейдя с ПЛИС на СБИС?
Однозначно. То, что сейчас у меня занимает пол-циклона EP1C12 и работает в нем на 8 мгц (это для отладки), на 0.35 будет спокойно давать 20 мгц при worst case. Ну а жрачку ПЛИС я не мерял, но она тоже однозначно больше в разы, если не в десятки раз.
Спасибо за информацию.
Можно еще вопрос. На чем лучше писать при разработке схемы? На VHDL (есть опыт) или Verilog (только посмотрел, но не разбирался) или на чем-нибудь другом?
-
А исходя из Вашего, личного опыта как соотносятся быстродействие и потребляемые мощности ПЛИС и заказных СБИС, при условии что схема и частоты одинаковы? Получу ли я выигрыш в быстродействии и снизится ли потребляемая мощность перейдя с ПЛИС на СБИС?
Однозначно. То, что сейчас у меня занимает пол-циклона EP1C12 и работает в нем на 8 мгц (это для отладки), на 0.35 будет спокойно давать 20 мгц при worst case. Ну а жрачку ПЛИС я не мерял, но она тоже однозначно больше в разы, если не в десятки раз.
Спасибо за информацию.
Можно еще вопрос. На чем лучше писать при разработке схемы? На VHDL (есть опыт) или Verilog (только посмотрел, но не разбирался) или на чем-нибудь другом?
Утилита перенумерации на схеме DxD2007
в Siemens EDA - Xpedition, PADS (ex. Mentor)
Опубликовано · Пожаловаться
Есть мнение, что эта утилита (перенумерации элементов сверху вниз и слева направо) ненужна. Перенумеровывать можно средствами Expedition PCB, и это будет по ГОСТ.
Пункт 3.19 ГОСТ 2.702-75 гласит:
Порядковые номера должны быть присвоены в соответствии с последовательностью расположения элементов или устройств на схеме сверху вниз в направлении слева направо.
При необходимости допускается изменять последовательность присвоения порядковых номеров в зависимости от размещения элементов в изделии, направления прохождения сигналов или функциональной последовательности процесса.
При внесении изменений в схему последовательность присвоения порядковых номеров может быть нарушена.
Пункт 5.3.10 ГОСТ 2.702-2011 также содержит подобные строки:
5.3.10 Порядковые номера следует присваивать в соответствии с последовательностью расположения элементов или устройств на схеме сверху вниз в направлении слева направо.
При необходимости допускается изменять последовательность присвоения порядковых номеров в зависимости от размещения элементов в изделии, направления прохождения сигналов или функциональной последовательности процесса.
При внесении изменений в схему последовательность присвоения порядковых номеров может быть изменена.
ИМХО, надо воевать с нормоконтролем, учить их читать ГОСТ.