реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Не получается синтезировать мультиплексор шин, Verilog
des333
сообщение Sep 18 2017, 13:43
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 104
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(Golikov A. @ Sep 18 2017, 16:40) *
мне тоже кажется что схемы разные. Просто мы видим разные условия формирования выхода о2, по таблице истинности они различны, как может быть одна схема?


Да никак не может быть, они разные 100%.

Если что-то синтезирует одинаково -- то это бага в синтезаторе.
Вот и хочу узнать, что за САПР, какая версия.


--------------------
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Sep 18 2017, 13:53
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 354
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Цитата(des333 @ Sep 18 2017, 16:43) *
Да никак не может быть, они разные 100%.

Если что-то синтезирует одинаково -- то это бага в синтезаторе.
Вот и хочу узнать, что за САПР, какая версия.

Синтез обеих схем дает :
i1 не подключен,
i2 напрямик на o1,
о2 посажен на gnd.
Проверьте на своих синтезаторах.

Это пример, приведенный в контексте, почему рекомендуется при описании комбинаторики не использовать if else,
и почему не только latch, но и разная трактовка X со стороны синтезатора и симулятора причина потенциальных проблем.
Go to the top of the page
 
+Quote Post
des333
сообщение Sep 18 2017, 14:21
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 104
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(Mad_max @ Sep 18 2017, 16:53) *
Синтез обеих схем дает :
i1 не подключен,
i2 напрямик на o1,
о2 посажен на gnd.
Проверьте на своих синтезаторах.


Мне кажется, Вам нужно нарисовать 2 таблицы истиности.
Думаю, за пару минут Вы поймёте, что не правы.

Если на поймёте, то выложите, плиз, Ваши таблицы сюда -- вместе проанализируем.

Цитата(Mad_max @ Sep 18 2017, 16:53) *
Это пример, приведенный в контексте, почему рекомендуется при описании комбинаторики не использовать if else,
и почему не только latch, но и разная трактовка X со стороны синтезатора и симулятора причина потенциальных проблем.


Это пример того, что разные схемы дают разный результат.


--------------------
Go to the top of the page
 
+Quote Post
lembrix
сообщение Sep 18 2017, 14:22
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 13-04-17
Из: Москва
Пользователь №: 96 508



Сдается мне, в оригинальном примере где-то присутствовал Х. Но он потерялся, а без него фокуса не получится.
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Sep 18 2017, 14:25
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 354
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Цитата(lembrix @ Sep 18 2017, 17:22) *
Сдается мне, в оригинальном примере где-то присутствовал Х. Но он потерялся, а без него фокуса не получится.

Оригинал был таков
Код
module test (
    input  wire i1,
    input  wire i2,
    output reg  o1,
    output reg o2);

always @ (i1 or i2)
  case ({i1, i2})
    2'b00:       o1 = 1'bX;
    2'b01:       o1 = 1'bX;
    2'b10:       o1 = 1'b0;
    2'b11:       o1 = 1'b1;
    default:     o1 = 1'bX;
  endcase

always @ (i2 or o1)
   if (o1) o2 = 1'b0;
   else    o2 = i2;

endmodule
Go to the top of the page
 
+Quote Post
lembrix
сообщение Sep 18 2017, 14:40
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 13-04-17
Из: Москва
Пользователь №: 96 508



Ну понятно, для симулятора это разные схемы:
(1 | X) = 1,
а (o1==1) = FALSE, при o1 =Х .

А для синтезатора X означает, что он может оптимизировать схему как ему надо.

Сообщение отредактировал lembrix - Sep 18 2017, 14:41
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Sep 18 2017, 14:49
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 354
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Цитата(des333 @ Sep 18 2017, 17:21) *
Мне кажется, Вам нужно нарисовать 2 таблицы истиности.
Думаю, за пару минут Вы поймёте, что не правы.
Если на поймёте, то выложите, плиз, Ваши таблицы сюда -- вместе проанализируем.
Это пример того, что разные схемы дают разный результат.

Да пардон, это я, что то погнал. Конструкция через always не эквивалентна конструкции через assign.
Go to the top of the page
 
