Добавил:
ИВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

PLIS

.txt
Скачиваний:
1
Добавлен:
16.09.2023
Размер:
19.5 Кб
Скачать
По умолчанию - Времянки у
1 - bilet (Опишите на Verilog HDL мультиплексор 2 в 1 при помощи непрерывного присваивания. Нарисуйте схему получившегося элемента.)

module mult_2-1(
input clk,
input a,
input b,
output reg q
);
assign q = clk?a:b;
endmodule

2 - bilet (Опишите на Verilog HDL 8-разрядный реверсивный счётчик с синхронным сбросом и асинхронной параллельной загрузкой при помощи процедурного присваивания. Проиллюстрируйте его работу с помощью временных диаграмм. )

module 8_rev_counter(
input clk,
input rst,
input en,
input load,
input [7:0] data,
output reg [7:0] count
);

initial count =8'b11111111;
always @(posedge clk or posedge load)
begin
if (load) begin
count <= data;
end
else if (rst) begin
count <= 8'b11111111;
end
else if (en) begin
count <= count - 1;
end
else begin
count <= count;
end
end
endmodule
(Времянка в подгоне)


3 - bilet (В чем заключается отличие между блокирующим и неблокирующим присваиванием в Verilog HDL? Приведите пример, проиллюстрируйте его работу с помощью временных диаграмм.)

В Verilog HDL блокирующее присваивание (=`=`) и неблокирующее присваивание (`<=`) имеют различное поведение.
Блокирующее присваивание выполняется синхронно с тактовым сигналом и блокирует выполнение последующих операций до тех пор, пока присваивание не будет завершено. То есть, блокирующее присваивание выполняется последовательно и последующие операции ждут его завершения.
Неблокирующее присваивание выполняется асинхронно относительно тактового сигнала и не блокирует выполнение последующих операций. То есть, неблокирующее присваивание выполняется параллельно и не задерживает выполнение последующих операций.

module blocking_nonblocking(
input clk,
input d,
output reg[1:0] a,
output reg[1:0] b,
output reg[1:0] q
);

(Неблокирующее)
always @(posedge clk)
begin
a <= d;
b <= a;
q <= b;
end
endmodule


(Блокирующее)
always @(posedge clk)
begin
a = d;
b = a;
q = b;
end
endmodule


4 - bilet (Опишите на Verilog HDL сдвиговый регистр на 4 разряда при помощи неблокирующего присваивания, проиллюстрируйте его работу с помощью временных диаграмм.)

module shift_register(
input clk,
input rst,
input data,
output reg[3:0] out
);

always @(posedge clk or posedge rst)
begin
if (rst) begin
out <= 4'b0000;
end
else begin
out <= {out[2:0], data};
end
end
endmodule
(На времянке у Лизы out == registr)


5 - biet (Опишите на Verilog HDL сдвиговый регистр на 5 разрядов при помощи блокирующего присваивания. Ввод данных и сброс – синхронные. Проиллюстрируйте его работу с помощью временных диаграмм.)

module 5_shift_reg(
input clk,
input rst,
input load,
input [4:0] data,
output reg [4:0] shift_reg);



always @*
begin
if (rst) begin
shift_reg = 5'b01100;
end
else if (load) begin
shift_reg = data;
end
else begin
shift_reg = {shift_reg[3:0], shift_reg[4]};
end
end
endmodule
(На времянке у Лизы shift_reg == reg)


6 - bilet (Опишите на Verilog HDL 8-разрядный реверсивный счётчик с асинхронным сбросом и синхронной параллельной загрузкой при помощи процедурного присваивания. Проиллюстрируйте его работу с помощью временных диаграмм.)

module 8_rev_counter(
input clk,
input rst,
input load,
input en,
input [7:0] data,
output reg[7:0] count
);

initial count <= 8'b11111111;

always @(posedge clk or posedge reset)
begin
if (rst) begin
count <= 8'b11111111;
end
else if (load) begin
count <= data;
end
else if (en) begin
count <= count -1;
end
else begin
count <= count;
end
end
endmodule
(Времянка практически аналогична 2 билету В ПОДГОНЕ)


