|
Тернарный оператор VS конструкция if-else, Какова логика языка? Почему одно не заменяет другое? |
|
|
|
Jun 7 2018, 06:53
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 4-06-18
Пользователь №: 104 848

|
Предположим, есть конечный автомат, который в работе должен пробрасывать тактовую частоту через себя, а в состоянии IDLE установить выход тактовой частоты в единицу. Тогда код может быть следующий: Код wire clk_in; wire clk_out; reg state;
assign clk_out = clk_in | ~(state^IDLE); Т.е. если state и IDLE совпадают бит-в-бит, то их побитовый XOR будет равен нулю. Инвертированный ноль - это единица. Единица или clk_in - единица. В противном случае, ноль или clk_in - это clk_in. Всё абсолютно прозрачно синтезируется. Или код может быть такой: Код wire clk_in; wire clk_out; reg state;
assign clk_out = clk_in | (state == IDLE);//На месте синтезатора я заменил бы данную конструкцию на предыдущую Или такой: Код wire clk_in; wire clk_out; reg state;
assign clk_out =(state == IDLE) ? 1 : clk_in; Но почему не прокатывает следующий вариант? Код wire clk_in; wire clk_out; reg state;
always @(state) begin if(state == IDLE) begin clk_out = 1; end else begin clk_out = clk_in; end end В таком варианте Квартус ругается на то, что "10137: Object on left-hand side of assignment must have a variable data type". Не, ну нельзя, так - нельзя. Но эмм... в списке чувствительности отсутствуют posedge/negedge. В любом случае, синтезатор будет разворачивать эту конструкцию в комбинационную логику (причем, скорее всего в такую, как в первом примере). Так чего же он лезет на рожон (регистр ему подавай)? Какова логика языка? Почему так писать некорректно?
|
|
|
|
|
 |
Ответов
|
Jun 7 2018, 08:14
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Flip-fl0p @ Jun 7 2018, 10:20)  1. Я бы вообще никаких манипуляций с частотой не производил. 2. Если уж так нужно, обратите внимание на: altera clkctrl Без обид. Смотрите внимательно, то что я напишу. Для одних - ПЛИС это кусок хлеба. И форум - это товарищи, которые помогают начать прилично зарабатывать. Поэтому их советы ценятся. Потому что на работе надо давать результат, иначе не будет зарплаты, причем результат нужен каждый день, а не когда-то потом. И я помню, что сам был в такой же ситуации. До этого я писал на VHDL, пришел на новую работу и там сказали - только Verilog. И я учился "в бою". И мне абсолютно некогда было "изобретать художества". Брал проверенные шаблоны и из них делал код, в том числе и по выходным, чтобы успеть. А для других ПЛИС - это игра. Им результат как таковой не нужен. Они "проводят изыскания" в кусках кода, в "триггерах, нарисованных вьюерами" и т.д. Им советы, выдаваемые на форуме вроде как и нужны, но они все равно все сделают по-своему, "через Альпы". Вот так и здесь. Есть основы: клоки не изобретать и проект делать синхронным; "внутри автоматов не плодить счетчики и не делать клоки. И это написано практически во всех руководствах. Ну и что? Это же так интересно, написать что-то принципиально "свое", а потом задавать об этом вопросы на форуме. Чтобы все, кто готов помочь, бросились объяснять очевидные вещи. Беда в том, что правильный ответ игруну вообще не нужен, потому что он быстро приводит к правильному результату. Тут как раз все надо делать все совершенно наоборот. Надо дать ссылку на кучу литературы, на методики, на головоломные статьи. Так чтобы до результата стало как можно дальше. Тогда игрун ощутит себя бесконечно крутым. Вот как-то так....
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Jun 7 2018, 17:27
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 18-12-16
Пользователь №: 94 676

