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

3 Разработка основных функциональных блоков и узлов

Для функциональных узлов и блоков, которые работают с многоразрядными словами, удобно использовать параметризированные описания. Условимся количество разрядов в таких словах обозначать параметром WIDTH.

Мультиплексор 21 является функциональным узлом комбинационного типа, который коммутирует два входных канала на один выход. В нашем случае каналы многоразрядные. Выбор входного канала определяется значением сигнала Cel. Ниже приведено параметризированное описание мультиплексора.

PARAMETERS (WIDTH=8);

SUBDESIGN mux_2

(

a[(width-1)..0],b[(width-1)..0], sel :INPUT;

y[(width-1)..0]:OUTPUT;

)

BEGIN

Y[]=A[]&!sel#b[]&sel;

END;

Для приема и хранения данных используются параллельные регистры, работу которых можно описать в форме таблицы режимов (таблица 2).

Таблица 3 – Режимы работы регистра

Режим работы

С

LD

Q+[Width-1..0]

Загрузка

1

D[Width-1..0]

Хранение

x

0

Q[Width-1..0]

Соответствующее параметризированное AHDL-описание модуля Reg

PARAMETERS (WIDTH=8);

SUBDESIGN reg

( d[(WIDTH-1)..0],ld,c : INPUT;

q[(WIDTH-1)..0] : OUTPUT;)

VARIABLE

q[(WIDTH-1)..0] : DFFE;

BEGIN

q[].clk = c;

q[].ena = ld;

q[] = d[];

END;

Для ЦВУ необходим программный счетчик с загрузкой параллельного кода (адрес команды). Режимы работы программного счетчика с загрузкой приведены в таблице 3.

Таблица 4 – Режимы работы счетчика

Режим работы

С

LD

CE

Q+[ Width-1..0]

Загрузка

1

x

D[Width-1..0]

Инкремент

0

1

Q[Width-1..1] + 1

Хранение

х

0

0

Q[Width-1..0]

Соответствующее параметризированное AHDL-описание модуля CTR

PARAMETERS(WIDTH=8)

subdesign CTR

(

c,en,ld,res,d[(width-1)..0]:input;

ctr[(width-1)..0]:output;

)

VARIABLE

ctr[(width-1)..0]:dffe;

begin

ctr[].(clk,ena,clrn)=(c,en#ld,!res);

if ld then

ctr[].d=d[(width-1)..0];

else ctr[].d=ctr[].q+1;

end if;

end;

Опишем ПЗУ - RОM

Параметризированное AHDL- описание модуля :

INCLUDE "altsyncram.inc";

SUBDESIGN rom

(

address[7..0] : INPUT;

clock : INPUT;

q[11..0] : OUTPUT;

)

VARIABLE

altsyncram_component : altsyncram WITH (

INTENDED_DEVICE_FAMILY = "Cyclone",

WIDTH_A = 12,

WIDTHAD_A = 8,

NUMWORDS_A = 256,

OPERATION_MODE = "ROM",

OUTDATA_REG_A = "CLOCK0",

ADDRESS_ACLR_A = "NONE",

OUTDATA_ACLR_A = "NONE",

WIDTH_BYTEENA_A = 1,

INIT_FILE = "rom.mif",

LPM_HINT = "ENABLE_RUNTIME_MOD=NO",

LPM_TYPE = "altsyncram"

);

BEGIN

q[11..0] = altsyncram_component.q_a[11..0];

altsyncram_component.clock0 = clock;

altsyncram_component.address_a[7..0] = address[7..0];

END;

Опишем ОЗУ - RAM

Параметризированное AHDL- описание модуля :

INCLUDE "altsyncram.inc";

SUBDESIGN RAM

(

address[7..0] : INPUT;

clock : INPUT;

data[7..0] : INPUT;

wren : INPUT;

q[7..0] : OUTPUT;

)

VARIABLE

altsyncram_component : altsyncram WITH (

INTENDED_DEVICE_FAMILY = "Cyclone",

WIDTH_A = 8,

WIDTHAD_A = 8,

NUMWORDS_A = 256,

OPERATION_MODE = "SINGLE_PORT",

OUTDATA_REG_A = "UNREGISTERED",

INDATA_ACLR_A = "NONE",

WRCONTROL_ACLR_A = "NONE",

ADDRESS_ACLR_A = "NONE",

OUTDATA_ACLR_A = "NONE",

WIDTH_BYTEENA_A = 1,

INIT_FILE = "Ram.mif",

LPM_HINT = "ENABLE_RUNTIME_MOD=NO",

LPM_TYPE = "altsyncram"

);

BEGIN

q[15..0] = altsyncram_component.q_a[15..0];

altsyncram_component.wren_a = wren;

altsyncram_component.clock0 = clock;

altsyncram_component.address_a[7..0] = address[7..0];

altsyncram_component.data_a[15..0] = data[15..0];

END;

Опишем РОН. Регистр общего назначения представляет 4 регистра. При записи в РОН, для выбора нужного регистра используется дешифратор. Данные на выход с РОНа определяются с помощью мультиплексора. Для указания адреса РОНа в команде используются младшие 2 бита.

AHDL описание РОНа:

DCR[]=DC(DROM[1..0],y[4]);

B[]=Reg(.D[]=res[],.LD=DCR[0],.C=clk) with (WIDTH=16);

C[]=Reg(.D[]=res[],.LD=DCR[1],.C=clk) with (WIDTH=16);

D[]=Reg(.D[]=res[],.LD=DCR[2],.C=clk) with (WIDTH=16);

F[]=Reg(.D[]=res[],.LD=DCR[3],.C=clk) with (WIDTH=16);

GPR[] = mux4_1(.A[]=B[],.B[]=C[],.C[]=D[],.D[]=F[],.sel[]=DROM[1..0]) with (WIDTH=16);

Где DC – дешифратор, mux4_1 – мультиплексор на 4 входа.