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

Funt

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о Funt

  • Звание
    Участник
    Участник
  1. Подскажите, как из verilog описания в Quartus получить графическое представление схемы? Реально ли получить такое представление на регистровом уровне?
  2. Спасибо за помощь! Ищу Полякова.
  3. Добрый день. Есть два блока, разные по функциональномк назначению, но одинаковые по структуре. После моделирования в квартусе (в составе схемы), получаем, что один блок работает быстрее (больше clock fmax), другой медленнее. Обьясните, пожалуйста, почему. Вот блоки: Быстрый: module del(clk, data_in1, data_in2, data_in3, data_in4, data_out1, data_out2, data_out3, data_out4); input clk; input [`WIDTH-1:0] data_in1; input [`WIDTH-1:0] data_in2; input [`WIDTH-1:0] data_in3; input [`WIDTH-1:0] data_in4; output [`WIDTH-1:0] data_out1; output [`WIDTH-1:0] data_out2; output [`WIDTH-1:0] data_out3; output [`WIDTH-1:0] data_out4; reg [`WIDTH-1:0] data_buf1=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_buf2=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_buf3=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_buf4=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_out1=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_out2=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_out3=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_out4=32'b00000000000000000000000000000000; //я так понимаю это присвоение здесь не имеет никакого смысла и в аппаратуре все равно не выполняется? always @ (posedge clk) begin data_buf1 = data_in1; data_buf2 = data_in2; data_buf3 = data_in3; data_buf4 = data_in4; end always @ (negedge clk) begin data_out1 = data_buf1; data_out2 = data_buf2; data_out3 = data_buf3; data_out4 = data_buf4; end endmodule Более медленный: module del(clk, data_inx, data_iny, data_outx1, data_outy1, data_outx2, data_outy2, data_outx3, ata_outy3, data_outx4, data_outy4 ); input clk; input [`WIDTH-1:0] data_inx; input [`WIDTH-1:0] data_iny; output [`WIDTH-1:0] data_outx1; output [`WIDTH-1:0] data_outy1; output [`WIDTH-1:0] data_outx2; output [`WIDTH-1:0] data_outy2; output [`WIDTH-1:0] data_outx3; output [`WIDTH-1:0] data_outy3; output [`WIDTH-1:0] data_outx4; output [`WIDTH-1:0] data_outy4; reg [`WIDTH-1:0] data_buf1=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_buf2=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_outx1=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_outy1=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_outx2=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_outy2=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_outx3=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_outy3=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_outx4=32'b00000000000000000000000000000000; reg [`WIDTH-1:0] data_outy4=32'b00000000000000000000000000000000; always @ (posedge clk) begin data_buf1 = data_inx; data_buf2 = data_iny; end always @ (negedge clk) begin data_outx4 = data_outx3; data_outy4 = data_outy3; data_outx3 = data_outx2; data_outy3 = data_outy2; data_outx2 = data_outx1; data_outy2 = data_outy1; data_outx1 = data_buf1; data_outy1 = data_buf2; end endmodule Возможно, что вторая более медленная из-за того что последовательно переносятся значения из одного регистра по цепочке вдругой: data_out1->data_out2->data_out3->data_out4; Но, как я понял такие присвоения с блокировкой, т.е. пока не выполнится одна операция присвоения, следующая не будет выполнятся. Т.е. получается схемы вроде бы должны быть равноценными. Но даже если в первой схеме все операции выполнять с помощью "<=" (как я понял без блокировки, т.е. можно паралельно присвоить нескольким регистрам какие-то значения), то ее скорость не изменится... Где моя ошибка? Или я в корне не прав? P.S. Есть более непонятная для меня ситуация. Схема, по объему в два раза больше другой имеет в два раза больший clock fmax. И в той и в другой схеме используются одни и те же элементарные блоки (умножение и сумма/разнича чисел с плавающей запятой), но в более простой схеме - это просто цепочка из таки умножений сумм, а в более объемной это цепочка блоков, в которых используются другие блоки, в которых выполняется цепочка из умножений и вычетаний. Как в таком случае более обьемная схема может иметь больший clock fmax?
  4. Большое спасибо за ответ! Насчет функциональности, я имел ввиду, что по проекту выполнен только функциональный анализ, но не временной, т.е. проект не завершен (я новичок в этом деле и вообще незнаю как временной анализ делать). Могут ли сильно изменится характеристики схемы (максимальна тактовая частота) после временного анализа и каких-то корректировок (наверное все зависит какие именно будут корректировки)? И еще по заполняемости. Т.е. ПЛИСы одной линейки с одним спидгрейдом абсолютно одинаковы по скорости? Мне казалось, если ПЛИС выполнена по одной технологии, то чем меньше ее площадь (количество элементов), то тем она должна быть быстрее, и меньшая по объему микросхема но заполненная до упора должна обганять большую по объему, но заполненную на половину....хотя учитывая ваши пояснения, наверно они должны остатся на одном уровне. А учитывая, что на практике получается скорость в меньшей немножечко ниже, чем в большой, то наверное у обоих заготовок номинальные скорости одинаковый...
  5. Есть ряд вопросв, плз, помогите;) 1)В verilog операции присваивания выполняются последовательно? Т.е. если записать a=b; b=c; c=d; То пока а не приравняется к b, то в b небудет писатся c? 2) Как наиболее оптимально реализовать запоминание предыдущих n значений. Сейчас делаю приблизительно так: @always (posedge clk) begin xout3=xout2; xout2=xout1; xout1=buff; buff=x; end Т.е. получается, что из-за 4-х последывательных присваиваний очень замедляется схема. Существует ли более оптимальный способ реализации такого запоминания? 3) Как выполнить операции присвоения одновременно для нескольких "переменных"? Или в любом случае присвоение выполняется побитово последоваетльно?
  6. Есть два проекта аналогичных по выполняемым функциям, но разных по структуре. Как определеить какой из них более эффективный, например по быстродействию, по количеству элементов и др... С элементаи вроде все просто, смотрим сколько занимает LE или ALUT'ов. А по быстродействию как? 1) Достаточно ли прокомпилировать проект и посмотреть internal fmax, у кого она больше тот и быстрее? 2) Влияет ли уровень заполнености ПЛИС? (Т.е. будет ли микросхема, в которой задействованы 90% логических элементов быстрее микросхемы из той же серии, но с большым кол. элементов и заполненостью 40%) 3) Являются ли ПЛИС из одной линейки (например Cyclone 2) сравнимыми? (Т.е. могу ли я сравнивать две схемы в разных ПЛИСах одной линейки)? 4) Можно ли проводить сравнение основываясь только на функциональном моделировании без временного?
  7. Думаю будут где-то через год. Вот до какого уровня надо довести схему на верилоге, чтобы через год небыло задержек, хотелось бы узнать сейчас. Спасибо! Темы конкретно по ИС не нашел (возможно слеп:) ), поэтому поместил в самую близкую к ИС, как мне показалось. А что получим в результате синтеза? Какие данные и в каком виде? Существует ли какое-то бесплатное ПО, которое бы позволило сделать только синтез verilog описания?
  8. И еще по первому вопросу. Как выполнить логический синтез в Квартусе? Это можно сделать только с помощью внешнего синтезатора (EDA Tool)? И что мы получим в результате этого синтеза, будет ли этот результат выражен в каком-то одном портируемом файле?
  9. ОК. Что такое gate-level netlist? Достаточно ли будет получить gate-level netlist в Квартусе, чтобы далее его использовать для проектирования СБИС?
  10. Кто-то встречал отдельно блоки умножения и суммирования/вычетания?
  11. Спасибо большое! Попробую заменить альтервоские модули умножения и суммирования. Но из всего выше сказаного и из собственных подозрений наверное перейду к числам с фиксированной точкой. Так что, если у кого есть линки на fixed point прошу подсказать.
  12. Опыта "0". Подсказали, что на первых порах, при отладке verilog описания достаточно и квартуса, а дальше можно будет легко перейти к тому что нужно. Ну и код не совсем платформенно зависимый...старался как можно независимей...но.... Есть проблемка....из мегафункций используется только умножение и суммирование для чисел с плавающей запятой (IEEE-754). Т.е. достаточно эти функции заменить своими. Но где их найти? Я так понимаю написание этих функций самому займет не мало времени. Или все-таки можно как-то вытянуть их с квартуса и этого будет достаточно?
  13. Есть verilog описание фильтра (в среде Quartus). Какую последовательность шагов нужно выполнить, чтобы перейти от этого описания к какому-то подобию "схемы электрической принципиальной" и выполнить ее размещениее на кристалле. Какие программы для этого обычно используются. Как наиболее просто сделать переход от Quartus'а к этим программам (в проекте используются мегафункции Quartus'a :( )
  14. Quartus использовался только для отладки verilog кода. А далее интересует ASIC. Поэтому казалось, что оптимальным вариантом перехода с квартуса на что-то более предназначенное для ASIC будет сощдание нетлиста и в другом пакете начинать работать с нет листом. Я так понимаю теперь, что квартусовский нетлист - это не тот нет лист, который можно впихнуть в программу для ASIC. Но код содержит мегафункции Quartus, можно ли будет его использовать в других ASIC-ориентированных приложениях??? Наверное нет :( И есть ли вариант создания какого-то универсального нетлиста (если это то слово) из квартуса, чтобы его восприняла программа проектирования ASIC как принципиальную схему (не логическую как verilog, а схему на какой-то элементной базе). Т.е. те данные по которым можно делать размещение этой элементной базы на кристалле. P.S. Прошу прощения за путаницу с терминологией и возможно неграмотное описание задачи :rolleyes:
  15. Т.е. после синтеза в квартусе и получения .edf нетлиста, этот edf файл можно использовать в другой программе для размещения на кристалле (он и есть та "электрическая принципиальная схема"?). Ведь quartus создан только для FPGA, а нужно на основе verilog кода создать свой чип. Я закончил на этапе "Functional Simulation" в Quartus'e. Fitting немогу выполнить, так как устройство невлазит ни в один чип :)
×
×
  • Создать...