Re[18]: Я СДЕЛАЛ ЭТО!!!!!!
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 28.07.17 15:12
Оценка: :)
Здравствуйте, Sharov, Вы писали:

S>Конкретно в этом месте я с Вашим оппонентом согласен.


Я рад за тебя! Я не знаю, как ещё можно реагировать на его заявы, не содержащие даже намёка на агрументы...
[КУ] оккупировала армия.
Отредактировано 28.07.2017 15:14 koandrew . Предыдущая версия .
Re[15]: Я СДЕЛАЛ ЭТО!!!!!!
От: Iso12  
Дата: 28.07.17 19:58
Оценка:
Уважаемые коллеги !

Хотелось бы услышать аргументированный разговор двух специалистов на тему "Verilog vs. VHDL" а не школьников типа "сам дурак".
Мне, как начинаюшиму, очень хотелось бы услышать плюсы и минусы того и другого языка. Почему VHDL очень популярен в Европе а Verilog в Америке? Перспективы этих языков. Буду рад услышать обоснованные аргументы от обоих оппонентов. Заранее спасибо.
Re[16]: Я СДЕЛАЛ ЭТО!!!!!!
От: alex_public  
Дата: 28.07.17 20:16
Оценка:
Здравствуйте, rising_edge, Вы писали:

K>>В интернете принято обращаться на "ты", не нравится — кнопка "закрыть" находится наверху окна.

_>Молодой человек, может, у вас там в канадских интернетах и принято тыкать всем подряд, но к незнакомым людям обращаются на "вы" независимо от среды.

В англоязычных интернетах такой проблемы вообще нет (надеюсь не надо пояснять почему?). Что же касается русскоязычного интернета, то такая проблема имеется, причём в большинстве мест принято скорее обратное: https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%BE%D0%B9_%D1%8D%D1%82%D0%B8%D0%BA%D0%B5%D1%82#.D0.9E.D0.B1.D1.80.D0.B0.D1.89.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BD.D0.B0_.C2.AB.D1.82.D1.8B.C2.BB_.D0.B8.D0.BB.D0.B8_.C2.AB.D0.92.D1.8B.C2.BB

P.S. В принципе было бы интересно послушать мнение специалиста по VHDL на тему его преимуществ над Verilog'ом. Только не в стиле общения нервных школьников, а по серьёзному...
Re[16]: Я СДЕЛАЛ ЭТО!!!!!!
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 28.07.17 22:40
Оценка: 2 (1) +1
Здравствуйте, Iso12, Вы писали:

I>Хотелось бы услышать аргументированный разговор двух специалистов на тему "Verilog vs. VHDL" а не школьников типа "сам дурак".

I>Мне, как начинаюшиму, очень хотелось бы услышать плюсы и минусы того и другого языка.
Ответ находится в гугле за пять секунд (я засекал). Если одним предложением: VHDL — это Паскаль для железа (строгая типизация, многобукав в коде), а Верилог — это Си (менее строгая типизация, меньше словесного шума в коде). SystemVerilog — это С++ (Верилог с некоторыми изменениями и массой новых фич, не имеющих аналогов в VHDL, в основном эти фичи направлены на облегчение разработки тестбенчей).

I>Почему VHDL очень популярен в Европе а Verilog в Америке?

В основном по историческим причинам. Плюс популярность зависит от выбранной сферы применения. В штатах в оборонке VHDL более популярен, а Верилог рулит в коммерческой сфере.

I>Перспективы этих языков. Буду рад услышать обоснованные аргументы от обоих оппонентов. Заранее спасибо.

