Что делает <=
в verilog.<= Оператор присваивания в Verilog
Например
always @(posedge Clock) begin
if (Clear) begin
BCD1 < = 0;
BCD0 < = 0;
end
end
Что делает <=
в verilog.<= Оператор присваивания в Verilog
Например
always @(posedge Clock) begin
if (Clear) begin
BCD1 < = 0;
BCD0 < = 0;
end
end
«< =» в Verilog называется неблокирующим присваиванием, которое приносит большую разницу, чем «=», которое называется блокировкой назначения из-за планирования событий в любых симуляторах на основе поставщиков.
Рекомендуется использовать неблокирующее назначение для последовательной логики и назначения блокировки для комбинационной логики, только тогда он обнаруживает правильную аппаратную логику во время синтеза.
Неблокирующие операторы в последовательном блоке будут вызывать флип-флоп в реальном оборудовании.
Всегда помните, что не смешивайте блокировку и неблокирование в любом последовательном или комбинационном блоке.
В ходе процесса планирования тренажера:
Есть четыре области и порядок выполнения команд следующего
1) Active region
--Blocking assignments
--Evaluation of RHS of non-blocking assignments(NBA)
--Continuous assignment
--$display command
--Evaluate input and output of primitives
2) Inactive region
--#0 blocking assignments
3) NBA(non-blocking assignment update)
--update LHS of non-blocking assignments (NBA)
4) Postponed
--$monitor command
--$strobe command
Использования блокировки задания «=» для двух переменных одновременно слот вызывает гонки состояние
например: Verilog код с гонки условия,
always @(posedge Clock)
BCD0 = 0; // Usage of blocking statements should be avoided
always @(posedge Clock)
BCD1 = BCD0;
Для того, чтобы избежать гонок условия использования нелипкого заявления «< =»
например:
always @(posedge Clock)
BCD0 <= 0; // Recommended to use NBA
always @(posedge Clock)
BCD1 <= BCD0;
Когда этот блок выполняются, будет два события, добавленным в очередь обновления блокировки ASSIGN, не. Следовательно, это приводит к обновлению BCD1 от BCD0 в конце шага времени.
Использование неблокирующего назначения «< =» в операции непрерывного присваивания не допускается в соответствии с Verilog LRM и приведет к ошибке компиляции.
например:
assign BCD0 <= BCD1; //Results in compilation error
Только использовать NBA в процедурных операторов присваивания,
- initial and
- always blocks
Это называется 'неблокирующей' назначение. Неблокирующее назначение позволяет дизайнерам описывать обновление состояния машины без необходимости объявления и использования переменных временного хранения.
Например, в этом коде, когда вы используете неблокирующее назначение, его действие не будет зарегистрировано до следующего тактового цикла. Это означает, что порядок присвоений не имеет значения и даст тот же результат.
Другой оператор присваивания, '=', называется назначением блокировки. Когда используется '=' назначение, для целей логики целевая переменная немедленно обновляется.
понять это более глубоко, пожалуйста, посмотрите на этот пример (из Википедии):
module toplevel(clock,reset);
input clock;
input reset;
reg flop1;
reg flop2;
always @ (posedge reset or posedge clock)
if (reset)
begin
flop1 <= 0;
flop2 <= 1;
end
else
begin
flop1 <= flop2;
flop2 <= flop1;
end
endmodule
В этом примере, flop1 <= flop2
и flop2 <= flop1
бы поменять местами значения этих двух reg
с. Но если мы использовали назначение блокировки, =
, этого не произошло бы, и поведение было бы неправильным.
** Ваш вопрос downvoted, потому что это то, что вы можете легко найти в основной Verilog раздаточный материал или книгу , Не очень полезно для вас или других, чтобы вас попросили на форуме вроде этого.
Как было сказано выше, это назначение «Non Blocking < =», широко используемое для последовательного логического дизайна, поскольку оно может лучше всего имитировать его. Вот почему: В основном, с задержкой (здесь часы с позером) это что-то вроде этого, планирование оценки RHS на LHS после указанной задержки и переход к следующему оператору (эмулирующему последовательный) в потоке в отличие от «Блокировка = который фактически задерживает выполнение следующего оператора в соответствии с указанной задержкой (эмуляция комбинационного)
Как стандартная практика в стеке, перед тем, как сбрасывать, вам нужно объяснить причина. Мой ответ абсолютно верный, он просто упоминается предельно точно и на моем собственном языке. –
«< =» - это неблокирующий оператор присваивания в verilog. «=» является оператором присваивания блокировки.
Рассмотрим следующий код ..
[email protected](clk)
begin
a=b;
end
[email protected](clk)
begin
b=a;
end
Значения а и Ь происходит обмен с использованием двух различных блоков всегда .. Использование «=» здесь вызвало гонки вокруг состояния. то есть. одновременно изменяются переменные a и b. Использование «< =» позволит избежать гонки.
[email protected](clk)
begin
a<=b;
end
[email protected](clk)
begin
b<=a;
end
Надежда я помог тоже ..
<=
не является назначение блокировки. Операторы <=
выполняются параллельно. Подумайте о конвейерной архитектуре, где мы сталкиваемся с использованием таких назначений.
Небольшой exammple:
// инициализирует а, б, в 1, 2 и 3 соответственно. initial begin a <= 1 b <= 2 c <= 3 end
[email protected](clock.posedge) begin a <= b b <= c c <= a end
После первого posedge часы: a = 2, b = 3, c = 1
После второй posedge часы: a = 3, b = 1, c = 2
После третьего часы posedge: a = 1, b = 2, c = 3
Поскольку люди уже объяснил ситуацию блокировки/блокировки, я просто добавлю это здесь, чтобы помочь с пониманием. "< =" заменяет слово "получает", как вы читаете код
Например:
.... // Verilog код здесь
< = B // прочитать его как A получает B
Когда A получает B? В данном временном интервале подумайте обо всем, что происходит в аппаратных средствах во временных слотах, например, в конкретном выборочном событии, управляемом часами. Если оператор «< =» используется в модуле с часами, которые работают каждые 5 нс, представьте, что A получает B в конце этого временного интервала, после того, как все остальные «блокирующие» назначения разрешены и в то же время, что и другие неблокирующие задания.
Я знаю, что он запутан, он становится лучше, когда вы используете и испортите кучу конструкций и узнаете, как это работает.
Может кто-нибудь объяснить, почему они отказались от этого? – Ben
Пожалуйста, проверьте, http://stackoverflow.com/questions/4653284/how-to-interpret-blocking-vs-non-blocking-assignments-in-verilog – Jithin