FPGA:0007 -tekstinė atmintis

Iš eilės einantys skaičiai nelabai įdomūs. Todėl prie mūsų “video kontrolerio” reikia pritaikyti atmintį. Kad į tą atmintį rašyti informaciją, o displėjus rodytu kas ir kaip čia gaunasi.
Maždaug taip:
grafika yiff
Čia dar galima pastebėti, kad aš padidinau šrifta du kartus tiek į plotį, tiek į aukštį. Paprasčiausiai labai jau mažos raidelės buvo ant ekrano, o ir video atmintis labai didelė gautusi.
Ką gi mes keitėmė. Nebenaudingą modulį “skaičiuoklis” modifikuojam tik tiek, kad jis nebenaudotų antros koordinatės. Dabar modulis pasiima tik duomenys kuriuos norime rodyti (sinchronizuotus su x ir y koordinatėm) ir eilutės numerį kurį norim rodyti. Va taip:


module skaiciuoklis(input [7:0]x, input [2:0]mini_y, output [6:0]qq);
wire [10:0]tmp_x;

assign tmp_x[2:0]=0; //tik del tvarkos.
assign tmp_x[10:3]=x;
assign qq=tmp_x+mini_y;

endmodule

Čia nieko naujo. Tik parašiau, kad skaitytojui būtų lengviau kopijuoti eksperimentą. Dar reikia susikonstruoti modulį kuris pagal esamas x ir y koordinates pasiskaičiuotu video adminties adresą. Mūsų fontas tai 8×8 pikseliai, padvigubintas- 16×16 pikselių. Naujas loginis elementas paprastas:


module adresatorius(input [10:0]x, input [9:0]y, output [11:0]adre);

assign adre=x[10:4]+(y[9:4]*11′h40);
endmodule

Čia mums naujas reiškinys- specifinis verilog konstantų rašymas. Seniau aš šią informacija ignoravau, dabar biški paaiškinsiu. Rašant konstantą kaip skaičių “16” gaudavosi biški neapibrėžtumas. Nes nežinomas skaičiaus ilgis- kiek “laidų” rezervuoti. Todėl softas imdavo kažkokį defaultinį skaičių- ar tai 32 bitai ar panašiai. O poto, kompiliavimo metu iššokdavo wariningai- tipo “value truncated” ir panašiai.
Rašant kultūringai reikia parašyti ir skaičiaus plotį. Tai daroma taip:
xxx = plotis’skaičius.
Prieš apostrofą skaičiaus plotis, poto skaičius, jei reikia su bazės tipu. b- binary, h-hex ir t.t.
xxx = 8’h55;
xxx = 8’b00001110;
xxx = 16’d564;
Dar vienas navarotas- binarinėje matematikoje yra 0 ir 1. O štai verilog ir elektronikoje yra reikšmė “oras”. T.y. Z būklė. Todėl užrašas:
xxx = 4’b001Z;
Reiškia, kad du vyriausi bitai (laidai) tikrai nuliai, toliau vienas, o pas mažiausias tai biški nepajungtas ir kabo ore. Ir jei ten kas paduos kokį nors signalą nebus trumpo.
O kad visiškai nupušti, dar galima reikšmė “X”. Tai reiškia “nežinoma reikšmė”. Praktiškai tokios nenaudojau ir nežinau kam ji skirta.

Dabar dar reikia susikurti video atminties modulį kurį galima modifikuoti per JTAG jungtį. Manau jums tai gausis asmeniškai, nes RAM nuo ROM kaip ir nesiskiria. Viską reikia sujungti į tokį mechanizmą:
Schema pilna
(paveiksliukas išsidina)

GND elementas iš standartinės bibliotekos. Prašom atkreipti kuriuos laidus naudoju sujungimams, kad gautusi padidintas šriftas. Dabar galima pasileisti “in system memory editor”, ji išsididinti (jei leidžia monitorius) į tokio dydžio kad atitiktu mūsų ekraną ir rašyti reikšmes į atmintį.
memory editor JTAG
Rašant reikšmes turi keistis informacija ant monitoriaus. Beja, jei mūsų “video plokštė” apsiribos tik skaičių rodymu, galima sumažinti atminties naudojimą- kad ir tik 4 bitus vienai ženklo vietai. Dabar 8 bitai- 256 simboliai.

Leave a Reply

Your email address will not be published. Required fields are marked *