Сейчас это не имеет ровным счётом никакого значения, ибо ИДЕ от всех производителей чипов умеют в mixed-language projects, то есть в одном проекте можно "бесшовно" собирать компоненты, написанные на разных языках. Плюс эти языки не настолько сильно различаются, чтобы знающий один из них не смог как минимум прочитать и понять код на другом.
SystemVerilog стоит особняком, ибо в нём есть фичи, не имеющие аналогов ни в VHDL, ни в Verilog.
[КУ] оккупировала армия.
Отредактировано 29.07.2017 4:06 koandrew . Предыдущая версия . Еще …
Отредактировано 28.07.2017 22:45 koandrew . Предыдущая версия .
Re[16]: Я СДЕЛАЛ ЭТО!!!!!!
От: Alf США  
Дата: 29.07.17 03:22
Оценка: +1
Здравствуйте, Iso12, Вы писали:

I>Уважаемые коллеги !


I>Хотелось бы услышать аргументированный разговор двух специалистов на тему "Verilog vs. VHDL" а не школьников типа "сам дурак".


начинающим — бесплатный дельный совет — попробовать и то и другое =) занимает минимум времени, доставляет максимально.
Re[17]: Я СДЕЛАЛ ЭТО!!!!!!
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 29.07.17 04:04
Оценка: +1
Здравствуйте, Alf, Вы писали:

Alf>начинающим — бесплатный дельный совет — попробовать и то и другое =) занимает минимум времени, доставляет максимально.



Я не знаю ни одного человека, который, попробовав оба языка, сознательно выбрал бы VHDL. У нас в универе даже специально курс по VHDL ставили на семестр раньше, чем курс по верилогу, ибо после его на VHDL уже никто добровольно не переходил После языковых курсов у нас был курс дизайна, где студенты были вольны выбирать любой язык, и все до единого с моего потока выбрали верилог
[КУ] оккупировала армия.
Re[17]: Я СДЕЛАЛ ЭТО!!!!!!
От: rising_edge  
Дата: 29.07.17 13:18
Оценка: 3 (1)
Здравствуйте, alex_public, Вы писали:
_>P.S. В принципе было бы интересно послушать мнение специалиста по VHDL на тему его преимуществ над Verilog'ом. Только не в стиле общения нервных школьников, а по серьёзному...

Я попробую изложить то, чем мне плох Верилог.

Начнём с первого взгляда.
Те, кто говорят, что Верилог похож на Си, пусть внимательнее посмотрят на begin/end, case (без switch) и фигурные скобки. Если это "как в Си", то я Эйнштейн. Причём всякие endmodule, endfuncion, endcase есть, а endif почему-то нет. И почему-то просто end было недостаточно, а обязательно надо endmodule и endcase.

Что меня особенно фраппирует в Верилоге. Вот в ВХДЛ есть просто сигнал. Неважно, кем он драйвится: триггером или асинхронной логикой. Неважно, как он формируется: в процессе или вне. Я просто ввожу сигнал и ни о чём не думаю -- сигнал и есть сигнал. Но в Верилоге сигналы зачем-то разделили на reg и wire. Если вы формируете сигнал в блоке always, то это должен быть reg, причём не важно, описываете ли вы в always триггер или комбинационную логику. А если вы ходите описать комбинационную логику вне блока always, то вы должны определить сигнал как wire. Но, внезапно, этого недостаточно. Нельзя просто взять и написать

wire z;

z <= x + y;


как хотелось бы в нормально спроектированном языке, а надо обязательно использовать слово assign (которое используется только для этого и ни для чего больше) и только блокирующее присваивание.

wire z;

assign z = x + y;


О разрядности сигналов. Верилог запросто позволяет соединить шины разных разрядностей как непосредственно двух сигналов, так и при маппинге портов, бросая тут лишь варнинг. ВХДЛ такого не позволяет в принципе. А если у вас варнингов много (тем более если вы не можете их исправить, а такое часто бывает при использовании вендоровских или сторонних IP-ядер), в этом потоке можно проглядеть варнинг и про несовпадении разрядностей и долго искать, а чё же оно не работает.

Как ни странно, Верилог позволяет забыть о декларации сигнала. Вы можете использовать сигнал, предварительно не описав его. Будет всего-лишь варнинг. Причём, по моему, сигнал этот будет одноразрядным. Стреляй себе в ногу, не хочу.