|
Цитата(iosifk @ Jun 7 2018, 09:14)  Вот так и здесь. Есть основы: клоки не изобретать и проект делать синхронным; "внутри автоматов не плодить счетчики и не делать клоки. Простите, а что плохого в счетчиках внутри автоматов? Цитата(flammmable @ Jun 7 2018, 11:32)  инициализация регистров при запуске ПЛИС "в железе". На сколько понял читая материалы в сети, в 90-е регистры инициализировались исключительно нулями. Сейчас ситуация поменялась, но ряд комментаторов по старой памяти утверждают, что это невозможно и сами не используют эту удобную опцию. Я сам с Альтерой не работал, но слышал, что там до сих пор инициализация только нулями. У lattice тоже не у всех семейств поддерживается инициализация.
|
|
|
|
|
Jun 7 2018, 18:18
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Viktuar @ Jun 7 2018, 20:27)  Простите, а что плохого в счетчиках внутри автоматов? Синхронный проект должен работать по клокам. Если Вы из автомата даете только одиин сигнал разрешения, то счетчик и будет работать по клокам. И по разрядам счетчика разойдется только один сигнал... А если при описании автомата, Вы запихиваете счетчик "внутрь" комбинационной части, то что будет подано на тактовые входы счетчика? Но даже если компилятор сообразит подать туда клоки, то все равно, к комбинационной части добавятся еще N разрядов счетчика. И все это надо будет уложить в период тактовой частоты. Поэтому я так стараюсь никогда не делать. Вообще, примите методу проектирования, когда автомат только роздает управляющие воздействия и более ничего. И тогда проект становится значительно легче. Вы делаете "исполнительные узлы" и потом в нужные моменты времени автоматом только даете управляющие воздействия. Если хотите, то могу росказать подробнее.
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Jun 7 2018, 18:39
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(iosifk @ Jun 7 2018, 21:18)  Синхронный проект должен работать по клокам. Если Вы из автомата даете только одиин сигнал разрешения, то счетчик и будет работать по клокам. И по разрядам счетчика разойдется только один сигнал... А если при описании автомата, Вы запихиваете счетчик "внутрь" комбинационной части, то что будет подано на тактовые входы счетчика? Но даже если компилятор сообразит подать туда клоки, то все равно, к комбинационной части добавятся еще N разрядов счетчика. И все это надо будет уложить в период тактовой частоты. Поэтому я так стараюсь никогда не делать. Простите но это просто глупость - Вы действительно считаете что счетчик описанный в FSM будет по другому синтезирован чем счетчик описанный вне FSM? Может приведете примеры такого "безобразия" ? Успехов! Rob.
|
|
|
|
|
Jun 8 2018, 02:18
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(RobFPGA @ Jun 8 2018, 01:39)  Приветствую!
Простите но это просто глупость - Вы действительно считаете что счетчик описанный в FSM будет по другому синтезирован чем счетчик описанный вне FSM? Может приведете примеры такого "безобразия" ?
Успехов! Rob. Думаю тут речь идёт больше о стиле написания кода, формально счётчик конечно будет одинаково синтезироваться в обоих случаях. Я тоже стараюсь в автоматы ничего лишнего не запихивать по двум причинам : 1. Код легче читается - в автомате ты сосредотачиваешься только на переходах и условиях перехода, всё остальное - в отдельные процессы. 2. При таком стиле труднее допустить ошибку (управление автоматом асинхронным сигналом, забыл описать else после if - получил латч и т.п.). Меньше портянка FSM - сложнее облажаться в мелочах. Это больше про coding style ИМХО. P.S. Топикстартеру - у меня есть корка именно под FT2232H Async 245 интерфейс, правда она под Xilinx-ISE-XPS, но никто же не обещал что будет легко. Надо?
|
|
|
|
|
Jun 8 2018, 05:31
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 4-06-18
Пользователь №: 104 848