+Quote Post
des333
сообщение Sep 18 2017, 14:50
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 104
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(Mad_max @ Sep 18 2017, 17:49) *
Да пардон, это я, что то погнал. Конструкция через always не эквивалентна конструкции через assign.


Ничего страшного. Все иногда ошибаются sm.gif


--------------------
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Sep 18 2017, 14:58
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 354
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Цитата(lembrix @ Sep 18 2017, 17:40) *
Ну понятно, для симулятора это разные схемы:
(1 | X) = 1,
а (o1==1) = FALSE, при o1 =Х .

А для синтезатора X означает, что он может оптимизировать схему как ему надо.

Поэтому и различный результат моделирования netlis и RTL.



Так все же какова будет схема функционально эквивалентная исходной,
но с одинаковым результатом моделирования RTL и netlist?
Go to the top of the page
 
+Quote Post
lembrix
сообщение Sep 18 2017, 15:02
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 13-04-17
Из: Москва
Пользователь №: 96 508



Цитата(Mad_max @ Sep 18 2017, 17:53) *
Поэтому и различный результат моделирования netlis и RTL.

Результат то различный, но в обоих случаях не неправильный. Что попросили, то и получили. И вывод и этого примера, как по мне,такой, что не надо использовать "Х". А "if else" можно спокойно использовать и для комбинационных схем.
Go to the top of the page
 
+Quote Post
yes
сообщение Sep 18 2017, 15:41
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 011
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(Mad_max @ Sep 16 2017, 11:26) *
Позанудствую немного.
В ряде стандартов и рекомендаций говориться, что для описания комбинаторики не стоит использовать if else конструкцию,
либо case, либо через ?. Аргумент такой, что можно получить различный результат моделирования RTL описания и netlist.
Сам, ей Богу, ни разу с таким не сталкивался, но не просто также это рекомендуют...


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

ну и чтоб два раза не бегать - я за тех кто пишет поведенческие конструкции, а не смесь always c assign, как в добрые 90-е sm.gif
Go to the top of the page
 
+Quote Post
des333
сообщение Sep 18 2017, 16:21
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 104
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(yes @ Sep 18 2017, 18:41) *
ну и чтоб два раза не бегать - я за тех кто пишет поведенческие конструкции, а не смесь always c assign, как в добрые 90-е sm.gif


А поведенческое -- это always или assign? biggrin.gif


--------------------
Go to the top of the page
 
+Quote Post
cdg
сообщение Sep 18 2017, 18:23
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 308
Регистрация: 8-09-04
Из: Таганрог
Пользователь №: 617



Цитата(des333 @ Sep 18 2017, 19:21) *
А поведенческое -- это always или assign? biggrin.gif

wait, @, forever ...
P/S/
biggrin.gif
Go to the top of the page
 
+Quote Post
Kopart
сообщение Sep 20 2017, 23:11
Сообщение #29


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 1-03-05
Из: Spb
Пользователь №: 2 972



Цитата(Mad_max @ Sep 16 2017, 11:26) *
Позанудствую немного.
В ряде стандартов и рекомендаций говориться, что для описания комбинаторики не стоит использовать if else конструкцию,
либо case, либо через ?. Аргумент такой, что можно получить различный результат моделирования RTL описания и netlist.

Тут все становится понятно и логично, когда с таким столкнешься и поищешь способы исправления "таких различий".
Это из-за специфики нетлиста ASIC и Х-состояния.

Здесь описано почему такая рекомендация не позволяет "выстрелить себе в ногу" лишний раз
http://www.verilogpro.com/systemverilog-ve...mism-pessimism/
Цитата
A different way to address if…else X optimism is with the conditional operator:
condition ? expression_if_true : expression_if_false


Но никто не будет всё переписывать только через "condition ?", поэтому в VCS добавлена отдельная опция xprop=tmerge/xmerge.
Она позволяет избавится от различий при симуляции описании содержащих if else. Но есть глюки и заметно снижает скорость симуляции.
Здесь подробнее про нее написано: http://www.verilogpro.com/x-propagation-with-vcs-xprop/


--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th November 2017 - 09:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016