Ещё про разрядность. Целые числа в Верилоге 32-битные. Это приводит к тому, что приходится у целых чисел разрядность задавать вручную. Если я в ВХДЛ просто пишу

a <= a + 1;


и ни о чём не думаю, потому что функция "+" сама заботится о минимальном двоичном представлении десятичного числа, то в Верилоге такая запись снова даст варнинг о несовпадающей разрядности. Поэтому приходится счётчики писать в виде

a <= a + 1'b1;


Перечислимый тип. В ВХДЛ перечислимый тип используется, например, для описания конечных автоматов. Я просто описываю перечислимый тип
type state_t is (st0, st1, st2, st3);
signal state : state_t;

а кодирование этого типа отдаю синтезатору. Он на основе числа состояний и графа перехода выбирает оптимальное кодирование: sequental, one hot, gray, etc. Если я с ним не согласен, я могу ипользовать соответсвующий атрибут, который жёстко укажет, как закодировать КА. На худой конец я могу действовать в Верилог-стиле. А сдить Верилога -- это ручное кодирование и использованием корявенького препроцессора:
`define st0 4'b0001
`define st1 4'b0010
`define st2 4'b0100
`define st3 4'b1000

А корявенький он потому, что нельзя "как в Си" взять и написать
case (state)
st0: a <= a0 + b0;
st1: a <= a1 + b1;
st2: a <= a2 + b2;
st3: a <= a3 + b3;
endcase

потому что компилятор просто не найдёт все эти st0..st3. Надо ему глаза открыть:
case (state)
`st0: a <= a0 + b0;
`st1: a <= a1 + b1;
`st2: a <= a2 + b2;
`st3: a <= a3 + b3;
endcase


В ВХДЛ на самом деле мало что вшито в язык. Мощь языку придают сторонние бибилиотеки. Благодаря им мы имеем знаковую математику, беззнаковую математику и даже математику с плавающей точкой. И это всё во внешних модулях, которые написаны только с использованием синтезируемого подмножества. Для симуляции даже написали бибилиотеку форматированного вывода в стиле Си (printf & Co). А Верилоге всё прибито гвоздями в самом языке.

По-крупному, пожалуй, достаточно. В целом у меня стойкое убеждение, что там, где в ВХДЛ ошибка и "Ты не пройдёшь", а в Верилоге всего лишь предупреждение, позволяет, а местами и провоцирует написание говнокода, который на ВХДЛ в принципе невозможен.
Re[18]: Я СДЕЛАЛ ЭТО!!!!!!
От: Alf США  
Дата: 29.07.17 18:44
Оценка:
Здравствуйте, rising_edge, Вы писали:

_>Начнём с первого взгляда.

_>Те, кто говорят, что Верилог похож на Си, пусть внимательнее посмотрят на begin/end, case (без switch) и фигурные скобки. Если это "как в Си", то я Эйнштейн. Причём всякие endmodule, endfuncion, endcase есть, а endif почему-то нет. И почему-то просто end было недостаточно, а обязательно надо endmodule и endcase.

мнэээ, возможно это только лишь мое субьективное мнение, но пописав продакшн кода на двух десятках самых разнообразных языков, мне абсолютно пофиг у кого где скобки или begin/end, сколько пробелов или табов нужно ставить чтобы PIP ошибки не лезли и прочая другая инфраструктурная муть.

Мне нужно решить задачу, пофиг на каком ЯП. Я беру ее и решаю. Возможно не самым красноглазым и гипер-оптимизированным методом, но беру и решаю.
Для того чтобы сделать что-то на верилоге мне нужно сделать X действий, при этом опыт в других си-подобных языках мне скорее помогает, чем мешает.
Для того же самого на VHDL мне требуется X*n действий, плюс вообще никакой корреляции с любым другим опытом, который есть у меня. Потому что язык ADA из которого вырос VHDL я видел в википедии "у бэлых тапках", соответствующего опыта у меня нет и не будет.

Вопрос знатокам — какой ЯП я выберу для решеиния задачи?

