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

lr6

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

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

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

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

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

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

___________________________________________________________________________

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

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

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

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

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

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

_____________________

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

2024

Программа 6.1

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

module biba_count_div_vi

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

(input wire clk, reset,

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, negedge reset)

begin

if(!reset)

cnt<=0;

else

begin

cnt<=cnt_next;

sync<=sync;

if(cnt==M-1)

begin

cnt<=0;

sync<=~sync;

end

end

end

endmodule

Testbench:

`timescale 1ns/100ps

module biba_count_div_vi_tb;

logic clk, reset;

logic sync=0;

logic [2:0] q;

biba_count_div_vi test (.clk(clk), .reset(reset), .sync(sync), .q(q));

initial begin

reset=1'b0;

clk=1'b0;

#10;

reset=1'b1;

clk=1'b1;

#10;

clk=1'b0;

repeat(16) begin

#10 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-разрядного реверсивного счётчика с возможностью асинхронного и синхронного сброса

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