:

:
:
:

:

..

2008 .

(?!) (). .

EPF10K20RC240-4 FLEX10K Altera MAX+plus II 10.2 BASELINE MATLAB 6.5.

FLEX10K - . , , (EAB, Embedded Array Block), , . , .

,

(?!) .

-:


-:

1) 1


2) 2


3) 2


=3 :

, , 2, (?!). , :

.4 Mult_a

.5 Mult_b .6 Mult_c

Altera FLEX10K20RC240-4. :

20000
1152
144
() 12288
189
6
144
24
24

1

. MAX+plus . . . ai 2m bi 2n. n m , ( ). m=n=6.

MATLAB :

-

- (fix);

- (round);

- (floor);

- (ceil);

, , . .

( : 0,6

: 29 )

( !!)

.10

.11

.12


.13

, .

:

(DEC)

(DEC)

(BIN)

b1 0.126464868216455 8 1000
b2 -0.211575649599258 -14 10010
b3 0.211575649599257 14 1110
b4 -0.126464868216455 -8 11000
a1 1.000000000000000 -64 1000000
a2 0.927241545063816 -59 1000101
a3 0.888040485768699 -57 1000111
a4 0.284717905073458 -18 1101110

2(??)

( ??)

:

g(t) h(t)
0 0,125 0.125
1 -0,334 -0,209
2 0,415 0,206
3 -0,244 -0,0401
4 -0,0488 -0,0882
5 0,148 0.0588
6 -0,0236 0,0354
7 -0,0957 -0,0595
8 0,0678 0,00865
9 0,0302 0,0354
10 -0,0607 -0,0235

3

- .

. 8- . .

, 8- . , . , ( , . 16-).

( ) . . .

:

1. btn .

2. reg_in reg_out

3. preobr_cod , ;

4. filter_gor

5. tffe-

6. l7segment h7segment (?!), .

.14

.

AHDL

FLEX10K :

( , ByteBlaster, BiteBlaster, JTAG, );

();

();

JTAG . JTAG MSEL0, MSEL1 .

JTAG (Joint Test Action Group) - (BST Boundary Scan Test). BST- . BST- . JTAG- : TDI, TDO, TMS, TCK, TRST. JTAG- . JTAG- . JTAG- MasterBlaster ByteBlasterMV.

1)TDI .( , . TCK.)

2)TDO .( , . TCK. - )

3)TMS ( BST)( () TAP. TCK. TMS TCK.)

4)TCK BST( BST. , TCK.)

5) TRST ()( ."0" BST- . TRST IEEE STD. 1149.1.)[2]

( ??)

AHDL :

1) (?):

, , , , .

2) (?):

( ? ! , ) , . , . .

3) -(?):

8- , , 16- . ( 16- ?? ?)

, 3 . .

4) (?)

5) (?!) (?) .

( .)

, () (, , ), . :

. AHDL ;

. AHDL ;

AHDL .

(, , )

,

( ??), :

- -115.8

- -8.63

:

: 2,8

, :

8.63-2.8=5.83 .

, MAX+PLUS II, MATLAB . .

Matlab 6.5

MAX+plus II

(DEC)

MAX+plus II

(HEX)

MAX+plus II

()

1 0,125 800 0320 0.125 20
2 -0,334 63398 F7A6 -0.334 A6
3 0,415 2658 0A62 0.4153 62
4 -0,244 63964 F9DC -0.246 DC
5 -0,0488 65219 FEC3 -0.0491 C3
6 0,148 994 03B0 0.1553 B0
7 -0,0236 65390 FF6E -0.024 6E
8 -0,0957 64919 FD97 -0.0965 97
9 0,0678 433 01B1 0.0676 B1
10 0,0302 191 00BF 0.0298 BF
11 -0,0607 65147 FE7B -0.0615 7B
12 0,00998 66 0042 0.01 42
13 0,0362 231 00E7 0.0361 E7
14 -0,0242 65373 FF5D -0.0254 5D
15 -0,0108 65461 FFB5 -0.011 B5

4

Matlab 6.5

MAX+plus II

(DEC)

MAX+plus II

(HEX)

MAX+plus II

()

1 0,125 800 0320 0.125 20
2 -0,209 64198 FAC6 -0.20906 C6
3 0,206 1320 0528 0.20625 28
4 -0,0401 65285 FF05 -0.0397 05
5 -0,0882 64968 FDC8 -00875 C8
6 0,0588 375 0177 0.05859 77
7 0,0354 230 00E6 0.0359 E6
8 -0,0595 65149 FE7D -0.0592 7D
9 0,00865 46 002E 0.0718 2E
10 0,0354 237 00ED 0.037 ED
11 -0,0235 65385 FF69 -0.02375 69
12 -0,0133 65451 FFAB -0.0135 AB
13 0,0226 146 0092 0.0228 92
14 -0,00278 65519 FFEF -0.00285 EF
15 -0,0141 65445 FFA5 -0.01425 A5

5

(??), ) 6400( 26 =64 100).

( ?)

, . 60% 694 . . . (??)

( ?)

.. : . -(??) 2000 .

Altera . .. . - (??) 2003 .

.. ALTERA: , . ., -XXI, 2007 (2002).

.. Altera AHDL. : . ., , 2001 .

%

:

" "

: " "

: 5110

..

: ..

%

include "filter.inc";

include "button.inc";

include "ppreg.inc";

include "pk_dk.inc";

include "7segment.inc";

constant razx = 8;-- ?

