Jump to content

    

kas

Свой
  • Content Count

    76
  • Joined

  • Last visited

Posts posted by kas


  1. Есть мнение, что эта утилита (перенумерации элементов сверху вниз и слева направо) ненужна. Перенумеровывать можно средствами Expedition PCB, и это будет по ГОСТ.

    Пункт 3.19 ГОСТ 2.702-75 гласит:

    Порядковые номера должны быть присвоены в соответствии с последовательностью расположения элементов или устройств на схеме сверху вниз в направлении слева направо.

    При необходимости допускается изменять последовательность присвоения порядковых номеров в зависимости от размещения элементов в изделии, направления прохождения сигналов или функциональной последовательности процесса.

    При внесении изменений в схему последовательность присвоения порядковых номеров может быть нарушена.

     

    Пункт 5.3.10 ГОСТ 2.702-2011 также содержит подобные строки:

    5.3.10 Порядковые номера следует присваивать в соответствии с последовательностью расположения элементов или устройств на схеме сверху вниз в направлении слева направо.

    При необходимости допускается изменять последовательность присвоения порядковых номеров в зависимости от размещения элементов в изделии, направления прохождения сигналов или функциональной последовательности процесса.

    При внесении изменений в схему последовательность присвоения порядковых номеров может быть изменена.

     

    ИМХО, надо воевать с нормоконтролем, учить их читать ГОСТ.

  2. спасибо, понял, думал код как в си работает.

     

    На время изучения HDL, ИМХО, надо бы подзабыть про языки программирования, да вспомнить цифровую схемотехнику.

    Изучать VHDL я начинал с Бибило Основы языка VHDL.

     

     

  3. Приветствую!

     

    [cut]

     

    Так что это не барабан - это так себе - маленький бубен :)

     

    Успехов! Rob.

     

    Спасибо большое! Все получилось. Моя ошибка была в том, что я пытался сразу всю систему синтезировать.

  4. Приветствую!

     

    [cut]

     

    Пришлось достать барабан - взял файл microblaze_0_wrapper_xst.prj который генерит EDK для синтеза. Скриптом затянул исходники из него в Synplify (ну по пути пришлось декодировать их, а-я-яй! но я потом все стер ;) ) Синтезировал и edif подставил вместо родного ngc. Результат - времянки сошлись с первого захода! И размер на 2% меньше чем результат от xst!!!! И это только блок Microblaze. Надо будет весь EDK проект перегнать так - посмотреть что получится.

     

    Успехов! Rob.

     

    Можно поподробнее про барабан? Как затягивать исходники в Synplify?

  5. Для электрически соединненных цепей внутри компонента нужно проставить одинаковые десигнаторы. Т.е. у вас должы остаться только десигнаторы A и B.

     

    Тоже не понятно почему так. Есть JumperID, который показывает группу соединенных выводов внутри микросхемы. Так зачем мне кроме JumperID еще и десигнаторы одинаковыми делать? Идея про JumperID хорошая, но, ИМХО, немного не доработанная.

  6. kas выложите компонент, я запутался и что и как не получается.

    Пожалуйста, вот весь тестовый проект.

     

    Да дело в этом. Этот механизм подразумевает, что данные PAD физически замкнуты внутри посадочного место. (например в тактовый кнопке с 4 Pad) и достаточно подвести сигнал только к одной из PAD, а между собой на плате можно и не соединять

     

    Я понимаю что этот механизм говорит о замыкании выводов внутри компонента, но не могу понять почему альтиум зная о замыканиях внутри компонента не может определить замыкания между разными цепями через компонент. Похоже программисты альтиума тут немного не дороаботали :).

    tst_kz.rar

  7. Вопрос про 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, либо я что-то не настроил как надо, либо это программисты в альтиуме что-то не дописали.

    Помогите, пожалуйста, разобраться.

  8. в ISE особого смысла пользоваться TCL скриптами нет, так как там свой "язык" констрейнов

    поэтому даже если последние ISE и поддерживают TCL, то зачем - мне не понятно

     

    смсла может и нет, но другого пути вставить номер и дату сборки в проект автоматически я не нашел :05: .

     

    :help: Если кто подсажет как это сделать без tcl-скриптов - буду безмерно благодарен.

  9. 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'е. Память правда распределенная, но мне такую и надо.

  10. Что-то я Вас не понимаю...

    :blush:

     

    Разумеется должна. Такая и есть. Так и нарисовано.

    ? :rolleyes:

    post-5108-1244114846_thumb.png

     

    Мы и не округляем отрицательные числа до большего по абсолютной величине - мы просто округляем к большему, когда дробная часть = 0.5 (независимо от знака числа).

    Какое смещение Вы имеете ввиду?

    Например как на этой картинке

    post-5108-1244114853_thumb.png

     

     

    И уже совсем по детски конечно, но Matlab -7.5 округляет до -8

    Вот я и пытаюсь разобраться. :)

  11. Нет, ошибок в округлении нет - Вы ошиблись, решив, что -7.5 должно округляться к -7. Нарисуем числовую ось:

     

    post-7537-1244101590_thumb.jpg

     

    Когда значение попадает строго посередине между двух целых чисел, то его округляют к большему. Соответственно, для +7.5 большим является 8, а вот для -7.5 большим является -7. Так что никакой ошибки округления тут нет.

     

    А разве числовая ось не должна быть зеркальной относительно нуля? Если мы будем отрицательные числа с дробной частью равной 0.5 округлять до большего по абсолютной величине, то мы получем смещение.

  12. Да. Отбрасывать надо двоичные разряды у двоичного числа. Дело в том, что если у числа в дополнительном коде отбросить дробные разряды то, оно округлится к меньшему из соседних целых чисел (независимо от того, положительное оно или отрицательное). Так что если Вы число -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 - правильно

     

    Получается ошибки при округлении отрицательных чисел все-таки будут?

  13. По этой же причине (неправильная разрядность), видимо, Вы для округления прибавляете 4, вместо 2 - это приведет к неправильным вычислениям.

    (-32 + 2)/4 = -7.5, отбрасываем младшие разряды получаем -7, а должны получить -8. При сумме больше нуля прибавление двойки перед делением на 4 дает нужный результат, а вот когда сумма меньше нуля, то появляется ошибка. Я что-то упустил?

  14. Приветствую!

     

    Пишу в 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;
    

  15. в документации на spartan 3e (ds312.pdf) написано "Spartan-3E devices provide an on-chip ~120 differential termination across the input differential receiver terminals."

    в документации на spartan 3 такого не нашел. Но и о необходимости внешнего согласующего резистора тоже ничего не нашел.

  16. Приветствую.

     

    Чего-то не могу найти как работать с LVDS в 3м спартане. Нашел как работать в 3А, 3AN, 3AN DSP. Но блоки ввода-вывода 3 и 3А, 3AN, 3AN DSP разные. Кинте ссылку что почитать? ds099 и ug331 уже смотрел. Собственно и вопрос то только по согласующим резисторам. Есть 100 омные ризисторы внутри блока ввода-вывода или нет. Если есть то как подключить? Если нет, то можно LVDS_25_DCI использовать? И если можно, то как.

  17. Интересуют отечественные конторы, которые могут сделать СБИС. Цены, техпроцесс, сроки, качество.

     

    С какой целью интересуетесь?

     

    В ТЗ прописано что устройство должно быть выполнено на заказных СБИС. Устройство для военных.

     

     

    Спасибо за ссылки. Кое что по техпроцессу стало ясно. А как на счет качества? Кто нибудь работал с нашими производителями? Интересует техпроцес 0.35-0.25.

  18. А исходя из Вашего, личного опыта как соотносятся быстродействие и потребляемые мощности ПЛИС и заказных СБИС, при условии что схема и частоты одинаковы? Получу ли я выигрыш в быстродействии и снизится ли потребляемая мощность перейдя с ПЛИС на СБИС?

     

    Однозначно. То, что сейчас у меня занимает пол-циклона EP1C12 и работает в нем на 8 мгц (это для отладки), на 0.35 будет спокойно давать 20 мгц при worst case. Ну а жрачку ПЛИС я не мерял, но она тоже однозначно больше в разы, если не в десятки раз.

     

    Спасибо за информацию.

     

    Можно еще вопрос. На чем лучше писать при разработке схемы? На VHDL (есть опыт) или Verilog (только посмотрел, но не разбирался) или на чем-нибудь другом?

  19. А исходя из Вашего, личного опыта как соотносятся быстродействие и потребляемые мощности ПЛИС и заказных СБИС, при условии что схема и частоты одинаковы? Получу ли я выигрыш в быстродействии и снизится ли потребляемая мощность перейдя с ПЛИС на СБИС?

     

    Однозначно. То, что сейчас у меня занимает пол-циклона EP1C12 и работает в нем на 8 мгц (это для отладки), на 0.35 будет спокойно давать 20 мгц при worst case. Ну а жрачку ПЛИС я не мерял, но она тоже однозначно больше в разы, если не в десятки раз.

     

    Спасибо за информацию.

     

    Можно еще вопрос. На чем лучше писать при разработке схемы? На VHDL (есть опыт) или Verilog (только посмотрел, но не разбирался) или на чем-нибудь другом?