Добавил:
t.me Фулл всегда есть, ФОЭ ТОЭ ТЭЦ Электроника, КЭТ ИиКГ и тд https://t.me/whitedevil752 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lr5

.docx
Скачиваний:
13
Добавлен:
17.06.2024
Размер:
75.33 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Федеральное государственное бюджетное образовательное

учреждение высшего образования

«Санкт-Петербургский государственный университет телекоммуникаций

им. проф. М. А. Бонч-Бруевича»

___________________________________________________________________________

Кафедра программной инженерии и вычислительной техники.

Дисциплина «Микропроцессорные устройства»

Лабораторная работа № 5

«Исследование счётчиков»

Выполнили: ст. гр

Проверил: ст.пр. Неелова О.Л.

_____________________

Санкт-Петербург

2024

Программа 5.1

4-разрядный счётчик-делитель частоты

module biba_count_div

# (parameter N=3,M=3'd3 )

(input wire clk,

output reg sync=0,

output wire [N-1:0] q);

reg [N-1:0] cnt=0;

wire [N-1:0] cnt_next;

assign q=cnt;

assign cnt_next=cnt + 1;

always@(posedge clk)

begin

cnt<=cnt_next;

sync<=sync;

if(cnt==M-1)

begin

cnt<=0;

sync<=~sync;

end

end

endmodule

Testbench:

`timescale 1ns/100ps

module biba_count_div_tb;

logic clk;

logic sync=0;

logic [2:0] q;

biba_count_div test (.clk(clk), .sync(sync), .q(q));

initial

begin

clk=1'b0;

repeat(16) begin

#5 clk=~clk;

end

end

endmodule

Рис.1 Симуляция работы 4-разрядный счётчик-делитель частоты

Программа 5.2

4-разрядный реверсивный счётчик с возможностью асинхронного и синхронного сброса

module count

# (parameter N=4)

(input wire clk, reset, res, ena, rev, load,

input [N-1:0]d,

output wire [N-1:0]q);

reg [N-1:0] cnt;

reg [N-1:0] cnt_next;

assign q=cnt;

always @(posedge clk, negedge reset)

if(!reset)

cnt<=0;

else

cnt<=cnt_next;

always@*

if(res)

cnt_next=0;

else if(load)

cnt_next=d;

else if(ena&!rev)

cnt_next=cnt+1;

else if(ena&rev)

cnt_next=cnt-1;

else

cnt_next=cnt:

endmodule

Testbench:

`timescale 1ns/100ps

module biba_count_tb;

logic clk, reset, res, ena, rev, load;

logic [3:0] d;

logic [3:0] q;

biba_count test (.clk(clk), .reset(reset), .res(res), .ena(ena), .rev(rev), .load(load), .d(d), .q(q));

initial begin

clk=1'b0;

reset=1'b0;

#5;

clk=1'b1;

#5;

reset=1'b1;

clk=1'b0;

#5

clk=1'b1;

#5;

clk=1'b0;

repeat(16) begin

#5 clk=~clk;

end

end

initial begin

res=1'b0; ena=1'b0; rev=1'b0; load=1'b1; d=4'd5;

repeat(2)@(negedge clk);

load=1'b0; ena=1'b1;

repeat(6)@(negedge clk);

rev=1'b1;

repeat(2)@(negedge clk);

ena=1'b1;

rev=1'b1;

repeat(2)@(negedge clk);

rev=1'b1;

repeat(2)@(negedge clk);

$stop;

end

endmodule

Рис.2 Симуляция работы 4-разрядного реверсивного счётчика с возможностью асинхронного и синхронного сброса

Соседние файлы в предмете Микропроцессорные устройства