constant razy = 16;-- ?

constant razb = 4;

constant raza = 8;

subdesign final

(

data[razx-1..0],clk,knopka : input;

reset : input = gnd;

out[razy-1..0] : output;

synhr,h : output;

la,lb,lc,ld,le,lf,lg : output;

ha,hb,hc,hd,he,hf,hg : output;

)

variable

preobr_cod : pk_dk with (width = razx);

h7seg,l7seg : 7segment;

reg_in : ppreg with (width = razx);

reg_out : ppreg with (width = razy);

btn : button with ( delay = 1, clock = 3175); --8000 25175

filtr_gor : filter with

(

wx = 8, -- xn

wy = 16, -- yn ??

wc1 = 5, -- b

wc2 = 7, -- a

rs = 6, -- b

ws = 23, -- sum

wp = 23, -- result

b1 = 8, -- b1

b2 = B"10010", -- b2

b3 = 14, -- b3

b4 = B"11000", -- b4

a2 = B"1000101", -- a2

a3 = B"1000111", -- a3

a4 = B"1101110", -- a4

wm = 6 ?

);-- !!

ce : node;

begin

reg_in.(clk,reset)=(clk,!reset);

reg_out.(clk,reset)=(clk,!reset);

btn.clk = clk;

filtr_gor.(clk,reset)=(clk,!reset);

preobr_cod.in[] = data[];

reg_in.data[] = preobr_cod.out[];

filtr_gor.vxod[]=reg_in.out[];

reg_out.data[]=filtr_gor.vixod[];

out[]=reg_out.out[];

l7seg.i[]=out[3..0];

h7seg.i[]=out[7..4];

(la,lb,lc,ld,le,lf,lg) = l7seg.(a,b,c,d,e,f,g);

(ha,hb,hc,hd,he,hf,hg) = h7seg.(a,b,c,d,e,f,g);

btn.btn = knopka;

ce = btn.out;

filtr_gor.ce = ce;

reg_in.ce = ce;

reg_out.ce = ce;

synhr = ce;

h = tffe(VCC,clk, , ,ce);

end;

%

.. 5110

..

%

include "mult_a1.inc";

include "mult_b.inc";

include "mult_c.inc";

PARAMETERS

(

wx = 8, -- xn

wy = 16, -- yn

wc1 = 5, -- b

wc2 = 7, -- a

rs = 6, -- b

ws = 23, -- sum

wp = 23, -- result

b1 = 8, -- b1

b2 = B"10010", -- b2

b3 = 14, -- b3

b4 = B"11000", -- b4

a2 = B"1000101", -- a2

a3 = B"1000111", -- a3

a4 = B"1101110", -- a4

wm = 6 --

);

subdesign filter

(

vxod[wx-1..0], clk : input;

ce : input=vcc;

reset : input=gnd;

vixod[wy-1..0] : output;

)

variable

sec_up : mult_a1 with (widthx = wx, widthc = wc1+rs, widths = ws, widthp = wp, bn= b1*(2^rs));

sec_mid1 : mult_b with (widthx = wx, widthy = wy, widthc1 = wc1+rs, widthc2=wc2, widthp = wp, an = a2, bn = b2*(2^rs));

sec_mid2 : mult_b with (widthx = wx, widthy = wy, widthc1 = wc1+rs, widthc2=wc2, widthp = wp, an = a3, bn = b3*(2^rs));

sec_down : mult_c with (widthx = wx, widthy = wy, widthc1 = wc1+rs, widthc2=wc2, widthp = wp, an = a4, bn = b4*(2^rs));

V[wy-1..0] : node;

begin

sec_mid1.(clock,clken,aclr) = (clk,ce,reset);

sec_mid2.(clock,clken,aclr) = (clk,ce,reset);

sec_down.(clock,clken,aclr) = (clk,ce,reset);

sec_up.xn[]=vxod[];

sec_mid1.xn[]=vxod[];

sec_mid2.xn[]=vxod[];

sec_down.xn[]=vxod[];

V[] = sec_up.result[wm+wy-1..wm];

sec_mid1.yn[]=V[];

sec_mid2.yn[]=V[];

sec_down.yn[]=V[];

sec_up.sum[]=sec_mid1.result[];

sec_mid1.sum[]=sec_mid2.result[];

sec_mid2.sum[]=sec_down.result[];

vixod[]=V[];

end;

%

.. 5110

..

%

parameters

(

width=8

);

subdesign pk_dk

(

in[width-1..0] : input;

out[width-1..0] : output;

)

variable

sign : node;

begin

sign = in[width-1] ;

if sign then out[] = (sign,!in[width-2..0])+1;

else out[] = in[];

end if;

end;

%

.. 5110

..

%

PARAMETERS

(

width=8

);

SUBDESIGN ppreg

(

data[width-1..0],clk : input;

ce : input = vcc;

reset : input = gnd;

out[width-1..0] : output;

)

variable

out[width-1..0] : dffe;

begin

out[].(clk,clrn,ena)=(clk,!reset,ce);

out[] = data[];

end;

%

.. 5110

..

%

PARAMETERS

(

delay = 1 --

, clock = 5175 --

);

CONSTANT modul = (delay*clock) DIV 1000;--

ASSERT (modul>2)

REPORT " delay*clock 2000"

SEVERITY ERROR;

CONSTANT width = LOG2(modul);

CONSTANT end_state = modul-1;

SUBDESIGN button

(

btn : INPUT;

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;