clk : INPUT;
out : OUTPUT;
)
VARIABLE
div_out : NODE;
astart : NODE;
tr[width-1..0] : dffe;
BEGIN
tr[].(clk, ena) = (clk, astart);
astart = dff(VCC, !btn, div_out, );
IF tr[].q < end_state THEN
tr[].d = tr[].q + 1;
ELSE
tr[].d = 0;
END IF;
div_out = !dff((tr[].q == end_state),clk,,); --формированиеимпульсасбросатриггера
out = dff(dff(VCC, astart,!out,), clk, ,); --формированиеимпульса
END;
%
Модуль преобразования данных для представления на семисегментном индикаторе
Взят из раздаточного материала
%
% -a- %
% f| |b %
% -g- %
% e| |c %
% -d- %
% %
% 0 1 2 3 4 5 6 7 8 9 A b C d E F %
% %
SUBDESIGN 7segment
(
i[3..0] : INPUT;
a, b, c, d, e, f, g : OUTPUT;
)
BEGIN
TABLE
i[3..0] => a, b, c, d, e, f, g;
H"0" => 1, 1, 1, 1, 1, 1, 0;
H"1" => 0, 1, 1, 0, 0, 0, 0;
H"2" => 1, 1, 0, 1, 1, 0, 1;
H"3" => 1, 1, 1, 1, 0, 0, 1;
H"4" => 0, 1, 1, 0, 0, 1, 1;
H"5" => 1, 0, 1, 1, 0, 1, 1;
H"6" => 1, 0, 1, 1, 1, 1, 1;
H"7" => 1, 1, 1, 0, 0, 0, 0;
H"8" => 1, 1, 1, 1, 1, 1, 1;
H"9" => 1, 1, 1, 1, 0, 1, 1;
H"A" => 1, 1, 1, 0, 1, 1, 1;
H"B" => 0, 0, 1, 1, 1, 1, 1;
H"C" => 1, 0, 0, 1, 1, 1, 0;
H"D" => 0, 1, 1, 1, 1, 0, 1;
H"E" => 1, 0, 0, 1, 1, 1, 1;
H"F" => 1, 0, 0, 0, 1, 1, 1;
END TABLE;
END;
%
модуль mult_a1
Взят из раздаточного материала
%
INCLUDE "lpm_mult.inc";
PARAMETERS
( widthx = 8, --числоразрядовшины xn[]
widthc = 10, --число разрядов коэффициентов
widths = 18, --число разрядов шины sum[]
widthp = 18, --число разрядов шины result[]
bn = 100 --коэффициент bn числителя
);
SUBDESIGN mult_a1
( xn[widthx-1..0] : INPUT;
sum[widths-1..0] : INPUT;
result[widthp-1..0] : OUTPUT;
)
VARIABLE
mult_x : lpm_mult WITH (
LPM_WIDTHA = widthx,
LPM_WIDTHB = widthc,
LPM_WIDTHP = widthp,
LPM_WIDTHS = widths,
INPUT_B_IS_CONSTANT = "YES",
LPM_REPRESENTATION = "SIGNED",
USE_EAB = "OFF",
--LPM_PIPELINE = 1,
MAXIMIZE_SPEED = 6 );
BEGIN
mult_x.dataa[] = xn[];
mult_x.datab[] = bn;
mult_x.sum[] = sum[];
result[] = mult_x.result[];
END;
%
Модуль mult_b
Взят из раздаточного материала
%
INCLUDE "lpm_mult.inc";
PARAMETERS
(
widthx = 8, --число разрядов шины xn[]
widthy = 8, --число разрядов шины yn[]
widthc1 = 10, --число разрядов коэффициентов b
widthc2 = 10, --число разрядов коэффициентов а
widthp = 18, --число разрядов шины result[]
an = 100, --коэффициент -an знаменателя (отрицательный - hex)
bn = 100 --коэффициент bn числителя
);
CONSTANT widths= widthp;
SUBDESIGN mult_b
(
xn[widthx-1..0] : INPUT;
yn[widthy-1..0] : INPUT;
sum[widths-1..0] : INPUT;
clock : INPUT;
clken : INPUT = VCC;
aclr : INPUT = GND;
result[widthp-1..0] : OUTPUT;
)
VARIABLE
mult_x : lpm_mult WITH (
LPM_WIDTHA = widthx,
LPM_WIDTHB = widthc1,
LPM_WIDTHP = widthp,
LPM_WIDTHS = widths,
INPUT_B_IS_CONSTANT = "YES",
LPM_REPRESENTATION = "SIGNED",
USE_EAB = "OFF",
LPM_PIPELINE = 1,
MAXIMIZE_SPEED = 6
);
mult_y : lpm_mult WITH (
LPM_WIDTHA = widthy,
LPM_WIDTHB = widthc2,
LPM_WIDTHP = widthp,
LPM_WIDTHS = widths,
INPUT_B_IS_CONSTANT = "YES",
LPM_REPRESENTATION = "SIGNED",
USE_EAB = "OFF",
--LPM_PIPELINE = 1,
MAXIMIZE_SPEED = 6
);
BEGIN
mult_x.(clock, clken, aclr) = (clock, clken, aclr);
mult_x.dataa[] = xn[];
mult_x.datab[] = bn;
mult_x.sum[] = mult_y.result[];
result[] = mult_x.result[];
mult_y.dataa[] = yn[];
mult_y.datab[] = an;
mult_y.sum[] = sum[];
END;
%
Модуль mult_c
Взят из раздаточного материала
%
INCLUDE "lpm_mult.inc";
PARAMETERS
(
widthx = 8, --число разрядов шины xn[]
widthy = 8, --число разрядов шины yn[]
widthc1 = 10, --число разрядов коэффициентов b
widthc2 = 10, --число разрядов коэффициентов a
widthp = 18, --число разрядов шины result[]
an = 100, --коэффициент an знаменателя
bn = 100 --коэффициент bn числителя
);
CONSTANT widths= widthp;
SUBDESIGN mult_c
(
xn[widthx-1..0] : INPUT;
yn[widthy-1..0] : INPUT;
--sum[widths-1..0] : INPUT;
result[widthp-1..0] : OUTPUT;
clock : INPUT;
clken : INPUT = VCC;
aclr : INPUT = GND;
)
VARIABLE
mult_x : lpm_mult WITH (
LPM_WIDTHA = widthx,
LPM_WIDTHB = widthc1,
LPM_WIDTHP = widthp,
LPM_WIDTHS = widths,
INPUT_B_IS_CONSTANT = "YES",
LPM_REPRESENTATION = "SIGNED",
USE_EAB = "OFF",
LPM_PIPELINE = 1,
MAXIMIZE_SPEED = 6
);
mult_y : lpm_mult WITH (
LPM_WIDTHA = widthy,
LPM_WIDTHB = widthc2,
LPM_WIDTHP = widthp,
LPM_WIDTHS = widths,
INPUT_B_IS_CONSTANT = "YES",
LPM_REPRESENTATION = "SIGNED",
USE_EAB = "OFF",
--LPM_PIPELINE = 1,
MAXIMIZE_SPEED = 6
);
BEGIN
mult_x.(clock, clken, aclr) = (clock, clken, aclr);
mult_x.dataa[] = xn[];
mult_x.datab[] = bn;
mult_x.sum[] = mult_y.result[];
result[] = mult_x.result[];
mult_y.dataa[] = yn[];
mult_y.datab[] = an;
END;