Дв, меня откровенно бесит несовершенство и косяки при трансформации разрядостей переменных и ширины шин в Верилоге, но я уже один раз отматерился по этому поводу, создал несколько сниппетов для себя и больше к этому вопросу не возвращаюсь.
Точно так же я поступаю со Свифтом и многими другими ЯП.

Если будет задача — написать логику только на VHDL и никакой другой язык применять нельзя — ну ок, вздохну и напишу. Будет долго и неприятно, но напишу.

Так к чему весь этот сыр-бор-холливор? =) "Пишите много, пишите вкусно"(tm)

А новичкам нужно не выбирать идеальный ЯП для всех случаев, а просто научиться решать задачи и выбирать для этого подходящие инструменты.
Не пробуя, не экспериментируя, не набивая шишки, не учась распознавать причинно-следственные связи это сделать невозможно.
Re[18]: Я СДЕЛАЛ ЭТО!!!!!!
От: alex_public  
Дата: 31.07.17 16:53
Оценка:
Здравствуйте, rising_edge, Вы писали:

_>Я попробую изложить то, чем мне плох Верилог.

_>...

Из всего указанного полностью однозначным (но при этом совсем не важным для меня лично) является тот факт, что VHDL будет генерировать ошибку в тех случаях, где у Verilog будет предупреждение. По всем остальным вопросам однозначного впечатления нет — надо смотреть конкретные случаи. )

Хочу сразу уточнить, что я совсем не специалист в области ПЛИС и только начинаю с этим разбираться (правда при этом в случае положительного решения использоваться эта технология будет совсем не в рамках хобби, а в серьёзных проектах). В данный момент все задачи в данной области мы успешно решаем с помощью микроконтроллеров (а вот в работе с ними у меня вполне экспертные знания), но в силу ряда обстоятельств я обдумываю освоение новых подходов. Однако на данный момент вся моя возня с ПЛИС — это даже не хобби, а просто знакомство.

Для одного из первых заходов на такое знакомство я накидал простенькое решение решение на Verilog'е одной из наших реальных задач, естественно в максимально упрощённом виде:
module MC(input clk, input[15:0] period, output reg w1=0, output reg w2=0);

reg[15:0] r_period=0;
reg[15:0] r_counter=0;

 always @(posedge clk) begin
    if(r_period!=period) begin
        r_period=period;
        if(r_counter>period*4) r_counter=period*4;
    end
    case(r_counter)
        0: begin w1=1; w2=0; end
        r_period: begin w1=1; w2=1; end
        r_period*2: begin w1=0; w2=1; end
        r_period*3: begin w1=0; w2=0; end
        r_period*4: r_counter<=0;
    endcase
    r_counter=r_counter+1;
 end

endmodule


Возможно этот код чем-то не оптимальный, т.к. я тут ещё новичок, но во всяком случае он компилируется и моделируется правильно. Так вот вопрос: как будет выглядеть его аналог на VHDL и в чём возможны его преимущества в таком простом случае?

И далее, если мы захотим усложить задачу, подключив скажем какую-то реализацию i2c (естественно готовую, т.к. писать самим такое странно) для установки значения period, то с помощью какого инструмента это будет проще сделать?
Re[19]: Я СДЕЛАЛ ЭТО!!!!!!
От: Iso12  
Дата: 02.08.17 11:23
Оценка:
Здравствуйте, alex_public, Вы писали:



_>Для одного из первых заходов на такое знакомство я накидал простенькое решение решение на Verilog'е одной из наших реальных задач, естественно в максимально упрощённом виде:

_>
_>module MC(input clk, input[15:0] period, output reg w1=0, output reg w2=0);

_>reg[15:0] r_period=0;
_>reg[15:0] r_counter=0;

_> always @(posedge clk) begin
_>    if(r_period!=period) begin
_>        r_period=period;
_>        if(r_counter>period*4) r_counter=period*4;
_>    end
_>    case(r_counter)
_>        0: begin w1=1; w2=0; end
_>        r_period: begin w1=1; w2=1; end
_>        r_period*2: begin w1=0; w2=1; end
_>        r_period*3: begin w1=0; w2=0; end
_>        r_period*4: r_counter<=0;
_>    endcase
_>    r_counter=r_counter+1;
_> end

