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

Приложение в (справочное) ahdl-описание цву

include "mux_2.inc";

include "reg.inc";

include "w.inc";

include "ctr.inc";

include "co.inc";

include "alu.inc";

include "ram.inc";

include "rom.inc";

INCLUDE "hex_to_ASCII.inc";

INCLUDE "lcd_controller.inc";

include "debounce.inc";

include "DC.inc";

include "mux4_1.inc";

Subdesign cpu

(

clk :input;

rw :output;

rs :output;

e :output;

data_ind[7..4] :bidir;

ctrl_bt :input;

%

--mux1[7..0]: output;

--rg[7..0]: output;

--ak[7..0] :output;

--mux2[7..0]:output;

y[4..0]:output;

ctrout[7..0] :output;

--res[7..0]:output;

COP[3..0] : output;

dram[15..0] : output;

drom[7..0] :output;

flags[1..0]:output;

GPR[15..0]:output;

B[15..0],C[15..0],

D[15..0],F[15..0]:output;

res[15..0]:output;

%

)

VARIABLE

mux2[15..0],dram[15..0],drom[7..0]:node;

res[15..0],ak[15..0]:node;

cout,z : NODE;

Flags[1..0]: node;

y[4..0]:node;

ctrout[7..0]:node;

cop[3..0]: node;

divf[9..0]:DFF;

f40kHz: node;

bt_clk : node;

res_cnt[3..0]:DFFE;

refresh,res_b,

str1[127..0],str2[127..0]:NODE;

DCR[3..0],B[15..0],C[15..0],

D[15..0],F[15..0]:node;

GPR[15..0]:node;

Begin

mux2[15..0]=mux_2(.A[]=dram[], .B[]=GPR[],.sel=cop[0])with (width=16);

(z,cout,ak[15..0])=alu(.w[]=res[], .data[]=mux2[], .c=flags[1], .cop[]=cop[2..1]);

res[15..0]=w(.d[]=ak[],.ld=y[1], .c=!clk)with (width=16);

flags[]=reg(.D[]=(z, cout), .ld=(y1&(cop[2]#cop[1])) or (cop[3..1]==b"001") , .c=!clk) with (width=2);

ctrout[]=ctr(.c=clk, .en=y[0], .ld=(y[2]&(flags[1])),.res=(cop[3]&cop[2]&cop[1]&cop[0]),

.d[]=DROM[])with (width=8);

----ром

(cop[3..0],drom[7..0])=rom(.address[7..0]=ctrout[],.clock=!clk);

---рам

dram[15..0]= ram(.data[]=res[],.wren=y[3],.address[5..0]=drom[5..0], .clock=clk);

-- co

y[4..0] = co(.c=!clk,.rst=(cop[3]&cop[2]&cop[1]&cop[0]), .en=bt_clk, .cop[3..1]=cop[3..1]);

divf[].clk = clk;

if divf[].q==1023 then f40kHz = vcc;

end if;

divf[].d = divf[].q + 1;

bt_clk=debounce(clk,ctrl_bt,f40kHz) & f40kHz;

res_cnt[].(clk,ena) = (clk,vcc);

if res_cnt[].q==x"F"

then

res_cnt[].d = res_cnt[].q;

res_b = VCC;

else

res_cnt[].d = res_cnt[].q + 1;

end if;

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);

--- контроллер жки

(data_ind[7..4],rs,e,rw)=lcd_controller

(.clk=clk,.reset_b=res_b,.string1[]=str1[],.string2[]=str2[],.refresh=bt_clk);

%Данные для вывода на ЖКИ%

str1[7..0] =HEX_To_ASCII(DRAM[3..0]);

str1[15..8] =HEX_To_ASCII(DRAM[7..4]);

str1[23..16]=HEX_To_ASCII(DRAM[11..8]);

str1[31..24]=HEX_To_ASCII(DRAM[15..12]);

str1[39..32]=x"20";

str1[47..40]=x"20";

str1[55..48]=HEX_To_ASCII(DROM[3..0]);

str1[63..56]=HEX_To_ASCII(DROM[7..4]);

str1[71..64]=x"20";

str1[79..72]=HEX_To_ASCII(cop[3..0]);

str1[111..80]=x"20202020";

str1[119..112]=HEX_To_ASCII(ctrout[3..0]);

str1[127..120]=HEX_To_ASCII(b"0",ctrout[6..4]);

if Flags[1] then str2 [7..0]=x"5A";else str2[7..0]=x"20";end if;

if Flags[0] then str2[15..8]=x"4F";else str2[15..8]=x"20";end if;

str2[23..16]=x"20";

str2[31..24]=HEX_To_ASCII(res[3..0]);

str2[39..32]=HEX_To_ASCII(res[7..4]);

str2[47..40]=HEX_To_ASCII(res[11..8]);

str2[55..48]=HEX_To_ASCII(res[15..12]);

str2[63..56]=x"20";

str2[71..64]=HEX_To_ASCII(gpr[3..0]);

str2[79..72]=HEX_To_ASCII(b"00",gpr[5..4]);

str2[127..80]=x"202020202020";

end;