Мне интересно, что означает assign hd_trs_detected = |hd_trs_match;
в verilog. Меня больше всего интересует часть |hd_trs_match
. Я знаю, что | означает бит мудрый ИЛИ, но не уверен, как интерпретировать его без значения до |
. Является ли это понятным «1» или «0»? Если это «0», каково было бы использование |hd_trs_match
против hd_trs_match
, поскольку hd_trs_detected
всегда было бы чем угодно hd_trs_match is
? Или это может быть немного мудрая операция сама по себе.Что означает переменная в verilog?
ответ
|
является оператором с ограниченной ответственностью. Для многобитового сигнала он выдает выходной сигнал, применяя операнд к каждому биту вектора.
Например,
wire [3:0] in;
wire out;
assign out =| in; // the same as out = in[3] | in[2] | in[1] | in[0];
Вы можете сделать то же самое с &
, ^
и т.д.
В этом ussage |
является оператором сокращения, не побитового оператора. Оператор сокращения описывается в разделе Операторы сокращения все версии LRM. Из оригинального IEEE Stid 1364-1995 от Verilog в § 4.1.11 до последней версии SystemVerilog IEEE Std 1800-2012 в § 11.4.9. Вот выдержка из IEEE Std 1800-2012 § 11.4.9:
В унарных сокращений должны выполнить побитовую операцию на одном операнде для получения одного битного результата. Для сокращение И, сокращение ИЛИ, и Операторы сокращения XOR, первый шаг операции должен применять оператор между первым битом операнда и вторым, используя таблицу 11-16 через таблицу 11-18. Второй и последующие шаги должны применять оператор между 1-битным результатом предыдущего шага и следующим битом операнда, используя ту же логическую таблицу. ...
побитовые и сокращение операторы используют один и тот же характер (например: |
, &
, ^
). Чтобы отличить два, проверьте значение на левой стороне оператора. Если есть значение, то это бит-мудрый, если ничего, а затем сокращение.
Вы можете смешать бит-мудрый и уменьшить в том же выражении. Например, out = &in1^|in2;
, где &
и |
являются операторами сокращения (без значений слева) и ^
побито (результат &in1
- это левое значение). Однако, чтобы быть более удобочитаемым для человека, возобновить операции сокращения более визуально явными с помощью круглых скобок: out = (&in1)^(|in2);
Возможный дубликат [Verilog побитовое или («|») монадическое] (http://stackoverflow.com/questions/19303928/verilog-bitwise-or-monadic) – Qiu