Understanding Digital Logic Design

Дополнительные материалы для объединенного семинара MIPSfpga и Connected MCU от Imagination Technologies Октябрь-Ноябрь 2016

Контрольная работа 2.2 - Комбинационная и последовательная логика

Имя ___________________________________________________________________

Понятия блокирующих и неблокирующих присвоений в SystemVerilog, Комбинационные и последовательные always-блоки, их моделирование и синтез. Для каждой тестируемой конструкции (dut1-dut16) показаны соответствующие схемы и соответствующий временные диаграммы: module dut1 module dut2 ( ( input clk, input clk, input [7:0] d, input [7:0] d, output logic [7:0] q output logic [7:0] q ); ); always @(posedge clk) always_ff @(posedge clk) q <= d; q <= d; endmodule endmodule module dut3 module dut4 ( ( input clk, input clk, input [7:0] d, input [7:0] d, output logic [7:0] q output logic [7:0] q ); ); logic [7:0] r; logic [7:0] r; always @(posedge clk) always @(posedge clk) begin begin r <= d; q <= r; q <= r; r <= d; end end endmodule endmodule module dut5 module dut6 ( ( input clk, input clk, input [7:0] d, input [7:0] d, output logic [7:0] q output logic [7:0] q ); ); always @* always_comb q = d; q = d; endmodule endmodule module dut7 module dut8 ( ( input clk, input clk, input [7:0] d, input [7:0] d, output logic [7:0] q output logic [7:0] q ); ); logic [7:0] r; logic [7:0] r; always @(posedge clk) always @(posedge clk) r <= d; q <= r; always @(posedge clk) always @(posedge clk) q <= r; r <= d; endmodule endmodule module dut9 module dut10 ( ( input clk, input clk, input [7:0] d, input [7:0] d, output logic [7:0] q output logic [7:0] q ); ); logic [7:0] r; logic [7:0] r; always @* always @(posedge clk) r = d; q <= r; always @(posedge clk) always @* q <= r; r = d; endmodule endmodule module dut11 module dut12 ( ( input clk, input clk, input [7:0] d, input [7:0] d, output logic [7:0] q output logic [7:0] q ); ); logic [7:0] r; assign r = d; wire [7:0] r = d; always @(posedge clk) always @(posedge clk) q <= r; q <= r; endmodule endmodule module dut13 module dut14 ( ( input clk, input clk, input [7:0] d, input [7:0] d, output logic [7:0] q output logic [7:0] q ); ); logic [7:0] r; logic [7:0] r; assign r = d; assign q = r; assign q = r; assign r = d; endmodule endmodule module dut15_not_a_good_style module dut16_bad_style ( ( input clk, input clk, input [7:0] d, input [7:0] d, output logic [7:0] q output logic [7:0] q ); ); logic [7:0] r; logic [7:0] r; always @(posedge clk) always @(posedge clk) begin begin r = d; q <= r; q <= r; r = d; end end endmodule endmodule Тестовый код используемый для генерации временных диаграмм module testbench; logic clk; logic [7:0] d, q; dut dut (clk, d, q); initial begin clk = 0; forever #10 clk = ! clk; end initial begin $dumpvars (); for (int i = 0; i < 10; i++) begin @(posedge clk); #15; d = i; end $finish; end endmodule

A)

B)

C)

X)

Y)

Z)

17. Какая задержка проиллюстрирована на рисунке ниже (отмечена знаком «?»)? a) Задержка распространения tpcq = период времени после фронта тактового сигнала, после окончания которого выход Q будет гарантированно стабильным (т.е, прекратит изменяться) b) Задержка реакции tccq = период времени после фронта тактового сигнала, после окончания которого Q может быть нестабильным (т.е., начать изменяться) c) Расфазировка: различие между двумя тактовыми фронтами. Тактовые сигналы не поступают во все регистры в одно и тоже время. 18. Какая задержка проиллюстрирована на рисунке ниже (отмечена знаком «?»)? a) Время предустановки: tsetup = период времени перед фронтом тактового сигнала, в течении которого данные должны быть стабильными (т.е. не изменяться) b) Время удержания: thold = период времени после фронта тактового сигнала, в течении которого данные должны быть стабильными c) Апертурное время: ta = общее время в окрестности фронта тактового сигнала, в течении которого данные должны быть стабильными (ta = tsetup + thold) d) Tc = максимальная и минимальная задержка между регистрами 19. Какое правило присвоения сигнала нарушается в следующем коде? a) Синхронная последовательная логика: использован always @(posedge clk) или always_ff @(posedge clk) и неблокирующее присвоение (<=) always_ff @ (posedge clk) q <= d; // nonblocking b) Простая комбинационная логика: использовано непрерывное присвоение (assign�) assign y = a & b; c) Более сложная комбинационная логика: использован always @* или always_comb и блокирующие присвоение (=) d) Сигнал изменяется только одним оператором always или оператором непрерывного присваивания e) Этот код не нарушает никаких правил для назначения сигнала module pattern_fsm_moore ( input clock, input resetn, input a, input b, output y ); parameter [1:0] S0 = 0, S1 = 1, S2 = 2, S3 = 3; reg [1:0] state, next_state; // state register always @ (posedge clock or negedge resetn) if (! resetn) state = S0; else state = next_state; // next state logic always @* case (state) S0: next_state = a ? S0 : S1; S1: next_state = a ? S1 : S2; S2: next_state = S3; S3: next_state = a ? S2 : b ? S0 : S1; endcase // output logic assign y = (state == S3); endmodule Контрольная работа составлена Юрием Панчулом