input x;
input y;
input[10:0] z;
wire a;
assign a = x & y & (|z);
Я ищу код и не понимаю, что делает строка на назначении. Объяснение относительно того, что означает эта линия, будет оценено!Логика за кодом Verilog
input x;
input y;
input[10:0] z;
wire a;
assign a = x & y & (|z);
Я ищу код и не понимаю, что делает строка на назначении. Объяснение относительно того, что означает эта линия, будет оценено!Логика за кодом Verilog
wire a
управляется некоторой комбинационной логикой. В этой комбинационной логике все биты input [10:0] z
объединены вместе (это то, что означает |z
). Затем результат этого ORing (т.е. выход 11-входного логического элемента ИЛИ) равен AND вместе с входами x
и y
. Результат этого ANDing (т.е. выход этого 3-входного логического элемента AND) назначается wire a
(т. Е. 3-входные логические устройства И wire a
).
z
является сигналом в одиннадцать бит.
|
- это сигнал or reduction
.
(|z)
будет правдой (1
), если в z
есть хотя бы один бит, то есть 1
. С другой стороны, (|z)
будет ложным (0
), если все биты в z
: 0
. Это означает, что сигнал является коротким способом проверки, если сигнал 0
.
|z <==> z==0;
&
является bitwise and
. Это означает, что для многобитового сигнала он будет выполнять операцию and
между каждым битовым индексом. Результат будет иметь тот же размер, что и входы. например:
wire [2:0] signal1, signal2, result;
assign result = signal1 & signal2;
эквивалентно (бит в бит):
assign result[0] = signal1[0] && signal2[0];
assign result[1] = signal1[1] && signal2[1];
assign result[2] = signal1[2] && signal2[2];
или (с конкатенации):
assign result = {signal1[0] && signal2[0],signal1[1] && signal2[1],signal1[2] && signal2[2]}
В вашем выражении, хотя, как и все сигналы 1 бит (a
, b
и (|z)
) поэтому &
или &&
можно использовать эквивалентно.
Схематическое делать то, что выражение состояния с простыми 2-входами ворот является следующее:
Дополнительная информация об операторах и как переводить их в аппаратных средствах можно найти на this site.