Замечание о MUX
Напомним, что ?
описывает мультиплексор (MUX), поэтому утверждение:
out = sel ? x : y
эквивалентен в реализации уровня шлюза:
out = (sel & x) | (~sel & y)
(когда sel=1
, out <= x
, когда sel=0
, out <= y
)
Если y=0
, то MUX сводится к И между x
и sel
: out = (sel & x) | (~sel & 0) = sel & x
Получение w_r
Предполагая BW=2
и [1112 ] w_r
- это 4-битный сигнал. Давайте разберемся с этим:
w_r = w_rL ^ x_rR
w_rL = { ((i_a[1])?i_b:{(BW){1'b0}}), 1'b0 }
w_rR = { 1'b0, ((i_a[0])?i_b:{(BW){1'b0}}) }
Обратите внимание, что оба значения «else» MUX равны нулю ', то MUX упрощены до AND, как в примечании выше:
w_rL = { BW{i_a[1]} & i_b, 1'b0 } = { A1 & B1, A1 & B0, 0 }
w_rR = { 1'b0, BW{i_a[0]} & i_b } = { 0, A0 & B1, A0 & B0}
Я заменил i_a = {A1, A0}
и i_b = {B1, B0}
упростить представление. В конце концов, путем их XORing по битам:
w_r[0] = 0 ^ (A0 & B0) = A0 & B0
w_r[1] = (A1 & B0) ^ (A0 & B1)
[1122]
1123]
w_r[3] = 0
(устанавливается неявно)
Получение c
Аналогично для 1-битный сигнал c
:
c = cL & cR
cL = i_a[1] ? i_b[(BW-2):0]:{(BW-1){1'b0}} = {A1 & B0}
cR = i_a[0] ? i_b[(BW-1):1]:{(BW-1){1'b0}} = {A0 & B1)
[1128]
В конце концов:
c = {A1 & B0 & A0 & B1}
Получение o_r
Если разбить o_r
битов:
o_r[0] = 0 + w_r[0] = A0 & B0
o_r[1] = 0 + w_r[1] = (A1 & B0) ^ (A0 & B1)
o_r[2] = c + w_r[2] = (A1 & B0 & A0 & B1) + (A1 & B1)
- если мы добавим их, то сумма будет их XOR, и перенос это их И, то есть: o_r[2] = (A1 & B0 & A0 & B1) ^ (A1 & B1)
o_r[3] = <carry from o_r[2] addition> = A1 & B0 & A0 & B1 & A1 & B1 = A1 & B0 & A0 & B1
(помните, ANDing с собой равняется самому себе, то есть x & x = x
)
Вывод диаграммы уровня шлюза
Ваша диаграмма уровня шлюза отображает следующие уравнения:
C0 = A0 & B0
(=o_r[0]
)
C1 = (A0 & B1) ^ (A1 & B0)
(=o_r[1]
)
C2 = (A0 & B1 & A1 & B0) ^ (A1 & B1)
(=o_r[2]
сумма)
C3 = (A0 & B1 & A1 & B0) & (A1 & B1) = A0 & B1 & A1 & B0
(=o_r[3]
переносить)
Почему реализация такая странная?!
Комментарии к коду указывают, что ячейка умножителя построена для конкретной архитектуры FPGA, и похоже, что намерение исходного кодера было чтобы соответствовать каждой ячейке множителя в одной LUT для этой архитектуры. Поэтому я держу пари, что оригинальный кодер пытался «направить» старый, тупой инструмент на построение множителя эффективным с точки зрения ПЛИС способом, который обычно не эффективен на уровне затвора. Я думаю, что такие «ручные» оптимизации уровня RTL бесполезны с сегодняшними инструментами EDA (надеюсь!).
Ayende и компания обычно рекомендуют использовать сессию на "разговор". Это обычно делает время жизни сессии в последний раз для очень коротких операций, таким образом, оно ведет себя больше как веб-приложение.
Для Вашего древовидного случая можно использовать решение № 2 Bruno очень хорошо. Объекты могут быть лениво отображены. Затем каждый раз, когда необходимо получить доступ к дочернему набору, Вы запускаете разговор и повторно подключаете родителя через ISession. Блокировка. Затем, когда привязка данных сделана, закройте тот сеанс. Не слишком много служебное для поддержания, всего несколько строк кода в любой форме, которая должна нести разговор; можно расширить Форму и средства управления, которые Вы используете, чтобы сделать это автоматически, если Вы чувствуете себя нахальными.
Хитрая часть, затем, является параллельными редактированиями от различных сессий. Давайте не идти туда!
Я открываю сессию, когда мне будет нужно один, и я закрою ее, когда я знаю, что мне больше не будет нужна она.
Строго говоря, например, если у меня будет форма, которая позволяет мне отредактировать информацию о Клиенте, например, то я открою сессию, когда форма инстанцируют, и я закрою Сеанс, когда форма закрывается. Когда у меня есть 2 экземпляра той открытой формы, у меня также есть 2 открытые сессии.
Я вижу несколько альтернатив:
Можно смотреть к моим сообщениям о том, как использовать uNHAddins для работы с сессией на разговор в приложении Windows Forms (uNHAddins, проект с некоторым additionsns к NHibernate во главе с Fabio Maulo, текущим Выводом NH),
Первое сообщение - это
http://gustavoringel.blogspot.com/2009/02/unhaddins-persistence-conversation-part.html
Оттуда у Вас есть ссылки на соединительную линию uNHAddins.