logic reset_s; logic [1:0] code; logic [5:0] data; logic [4:0] cnt;
always_ff@(posedge C_ext, posedge reset_s) if (reset_s) begin
reset_s <= 0; code <= 0; data <= 0; cnt <= 0;
end else begin
reset_s <= R; code <= Z; data <= D;
cnt <= cnt + 1;
end
logic [4:0] result; always_ff@(code, data)
case(code)
0: result <= cnt; 1:
case(data[4:0]) 5'b11110: result <= 0; 5'b01001: result <= 1; 5'b10100: result <= 2; 5'b10101: result <= 3; 5'b01010: result <= 4; 5'b01011: result <= 5; 5'b01110: result <= 6; 5'b01111: result <= 7; 5'b10010: result <= 8; 5'b10011: result <= 9; 5'b10110: result <= 10; 5'b10111: result <= 11; 5'b11010: result <= 12; 5'b11011: result <= 13; 5'b11100: result <= 14; 5'b11101: result <= 15; default: result <= 16; endcase
2: result <= {(~data[5:3]) & data[2:0], 2'b0}; 11
3: result <= {data[5:3] + data[2:0] + 1, 1'b0}; endcase
logic read_s;
always_ff@(posedge C_int, posedge reset_s, posedge flag_reset) if (reset_s)
read_s <= 0; else if (flag_reset) read_s <= 0;
else if (Read) read_s <= 1;
always_ff@(negedge C_int, posedge reset_s, posedge flag_reset) if (reset_s)
C_out <= 1; else if (flag_reset)
C_out <= 1; else if (read_s)
C_out <= ~C_out;
logic [2:0] cnt_result;
always_ff@(posedge C_out, posedge reset_s, posedge flag_reset) begin
if (reset_s) cnt_result <= 0;
else if (flag_reset) cnt_result <= 0;
else
cnt_result <= cnt_result + 1; Q <= result[4 - cnt_result];
end
logic flag_reset; always_ff@(code, cnt_result)
case(code)
0: flag_reset <= cnt_result[2] & (~cnt_result[1]) &
cnt_result[0] & C_int;
1: flag_reset <= cnt_result[2] & (~cnt_result[1]) &
cnt_result[0] & C_int;
2: flag_reset <= (~cnt_result[2]) & cnt_result[1] &
cnt_result[0] & C_int;
3: flag_reset <= cnt_result[2] & (~cnt_result[1]) &
(~cnt_result[0]) & C_int;
endcase
endmodule
12
В module… () описаны входы и выходы схемы. Далее были введены требуемые сигналы.
1 процесс – перевод входных данных в операционный блок.
2 процесс – описание работы мультиплексора, с контролем кода операции.
3 процесс – запись данных по активному уровню сигнала read.
4 процесс – вывод ответов в соответствии с кодом операции.
На рисунке 1.5.1 представлена схема из RTL Viewer для кода,
написанном на SV.
Рисунок 1.5.1 – Схема из RTL Viewer
1.6 Моделирование кода
На рисунке 1.6.1 и 1.6.2 представлено моделирования в двух режимах.
В промежутке 430-3200нс промоделирована работа первого сигнала,
3400-6200нс промоделирована работа второго сигнала, 6400-8200нс промоделирована работа третьего сигнала, 8400-10200 моделирование работы четвёртого сигнала, 10400-13200нс промоделирована работа пятого сигнала,
13
13500-16200нс промоделирована работа шестого сигнала, 16300-19200нс промоделирована работа седьмого сигнала, 19400-20200 восьмого сигнала,
20400-22800 девятого сигнала.
Рисунок 1.6.1 – Моделирование в режиме Timing
Рисунок 1.6.2 – Моделирование в режиме Functional
Результаты моделирования совпадают со значениями плана моделирования, представленных в таблице 1.4.1.
14
ВЫВОДЫ
В ходе данной работы были освоены навыки совместного использования устройств средней степени интеграции.
Разработана обобщенная функциональная схема и описаны его основные части.
Были составлены таблицы истинности для операционного блока и план моделирования.
Была собрана на холсте .bdf и промоделирована в двух режимах (timing
иfunctional) схема вычислительного блока, выполняющего заданные операции
иосуществляющего приём входных данных и выдачу результата.
С помощью VHDL было описано то же устройство.
Результаты моделирования каждой схемы соответствует её таблице истинности.
15