_>endmodule 
_>


Обладая только знаниями языка C, мне кажется, что ваш код неправильно отработает, если period будет больше чем 16383. Или я ошибаюсь?
Re[19]: Я СДЕЛАЛ ЭТО!!!!!!
От: rising_edge  
Дата: 02.08.17 12:27
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Для одного из первых заходов на такое знакомство я накидал простенькое решение решение на Verilog'е одной из наших реальных задач, естественно в максимально упрощённом виде:


Видно, что код писал программист, а не железячник.

_>Возможно этот код чем-то не оптимальный, т.к. я тут ещё новичок, но во всяком случае он компилируется и моделируется правильно.


Этого недостаточно. Основной критерий -- это реализация в железе. Прерасно работающий в симуляторе код в ПЛИС может быть очень медленным и пожирающим кучу ресурсов.

_> Так вот вопрос: как будет выглядеть его аналог на VHDL и в чём возможны его преимущества в таком простом случае?


Если вы уже выбрали для себя Верилог, не все ли равно, как подобный код будет выглядеть на другом языке?

_>И далее, если мы захотим усложить задачу, подключив скажем какую-то реализацию i2c (естественно готовую, т.к. писать самим такое странно) для установки значения period, то с помощью какого инструмента это будет проще сделать?


Я не понял вопроса. Проще сделать что?
Re[19]: Я СДЕЛАЛ ЭТО!!!!!!
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 02.08.17 17:56
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Возможно этот код чем-то не оптимальный, т.к. я тут ещё новичок, но во всяком случае он компилируется и моделируется правильно. Так вот вопрос: как будет выглядеть его аналог на VHDL и в чём возможны его преимущества в таком простом случае?

Меня в твоём коде сразу напрягло умножение (в общем случае это ОЧЕНЬ дорогая операция в железе), но всем известно, что умножение на 4 можно заменить на сдвиг влево на 2 позиции. И мне стало интересно, известно ли это синтезатору. Потому я скормил твой код ИДЕ Vivado 2017.2. Изучив схему, которую он сгенерил, убедился, что он в курсе
Но в целом я согласен с другим комментатором, что код написан чисто софтовый, и несколько gotchas верилога ты таки словил Я просто заменил блокирующие присваивания на неблокирующие, и на этом съэкономил около 50 LUTов

_>И далее, если мы захотим усложить задачу, подключив скажем какую-то реализацию i2c (естественно готовую, т.к. писать самим такое странно) для установки значения period, то с помощью какого инструмента это будет проще сделать?

http://www.xilinx.com/support/documentation/ip_documentation/axi_iic/v2_0/pg090-axi-iic.pdf Он уже memory-mapped.
Хотя контроллер i2c стоит руками написать хотя бы однажды в качестве тренировки/обучения, т.к. он достаточно прост для того, чтобы новички его смогли осилить, но при этом включает в себя много важных концепций, которые применяются при работе с ПЛИС — работа с разными clock domain'ами, tri-state буферы, являющиеся и входом, и выходом, генерация тактовой частоты для внешнего устройства, работа с памятью/FIFO. На всяких обучалках часто его пишут после UART'а, который вообще является классикой ПЛИС-дизайна. Так что крайне рекомендую попробовать написать самому!
[КУ] оккупировала армия.
Отредактировано 02.08.2017 18:15 koandrew . Предыдущая версия .
Re[20]: Я СДЕЛАЛ ЭТО!!!!!!
От: alex_public  
Дата: 02.08.17 21:54
Оценка:
Здравствуйте, Iso12, Вы писали:

I>Обладая только знаниями языка C, мне кажется, что ваш код неправильно отработает, если period будет больше чем 16383. Или я ошибаюсь?