7 - bilet (Опишите на Verilog HDL 8-разрядный сумматор при помощи непрерывного и процедурного присваивания. Проиллюстрируйте его работу с помощью временных диаграмм.)

(Непрерывное присв)
module 8_sum(
input [7:0] a,
input [7:0] b,
output [7:0] sum
);

assign sum = a + b;
endmodule

(Процедурное присв)
module 8_sum(
input [7:0] a,
input [7:0] b,
output reg [7:0] sum
);

always @(a or b)
sum <= a + b;
endmodule


8 - bilet ( Опишите на Verilog HDL дешифратор 4 в 7 с асинхронным сбросом и синхронной загрузкой значения. Проиллюстрируйте его работу с помощью временных диаграмм.)

module dec_4to7(
input clk,
input [3:0] in,
input load,
input rst,
output reg [6:0] out
)

always @(posedge clk or posedge rst)
begin
if (rst) begin
out <= 7'b0000000;
end
else if (load) begin
case (in)
4'b0000: out <= 7'b0111111;
4'b0001: out <= 7'b0000110;
4'b0010: out <= 7'b1011011;
4'b0011: out <= 7'b1001111;
4'b0100: out <= 7'b1100110;
4'b0101: out <= 7'b1101101;
4'b0110: out <= 7'b1111101;
4'b0111: out <= 7'b0000111;
4'b1000: out <= 7'b1111111;
4'b1001: out <= 7'b1101111;
4'b1010: out <= 7'b1110111;
4'b1011: out <= 7'b1111100;
4'b1100: out <= 7'b0111001;
4'b1101: out <= 7'b1011110;
4'b1110: out <= 7'b1111001;
4'b1111: out <= 7'b1110001;
default: out <= 7'b1111111;
endcase
end
end
endmodule
(Времянка в подгоне)


9 - bilet (Опишите на Verilog HDL 16-разрядный счетчик с асинхронным сбросом и синхронной загрузкой начального значения. Проиллюстрируйте его работу с помощью временных диаграмм.)

module 16_counter(
input clk,
input rst,
input load,
input en,
input [15:0] data,
output reg[15:0] count
);

initial count = 16'bA;

always @(posedge clk or posedge rst)
begin
if (rst) begin
count = 16'b0;
end
else if (load) begin
count = data;
end
else if (en) begin
count = count + 1;
end
else begin
count = count;
end
end
endmodule
(Времянка схожа со 2 билетом В ПОДГОНЕ)


10 - bilet (Опишите на Verilog HDL 32-разрядный счетчик с синхронным сбросом и асинхронной загрузкой начального значения. Проиллюстрируйте его работу с помощью временных диаграмм.)

module 32_counter(
input clk,
input rst,
input load,
input en,
input [31:0] data,
output reg[31:0] count
);

initial count = 32'bA;

always @(posedge clk or posedge load)
begin
if (load) begin
count = data;
end
else if (rst) begin
count = 32'b0;
end
else if (en) begin
count = count + 1;
end
else begin
count = count;
end
end
endmodule
(Времянка схожа с 2 билетом в ПОДГОНЕ)


11 - bilet (Опишите на Verilog HDL счетчик до 500 с асинхронным сбросом и синхронной загрузкой начального значения. Проиллюстрируйте его работу с помощью временных диаграмм.)

module until_500_counter(
input clk,
input rst,
input load,
input en,
input [8:0] data,
output reg[8:0] count
);

initial count <= 9'b0;