|
Цитата(Bad0512 @ Jun 8 2018, 05:18)  Думаю тут речь идёт больше о стиле написания кода, формально счётчик конечно будет одинаково синтезироваться в обоих случаях. Я тоже стараюсь в автоматы ничего лишнего не запихивать по двум причинам : 1. Код легче читается - в автомате ты сосредотачиваешься только на переходах и условиях перехода, всё остальное - в отдельные процессы. 2. При таком стиле труднее допустить ошибку (управление автоматом асинхронным сигналом, забыл описать else после if - получил латч и т.п.). Меньше портянка FSM - сложнее облажаться в мелочах. Это больше про coding style ИМХО.
P.S. Топикстартеру - у меня есть корка именно под FT2232H Async 245 интерфейс, правда она под Xilinx-ISE-XPS, но никто же не обещал что будет легко. Надо? Буду очень признателен!
|
|
|
|
|
Jun 8 2018, 06:58
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(flammmable @ Jun 8 2018, 12:31)  Буду очень признателен! Держите.
|
|
|
|
Сообщений в этой теме
flammmable Тернарный оператор VS конструкция if-else Jun 7 2018, 06:53  flammmable Цитата(Flip-fl0p @ Jun 7 2018, 10:20... Jun 7 2018, 10:32   iosifk Цитата(flammmable @ Jun 7 2018, 13:32) Ко... Jun 7 2018, 11:45    flammmable Цитата(iosifk @ Jun 7 2018, 14:45) Для на... Jun 7 2018, 12:26     iosifk Цитата(flammmable @ Jun 7 2018, 15:26) Т.... Jun 7 2018, 12:30      flammmable Цитата(iosifk @ Jun 7 2018, 15:30) Тогда ... Jun 7 2018, 15:17    flammmable Цитата(iosifk @ Jun 7 2018, 14:45) Если В... Jun 13 2018, 08:31     iosifk Цитата(flammmable @ Jun 13 2018, 11:31) к... Jun 13 2018, 08:49   RobFPGA Приветсвую!
Цитата(flammmable @ Jun 7 201... Jun 7 2018, 12:16   sazh Цитата(flammmable @ Jun 7 2018, 13:32) 1.... Jun 7 2018, 19:20     dima32rus Цитата(RobFPGA @ Jun 7 2018, 21:39) Прост... Jun 8 2018, 06:43      RobFPGA Приветствую!
Цитата(dima32rus @ Jun 8 20... Jun 8 2018, 08:35 RobFPGA Приветсвую!
Цитата(flammmable @ Jun 7 20... Jun 7 2018, 08:05 andrew_b Цитата(flammmable @ Jun 7 2018, 09:53) Пр... Jun 7 2018, 08:22 Dantist2k17 ЦитатаНо почему не прокатывает следующий вариант?
... Jun 7 2018, 11:30 lembrix Цитата(flammmable @ Jun 7 2018, 13:32) Пр... Jun 8 2018, 07:39 Flip-fl0p Цитата(lembrix @ Jun 8 2018, 10:39)
Я бы... Jun 8 2018, 07:43 dima32rus Ну вот такой теоретический пример
CODEmodule cnt_t... Jun 8 2018, 10:20 RobFPGA Приветствую!
Цитата(dima32rus @ Jun 8 201... Jun 8 2018, 10:48  dima32rus Цитата(RobFPGA @ Jun 8 2018, 13:48) Вот о... Jun 8 2018, 11:06   Flip-fl0p Цитата(dima32rus @ Jun 8 2018, 14:06) Сог... Jun 8 2018, 11:26 Flip-fl0p Цитата(dima32rus @ Jun 8 2018, 13:20)
Да... Jun 8 2018, 10:50  RobFPGA Приветствую!
Цитата(Flip-fl0p @ Jun... Jun 8 2018, 11:30   Flip-fl0p Цитата(RobFPGA @ Jun 8 2018, 14:30)
Экон... Jun 8 2018, 11:39    RobFPGA Приветствую!
Цитата(Flip-fl0p @ Jun ... Jun 8 2018, 11:49     Flip-fl0p Цитата(RobFPGA @ Jun 8 2018, 14:49) ....
... Jun 8 2018, 12:08 dima32rus Переделал модуль. Теперь счетчик, вынесенный из ав... Jun 8 2018, 12:19
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|