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

2 Семестр / Отчеты / 19 варик / ЛР 8_данные_удалены

.pdf
Скачиваний:
20
Добавлен:
07.06.2022
Размер:
702.6 Кб
Скачать

Рисунок 7 – Моделирование функционального блока в режиме Functional

1.5 КОД НА HDL

Ниже представлен код на System Verilog:

module lab8_code (

input logic RD, Reset, C_ext, C_int, input logic [1:0] C,

input logic D, output logic C_out,

output logic [4:0] outData );

logic CLN, RST, resetOut, start; logic [1:0] code;

logic [7:0] data; logic [4:0] count; logic [4:0] F; logic [2:0] OP1; logic [3:0] OP2; logic [4:0] result;

logic [2:0] AddrCode; reg[1:0] state;

assign CLN = RST | resetOut;

assign OP1[2] = ~(data[5] ^ data[2]); assign OP1[1] = ~(data[4] ^ data[1]); assign OP1[0] = ~(data[3] ^ data[0]); assign OP2 = data[5:3] + data[2:0];

always_ff@(posedge C_ext, posedge CLN) begin

if (CLN) begin

AddrCode <= 3'b000; RST <= 0;

end

else if (Reset) RST = 1'b1; else

begin

AddrCode <= AddrCode + 1; RST <= 0;

end

end

always_ff@(posedge C_ext, posedge RST) if (RST) data = 8'b00000000;

else data[7:0] = {data[6:0], D};

always_ff@(posedge RD, posedge RST) if (RST) count = 5'b00000;

else count = count + 1;

always_ff@(posedge C_int, posedge CLN) if(CLN) start = 1'b0;

else if(RD) start = 1'b1;

always_ff@(posedge C_int, posedge resetOut) if(resetOut)

begin

resetOut <= 1'b0; state <= 0; C_out <= 1'b0;

end else

case(state) 0: begin

if (start) begin C_out <= 1'b1; state <= 1; end

end

1: begin

C_out <= 1'b0; state <= 2; end

2: begin

resetOut <= 1'b1; state <= 3;

end

default: state <= 0; endcase

always_comb begin

case(AddrCode)

3'b000: code = data[7:6];

3'b001: code = {data[0], data[7]}; 3'b010: code = data[1:0];

3'b011: code = data[2:1]; 3'b100: code = data[3:2]; 3'b101: code = data[4:3]; 3'b110: code = data[5:4]; 3'b111: code = data[6:5]; endcase;

end

always_comb begin case(data[3:0]) 4'b0000: F = 5'b01010; 4'b0001: F = 5'b01011; 4'b0010: F = 5'b10010; 4'b0011: F = 5'b10011; 4'b0100: F = 5'b01110; 4'b0101: F = 5'b01111; 4'b0110: F = 5'b10110; 4'b0111: F = 5'b10111; 4'b1000: F = 5'b01001; 4'b1001: F = 5'b11001; 4'b1010: F = 5'b11010; 4'b1011: F = 5'b11011; 4'b1100: F = 5'b01101; 4'b1101: F = 5'b11101; 4'b1110: F = 5'b11110; 4'b1111: F = 5'b10101; endcase;

end

always_ff@(negedge C_out, posedge RST) begin if(RST) outData = 5'b00000;

else

begin case(code)

2'b00: outData = count; 2'b01: outData = F;

2'b10: outData = {2'b0, OP1[2:0]}; 2'b11: outData = {1'b0, OP2[3:0]}; endcase;

end

end

endmodule

На рисунке 8 изображено RTL Viewer представления устройства:

Рисунок 8 – RTL Viewer представление

На рисунке 9 представлено моделирование схемы, описанной с помощью HDL, в режиме Timing. В промежуток 0-720нс промоделирована работа первого сигнала, 760-1460нс – второго, 1480-2310нс – третьего, 23203160нс – четвертого, 3160-3990нс – пятого, 4040-4850нс – шестого, 49205240нс – седьмого, 5400-5480 нс – восьмого и 5560-6000нс – девятого.

Рисунок 9 – Моделирование в режиме Timing

На рисунке 10 представлено моделирование схемы в режиме Functional.

Рисунок 10 – Моделирование в режиме Functional

Заключение

В результате выполнения лабораторной работе были получены навыки совместного применения устройства средней степени интеграции.

Была разработана обобщенная функциональная схема устройства,

описана схема с помощью HDL, промоделирована схема в двух режимах.

Отчет был оформлен согласно ОС ТУСУР 01–2021.