logo
Отчёт_Курсач

2 Алгоритм алу

АЛУ - блок который служит для выполнения арифметических и логических преобразований над словами, называемыми в этом случае операндами.

Введем обозначения. Пусть:

- Data [15..0] – входное слово A;

- W [15..0] – входное слово B;

- СOP[1..0] – управляющая команда;

- OVF – признак переполнения разрядной сетки;

- ZF – признак получения нулевого результата;

- RES [15..0] – выходное слово.

Примем, что старшим байтом является байт с наибольшим индексом. С выхода ПЗУ на вход АЛУ подается управляющее слово COP[1..0], которое определяет код операции. О перации реализуемые в АЛУ представлены в таблице 2.

Таблица 2.

СОР[1..0]

Операция

Действия АЛУ

00

Mov

RES[]=DATA[]

ZF=(RES[]==0)

01

CMP

(OVF,RES[])=(b”1”,DATA[]) – (b”0”,W[])

ZF=(RES[]==0)

10

SBB

(OVF,RES[])=(b”1”,DATA[])-(b”0,W[])-(x”0000”,OVF)

ZF=(RES[]==0)

11

SWAP

RES[]=(DATA[7..0],DATA[15..8])

ZF=(RES[]==0)

AHDL описание модуля АЛУ:

Subdesign alu

(

w[15..0]:input;

data[15..0]:input;

c,cop[1..0]:input;

zr,cr,res[15..0]:output;

)

begin

case cop[1..0] is

when 0 => res[]=data[];

when 1=>

(cr,res[])=(b"1",data[])-(b"0",w[]);

when 2 =>

(cr,res[])=(b"1",data[])-(b"0",w[])-(x"0000",c);

when 3 =>

res[]=(data[7..0],data[15..8]);

end case;

zr=(res[]==0);

end;