Добавил:
Вуз:
Предмет:
Файл:
PLIS
.txt По умолчанию - Времянки у
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 БИЛЕТУ)
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 БИЛЕТУ)
Соседние файлы в предмете Программирование логических интегральных схем