diff --git a/Basic Verilog structures/Multiplexors.md b/Basic Verilog structures/Multiplexors.md index 5efb5fa..49f2337 100644 --- a/Basic Verilog structures/Multiplexors.md +++ b/Basic Verilog structures/Multiplexors.md @@ -71,7 +71,10 @@ assign Y = S==1 ? D1 : D0; Мультиплексор можно описать в любом из этих блоков, разница будет лишь в том, к чему именно будет подключен выход мультиплексора: к проводу, регистру, или защелке. -При присваивании внутри блоков `always` используйте специальный оператор **неблокирующего присваивания** `<=`. Бывает еще оператор **блокирующего присваивания** `=`, объяснение различий в этих операторах требует отдельного документа, поэтому на текущий момент, во избежание проблем в будущем просто запомните: **внутри любого блока always необходимо использовать только оператор неблокирующего присваивания <=**. Подробно о различиях между блокирующими и неблокирующими присваиваниями рассказано в [этом документе](Assignments.md). +При присваивании внутри блоков `always` используйте специальный оператор **неблокирующего присваивания** `<=`. Бывает еще оператор **блокирующего присваивания** `=`. Подробно о различиях этих операторов рассказано в [этом документе](Assignments.md). До его прочтения запомните: + +- внутри блока `always_ff` необходимо использовать оператор неблокирующего присваивания (`<=`); +- внутри блока `always_comb` необходимо использовать оператор блокирующего присваивания (`=`). ```SystemVerilog logic Y; diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md index 2aab3e8..300baaf 100644 --- a/Labs/05. Main decoder/README.md +++ b/Labs/05. Main decoder/README.md @@ -216,26 +216,26 @@ module tequila ( ); parameter logic [3:0] PICKLE = 4'b1100; always_comb begin - a <= 1'b0; // значения по-умолчанию - b <= 1'b0; - c <= 1'b1; - d <= 1'b0; + a = 1'b0; // значения по-умолчанию + b = 1'b0; // обратите внимание, что в блоке + c = 1'b1; // always_comb используется оператор + d = 1'b0; // блокирующего присваивания case(cucumber) - // ... какие-то еще комбинации - PICKLE: begin // если на cucumber значение PICKLE - c <= 1'b0; - case (size) - 1'b0: b <= 1'b1; // если на size значение 1'b0 - 1'b1: d <= 1'b1; // если на size значение 1'b1 - endcase - end - // ... какие-то еще обработчики - default: begin // так как описаны не все значения - a <= 1'b0; // cucumber, то чтобы case не было - b <= 1'b0; // защелки (latch) на выходе - c <= 1'b1; // нужно обязательно добавлять - d <= 1'b0; // default - end + // ... какие-то еще комбинации + PICKLE: begin // если на cucumber значение PICKLE + c = 1'b0; + case (size) + 1'b0: b = 1'b1; // если на size значение 1'b0 + 1'b1: d = 1'b1; // если на size значение 1'b1 + endcase + end + // ... какие-то еще обработчики + default: begin // так как описаны не все значения + a = 1'b0; // cucumber, то чтобы case не было + b = 1'b0; // защелки (latch) на выходе + c = 1'b1; // нужно обязательно добавлять + d = 1'b0; // default + end endcase end diff --git a/Labs/14. Programming device/README.md b/Labs/14. Programming device/README.md index 8614e6f..43f527b 100644 --- a/Labs/14. Programming device/README.md +++ b/Labs/14. Programming device/README.md @@ -85,7 +85,7 @@ module turnstile_fsm( assign is_locked = state; - always @(posedge clk) begin + always_ff @(posedge clk) begin if(rst) begin state <= LOCKED; end @@ -128,7 +128,7 @@ module turnstile_fsm( // (!push) && coin — условие перехода в состояние UNLOCKED assign green_light = (state == LOCKED) && (!push) && coin; - always @(posedge clk) begin + always_ff @(posedge clk) begin if(rst) begin state <= LOCKED; end @@ -175,13 +175,13 @@ module turnstile_fsm( always_comb begin if(push) begin - next_state <= LOCKED; + next_state = LOCKED; end else if (coin) begin - next_state <= UNLOCKED; + next_state = UNLOCKED; end else begin - next_state <= state; + next_state = state; end end ```