Всё верно, но это укладывается в условие задачи. Разве что тут это можно было технически показать (например задав для периода 14 бит), а я этого не сделал вследствие своих привычек из МК (где все подобные разрядности кратны 8). С другой стороны, если продолжить эту задачу (как я писал выше), то при передаче периода из i2c модуля всё равно скорее всего придётся использоваться стандартные 16 бит...

Ещё можно выйти за пределы задачки, увеличив точность выше требуемой — задав для counter разрядность 18 и тогда или считать через 4 или увеличить частоту в 4 раза. В общем есть множество вариантов развития и приведённый код — это всего лишь тестовый пример, а не что-то из рабочего проекта.
Re[20]: Я СДЕЛАЛ ЭТО!!!!!!
От: alex_public  
Дата: 02.08.17 22:10
Оценка:
Здравствуйте, rising_edge, Вы писали:

_>>Для одного из первых заходов на такое знакомство я накидал простенькое решение решение на Verilog'е одной из наших реальных задач, естественно в максимально упрощённом виде:

_>Видно, что код писал программист, а не железячник.

Ну железки то мы тоже делаем (включая разводку своих плат и т.п.), только пока без всяких ПЛИС. Хотя я действительно больше специализируюсь на коде (но в силу положения приходится на определённом уровне разбираться во всём). Кстати, а в чём именно видны особенности программиста? Любопытно просто... )))

_>>Возможно этот код чем-то не оптимальный, т.к. я тут ещё новичок, но во всяком случае он компилируется и моделируется правильно.

_>Этого недостаточно. Основной критерий -- это реализация в железе. Прерасно работающий в симуляторе код в ПЛИС может быть очень медленным и пожирающим кучу ресурсов.

Естественно. Уже планирую тесты на некоторых ПЛИС (для начала скорее всего iCE40 Ultra от Lattice).

_>> Так вот вопрос: как будет выглядеть его аналог на VHDL и в чём возможны его преимущества в таком простом случае?

_>Если вы уже выбрали для себя Верилог, не все ли равно, как подобный код будет выглядеть на другом языке?

Вообще то мы пока что ещё ничего не выбрали, даже собственно вообще применение ПЛИС в своих проектах. ))) А это всё не более чем один из шагов по ознакомление с данными технологиями.

И увидеть аналог на VHDL этого тестового кода было бы очень любопытно. Особенно если на его примере будет возможно показать хоть одно из преимуществ VHDL.

_>>И далее, если мы захотим усложить задачу, подключив скажем какую-то реализацию i2c (естественно готовую, т.к. писать самим такое странно) для установки значения period, то с помощью какого инструмента это будет проще сделать?

_>Я не понял вопроса. Проще сделать что?

Ну в приведённом примере модуль получает извне некое 16-и битное значение period. Хочется изменить задачу, чтобы на входе была просто i2c шина, по которой будут передавать этот же самый period для установки в тот же самый регистр. Естественно писать самому поддержку i2c желания нет никакого — подразумевается скачивание некой готовой реализации и подключения её к нашему модулю. Так вот вопрос, этот процесс будет проще (удобнее искать и интегрировать в свой проект готовые стандартные реализации) на Verilog или с помощью VHDL? Или же в данной области особой разницы между этими инструментами нет?
Re[20]: Я СДЕЛАЛ ЭТО!!!!!!
От: alex_public  
Дата: 02.08.17 22:33
Оценка:
Здравствуйте, koandrew, Вы писали:

_>>Возможно этот код чем-то не оптимальный, т.к. я тут ещё новичок, но во всяком случае он компилируется и моделируется правильно. Так вот вопрос: как будет выглядеть его аналог на VHDL и в чём возможны его преимущества в таком простом случае?

K>Меня в твоём коде сразу напрягло умножение (в общем случае это ОЧЕНЬ дорогая операция в железе), но всем известно, что умножение на 4 можно заменить на сдвиг влево на 2 позиции. И мне стало интересно, известно ли это синтезатору. Потому я скормил твой код ИДЕ Vivado 2017.2. Изучив схему, которую он сгенерил, убедился, что он в курсе