always @(posedge clk or posedge rst)
begin
if (rst) begin
count <= 9'b0;
end
else if (load) begin
count <= data;
end
else if (en) begin
count <= count + 1;
end
if (count >= 9'd501) begin
count <= 9'b0;
end
else begin
count <= count;
end
endmodule


12 - bilet (Опишите на Verilog HDL 8-разрядный сумматор с накоплением и синхронным сбросом. Проиллюстрируйте его работус помощью временных диаграмм)

module 8_sum_nakopl(
input clk,
input rst,
input [7:0] a,
input [7:0] b,
output [7:0] sum,
output reg[7:0] sum_nakop
);

always @*
begin
if(rst) begin
sum = 8'b0;
end
else begin
{sum_nakop, sum} = a + b + clk;
end
end
endmodule


13 - bilet (Опишите на Verilog HDL 8-разрядный буфер с третьим состоянием, расскажите о
его назначении. Проиллюстрируйте его работу с помощью временных диаграмм.)
module buffer(
input [7:0] in,
input en,
output [7:0] out
);

assign out = enable ? in : 8'bz;
endmodule
(Времянка в ПОДГОНЕ 20 БИЛЕТ)

14 - bilet (Опишите на Verilog HDL 8-разрядный сдвиговый регистр при помощи процедурного присваивания и оператора объединения, реализовав возможность выбора направления сдвига. Проиллюстрируйте его работу с помощью временных диаграмм.)

module 8_shift_reg_naprsdviga(
input clk,
input rst,
input shift_direction,
input data,
output reg [7:0] shift_reg
);

initial shift_reg <= 8'b00110011;

always @(posedge clk or posedge rst)
begin
if (rst) begin
shift_reg <= 8'b0;
end
else if (shift_direction) begin
shift_reg <= {data, shift_reg[6:0]}; // сдвиг вправо
end
else begin
shift_reg <= {shift_reg[6:0], data}; // сдвиг влево
end
end
endmodule
(Времянка в ПОДГОНЕ)


15 - bilet (Опишите на Verilog HDL 8-разрядный сдвиговый регистр с синхронным сбросом и асинхронной параллельной загрузкой при помощи процедурного присваивания и оператора объединения. Проиллюстрируйте его работу с помощью временных диаграмм.)

module 8_shift_reg_parallel (
input clk,
input reset,
input parallel_load,
input [7:0] data_in,
output reg [7:0] shift_reg
);

initial shift_reg <= 8'b01001100

always @(posedge clk or posedge parallel_load)
begin
if (parallel_load) begin
shift_reg <= data;
end
else if (rst) begin
shift_reg <= 8'b01001100;
end
else begin
shift_reg <= {shift_reg[6:0], shift_reg[7]}; // сдвигаем данные влево
end
end
endmodule
(ВРЕМЯНКИ НЕТ)


16 - bilet (Опишите на Verilog HDL 8-разрядный реверсивный счётчик с синхронным сбросом и асинхронной параллельной загрузкой при помощи процедурного присваивания. Проиллюстрируйте его работу с помощью временных диаграмм.)

module 8_rev_counter(
input clk,
input rst,
input en,
input load,
input [7:0] data,
output reg [7:0] count
);

initial count = 8'b11111111;

always @(posedge clk or posedge load)
begin
if (load) begin
count <= data;
end
else if (rst) begin
count <= 8'b11111111;
end
else if (en) begin
count <= count - 1;
end
else begin
count <= count;
end

end
endmodule
(Времянка В ПОДГОНЕ)


17 - bilet (Опишите на Verilog HDL модуль, вычисляющий бит четности 32-разрядного слова при помощи оператора свертки. Проиллюстрируйте его работу с помощью временных диаграмм. Модуль должен иметь полностью синхронную структуру. Ввод числапроизводится по сигналу WR. Сброс асинхронный. Проиллюстрируйте его работу с помощью временных диаграмм.)

module ParityCalculator (
input clk,
input rst,
input wr,
input [31:0] data,
output bit
);

initial reg [31:0] data_reg; // Регистр для хранения входных данных

always @(posedge clk or posedge rst)
begin
if (rst) begin
data_reg <= 32'b0; // Сброс регистра данных
end
else if (wr) begin
data_reg <= data; // Запись входных данных в регистр
end
end

assign bit = ~^data_reg; // Выходной бит четности - младший бит результата XOR
endmodule
(Времянки НЕТ)


18 - bilet (Опишите на Verilog HDL 8-разрядный сдвиговый регистр при помощи процедурного присваивания и оператора объединения. Проиллюстрируйте его работу с помощью временных диаграмм)


module 8_shift_reg(
input clk,
input reset,
input load,
initial en,
input [7:0] data,
output reg [7:0] shift_reg
);

initial shift_reg <= 8'b01001100

always @(posedge clk)
begin
if (load) begin
shift_reg <= data;
end
else if (rst) begin
shift_reg <= 8'b01001100;
end
else if (en) begin
shift_reg <= {shift_reg[6:0], shift_reg[7]}; // сдвигаем данные влево
else begin
shift_reg <= {shift_reg[0], shift_reg[7:1]} // сдвигаем данные вправо
end
end
endmodule

(Времянки НЕТ)

19 - bilet (Объясните отличия с точки зрения синтезируемой аппаратуры условной конструкции if и конструкции ветвления case. Приведите пример, нарисуйте схемы элементов, синтезируемых в том и другом случае.)

СМОТРИ 22 БИЛЕТ В ПОДГОНЕ, ТАМ ФОТКИ

20 - bilet (Опишите на Verilog HDL 8-разрядный буфер с третьим состоянием, проиллюстрируйте его работу с помощью временных диаграмм.)

module buffer(
input [7:0] in,
input en,
output [7:0] out
);

assign out = enable ? in : 8'bz;
endmodule
(Времянка в ПОДГОНЕ)


21 - bilet (Опишите на Verilog HDL модуль, вычисляющий бит четности 32-разрядного слова при помощи оператора свертки. Проиллюстрируйте его работу с помощью временных диаграмм. Модуль должен иметь полностью синхронную структуру. Ввод числа производится по сигналу WR. Сброс асинхронный. Проиллюстрируйте его работу с помощью временных диаграмм.)

module ParityCalculator (
input clk,
input rst,
input wr,
input [31:0] data,
output bit
);

reg [31:0] data_reg; // Регистр для хранения входных данных
wire [31:0] xor_result; // Результат операции XOR

always @(posedge clk or posedge rst)
begin
if (rst) begin
data_reg <= 32'b0; // Сброс регистра данных
end
else if (wr) begin
data_reg <= data; // Запись входных данных в регистр
end
end

assign xor_result = ^data_reg; // Оператор свертки для вычисления XOR всех бит
assign bit = xor_result[0]; // Выходной бит четности - младший бит результата XOR
endmodule
(Времянки НЕТ)


22 - bilet (Объясните отличия с точки зрения синтезируемой аппаратуры условной конструкции if и конструкции ветвления case. Приведите пример, нарисуйте схемы элементов, синтезируемых в том и другом случае.)

СМОТРИ ПОДГОН, ТАМ ФОТКИ

23 - bilet (Опишите на Verilog HDL 8-разрядный сдвиговый регистр с асинхронным сбросом и синхронной параллельной загрузкой при помощи процедурного присваивания и оператора объединения. Направление сдвига определяется сигналом dir. Проиллюстрируйте работу регистра при помощи временных диаграмм)

module 8_shift_reg(
input clk,
input reset,
input parallel_load,
initial dir,
input [7:0] data,
output reg [7:0] shift_reg
);

initial shift_reg <= 8'b01001100

always @(posedge clk or posedge rst)
begin
if (rst) begin
shift_reg <= 8'b01001100;
end
else if (parallel_load) begin
shift_reg <= data;
end
else if (dir) begin
shift_reg <= {shift_reg[6:0], shift_reg[7]}; // сдвигаем данные влево
else begin
shift_reg <= {shift_reg[7], shift_reg[6:0]} // сдвигаем данные вправо
end
end
endmodule
(Времянки НЕТ)


24 - bilet (Опишите на Verilog HDL счётчик до 60 с асинхронным сбросом и синхронной загрузкой начального значения. Проиллюстрируйте его работу с помощью временных диаграмм.)

module until_60_counter(
input clk,
input rst,
input load,
input en,
input [8:0] data,
output reg[8:0] count
);

initial count <= 9'b0;

always @(posedge clk or posedge rst)
begin
if (rst) begin
count <= 9'b0;
end
else if (load) begin
count <= data;
end
else if (en) begin
count <= count + 1;
end
if (count >= 9'd61) begin
count <= 9'b0;
end
else begin
count <= count;
end
endmodule
(Времянка аналогична 11 БИЛЕТУ)