2016-07-25 4 views
0

Мне интересно, что означает 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?

+2

Возможный дубликат [Verilog побитовое или («|») монадическое] (http://stackoverflow.com/questions/19303928/verilog-bitwise-or-monadic) – Qiu

ответ

3

| является оператором с ограниченной ответственностью. Для многобитового сигнала он выдает выходной сигнал, применяя операнд к каждому биту вектора.

Например,

wire [3:0] in; 
wire out; 
assign out =| in; // the same as out = in[3] | in[2] | in[1] | in[0]; 

Вы можете сделать то же самое с &, ^ и т.д.

+0

'=' не является частью оператора сокращения. – Greg

+0

@ Грег исправлен; (благодаря!) – wilcroft

4

В этом 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);

 Смежные вопросы

  • Нет связанных вопросов^_^