Ну вообще то там есть и умножение на 3, так что если уж заниматься тут какими-то оптимизациями, то скорее через замену на сложение. ) Или тогда уж вообще переделать весь алгоритм, создав "вложенный цикл" или же конечный автомат. )

K>Но в целом я согласен с другим комментатором, что код написан чисто софтовый, и несколько gotchas верилога ты таки словил Я просто заменил блокирующие присваивания на неблокирующие, и на этом съэкономил около 50 LUTов


Возможно. ) Просто прежде чем научиться писать оптимальный код, надо в начале научиться писать просто работающий. )))

_>>И далее, если мы захотим усложить задачу, подключив скажем какую-то реализацию i2c (естественно готовую, т.к. писать самим такое странно) для установки значения period, то с помощью какого инструмента это будет проще сделать?

K>http://www.xilinx.com/support/documentation/ip_documentation/axi_iic/v2_0/pg090-axi-iic.pdf Он уже memory-mapped.

Угу, похоже на то что надо. И кстати там у них все файлы и примеры заданы в VHDL... )

K>Хотя контроллер i2c стоит руками написать хотя бы однажды в качестве тренировки/обучения, т.к. он достаточно прост для того, чтобы новички его смогли осилить, но при этом включает в себя много важных концепций, которые применяются при работе с ПЛИС — работа с разными clock domain'ами, tri-state буферы, являющиеся и входом, и выходом, генерация тактовой частоты для внешнего устройства, работа с памятью/FIFO. На всяких обучалках часто его пишут после UART'а, который вообще является классикой ПЛИС-дизайна. Так что крайне рекомендую попробовать написать самому!


Возможно это имеет смысл со временем. ) Если серьёзно пойдём в данном направление...
Re[21]: Я СДЕЛАЛ ЭТО!!!!!!
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 02.08.17 23:21
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Ну вообще то там есть и умножение на 3, так что если уж заниматься тут какими-то оптимизациями, то скорее через замену на сложение. ) Или тогда уж вообще переделать весь алгоритм, создав "вложенный цикл" или же конечный автомат. )

Синтезатор и сделал что-то подобное КА.

_>Угу, похоже на то что надо. И кстати там у них все файлы и примеры заданы в VHDL... )

Это как раз к тому, что я сказал выше — внутри проектов можно без проблем сочетать компоненты, написанные на разных языках. Так что вопрос языка в настоящее время по большому счёту дело личного вкуса и предпочтений.

_>Возможно это имеет смысл со временем. ) Если серьёзно пойдём в данном направление...

Нет, такие вещи стоит начинать делать как можно раньше, ибо они на очень простых примерах учат многим концепциям, которые применяются во всех проектах. Со временем такие вещи будешь писать с закрытыми глазами во время обеденного перерыва
[КУ] оккупировала армия.
Re[21]: Я СДЕЛАЛ ЭТО!!!!!!
От: Iso12  
Дата: 03.08.17 09:21
Оценка:
Здравствуйте, alex_public, Вы писали:


_>Ну железки то мы тоже делаем (включая разводку своих плат и т.п.), только пока без всяких ПЛИС. Хотя я действительно больше специализируюсь на коде (но в силу положения приходится на определённом уровне разбираться во всём). Кстати, а в чём именно видны особенности программиста? Любопытно просто... )))


Для тех кто приходит в ПЛИС из программиривания (и для меня в том числе), основной ошибкой является что мы воспринимаем VHDL или верилог как язык программирования. На самом деле это язык описания логики, которая синтетизируется из написанного кода. То есть при написании любого выражения, надо иметь хоть какое-то представление как это будет выглядеть в железе (в логике). Железячники, как они мне рассказывали, так и делают.

Для меня, например, сразу бросилось в глаза period*4 в трёх местах. я бы для этого взял отдельный сигнал (VHDL).
Re: Я СДЕЛАЛ ЭТО!!!!!!
От: VladCore  
Дата: 04.08.17 01:29
Оценка:
Здравствуйте, koandrew, Вы писали:

Темную энергию или хотя бы темную мaтерию нормально ловит? Не вижу ни одной антенны И где езернет?
Отредактировано 04.08.2017 1:34 VladCore . Предыдущая версия . Еще …
Отредактировано 04.08.2017 1:32 VladCore . Предыдущая версия .
Re[2]: Я СДЕЛАЛ ЭТО!!!!!!
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 04.08.17 02:25
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>Темную энергию или хотя бы темную мaтерию нормально ловит? Не вижу ни одной антенны

Для этого есть разъёмы расширения

VC>И где езернет?

А нафиг он нужен-то? Я честно говоря ещё ни в одном своём проекте проводную сетку не использовал. Если нужно было подключение к инету, то ставил WiFi-модуль WINC1500. Проводная сетка — это каменный век, учитывая, что мне не нужна бешеная скорость передачи данных. Да и потом 1/10 G MAC IP денег стоит, нашару Xilinx даёт тока 10/100 Mbit сетку. Если потребуется высокоскоростной канал к "большому" компу, то проще заюзать чип FT600/601/602 и подключиться через USB 3. На текущей плате я развёл только USB 2.0 из-за уменьшения риска фейла, т.к. чипы FT60X дорогие, в то время как протокол обмена данных у них концептуально аналогичен — просто больше параллельных линий (16/32 против восьми у FT221X), и намного выше тактовая частота (100 МГц против 12). Так что текущая плата послужит нормальным полигонов для экспериментов Я вот подумываю собрать второй экземпляр платы с более "просторным" ПЛИСом XC7A35T-1FTG256C, а также распаять всю плату, в т.ч. и блок питания — а то с текущей платой как-то геморно с двумя раздельными платами. И ещё я по-прежнему вынашиваю план сделать версию платы с полноценным DDR3 вместо HyperRAM Пока жаба душит выкладывать ~$200 за шестислойку, а на четырёхслойке что-то я пока ниасилил развести DDR3 с соблюдением всех его требований Если асилю сделать на четырёхслойке (ну или уговорю свою жабу на шестислойку ), то попробую сделать.
[КУ] оккупировала армия.
Re[22]: Я СДЕЛАЛ ЭТО!!!!!!
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 04.08.17 02:43
Оценка:
Здравствуйте, Iso12, Вы писали:

I>Для тех кто приходит в ПЛИС из программиривания (и для меня в том числе), основной ошибкой является что мы воспринимаем VHDL или верилог как язык программирования. На самом деле это язык описания логики, которая синтетизируется из написанного кода. То есть при написании любого выражения, надо иметь хоть какое-то представление как это будет выглядеть в железе (в логике). Железячники, как они мне рассказывали, так и делают.

+1, хоть и с одной БОЛЬШОЙ оговоркой, имя которой HLS Там надо тупо зазубрить "правила хорошего тона" при написании кода, описанные в мануале к софтине (я как раз в отпуске читал его, когда появлялась свободная минутка), и неукоснительно им следовать. Ибо хотел бы я посмотреть на человека, который смог бы "представить" в логике схему, скажем, hls::Dilate()

I>Для меня, например, сразу бросилось в глаза period*4 в трёх местах. я бы для этого взял отдельный сигнал (VHDL).

Это на самом деле не так важно, т.к. синтезаторы нынче весьма умные, и сами догадываются провести подобные оптимизации — Vivado 2017.2 уложил этот код в чуть больше сотни LUT и с полсотни регистров (а после замены блокирующих присваиваний на неблокирующие стало где-то на треть LUT'ов меньше). Даже в самом слабом Артиксе (который я как раз и поставил на плату) 2600 слайсов (== 10400 LUT и 20800 регистров, причём LUT'ы у него шестивходные), так что это всё экономия на спичках по большому счёту. Другое дело, что к правильным приёмам кодирования стоит привыкать сразу, ибо позже будет сложнее "ломать" уже оформившиеся привычки.
[КУ] оккупировала армия.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.