O`rnatilgan tizimlarni dasturi ta`minotini ishlab chiqish


Download 36.96 Kb.
Sana04.12.2020
Hajmi36.96 Kb.
#159162
Bog'liq
1-Verilog


“O`rnatilgan tizimlarni dasturi ta`minotini ishlab chiqish” fani



LABORATORIYA ISHI

VerilogHDL tili imkoniyatlarini o`rganish
Verilog – mantiqiy sxemalarni tavsiflovchi til hisoblanadi. Verilog tilida ishlatiladigan signal manbalarining asosiy turlari bilan tanishishdan boshlaymiz.

Signal - sxemaning mantiqiy elementlari orasida o`tkazgichlar (wires) bo`ylab uzatilayotgan elektr impulslari hisoblanadi.

O`tkazgichlar axborotni uzatish uchun qo`llanilib, axborotning ustida hech qanday hisoblashlarni amalga oshirmaydi. Signallar raqamli sxemada ikkilik ma`lumotlarni uzatish uchun muhim hisoblanadi.

Verilog tilida signal manbasining asosiy turlaridan biri – bu o`tkazgich (wire) hisoblanadi. Shunday qilib, agar sizda arifmetik yoki mantiqiy ifoda bo`lsa, ifodaning natijasini muayyan o`tkazgich orqali ifodalashingiz va uni boshqa ifodalar uchun ham ishlatishingiz mumkin. Buni o`zgaruvchilarga o`xshatish mumkin, ammo sxemadagi o`tkazgichlarni to`g`ridan-to`g`ri bog`lash mumkin emas.

O`tkazgichning (wire) qiymati – unga bog`langan funksiya hisoblanadi.

Verilog tilida yozilgan dasturda bir bitli o`tkazgichning tavsifi:



wire a;

Siz unga boshqa signalni tayinlashingiz mumkin, masalan, b signalni:



wire b;

assign a = b;

Yoki bitta ifoda orqali ham signalni aniqlab, ham uni tayinlash mumkin:



wire a = b;

Bir necha bitlarni uzatuvchi o`tkazgichlar :



wire [3:0] c; //4 ta o`tkazgich

Bir necha bit axborotni uzatuvchi o`tkazgichlar “shina”, ba`zida “vektor” deb nomlanadi. Ular ham quyidagicha tayinlanadi:



wire [3:0] d;

assign c = d; //“ulanish” bir shinaning boshqasiga ulanishi

Shinadagi o`tkazgichlar soni kvadrat qavslar ichiga olingan ikki nuqta bilan ajratilgan ixtiyoriy 2 ta butun son bilan aniqlanadi:



wire [11:4] e; //sakkiz bitli shina

wire [0:255] f; //256 - bitli shina

Shinada ba`zi kerakli bitlarni tanlab olib, boshqa o`tkazgichga tayinlashi mumkin:



wire g;

assign g = f[2]; // “g” signalga “f” shinaning ikkinchi bitini tayinlash

Bundan tashqari, shinadan tanlanayotgan bitni o`zgaruvchi sifatida tavsiflash mumkin:

wire [7:0] h;

wire i = f[h]; // “f” shinasidan h nomerli bitga I signalni tayinlaymiz.

Signalli shinadan bitlar to`plamini tanlab, shu miqdordagi bitga ega boshqa shinaga tayinlash:

wire [3:0] j = e[7:4];

Signalli shinanalar uchun massivlarni aniqlash mumkin:

wire [7:0] k [0:19]; // 8 bitli shinadan iborat 20 tali massiv
Signal manbasining yana bir turi reg. Verilog tilida reg ўзгарувчини билдириб, ўзида қиймат сақлайди. Агар регистрга доимо мантиқий функция қиймати ўзлаштирилса, у ўзини ўтказгичдек(wire) тутади.

Registrlar ham o`tkazgich kabi tavsiflanadi:

reg [3:0] m;

reg [0:100] n;

Registrlar ham o`tkazgich kabi – ifodaning o`ng tomonida operandlar singari:

wire [1:0] p = m[2:1];

Odatda “xotira” deb nomlanuvchi registrlar massivi quyidagicha aniqlanadi:

reg [7:0] q [0:15]; //har biri 8 bitdan iborat 16 ta so`zdan iborat xotira


Signal manbasining yana bir turi - integer. U registrga(reg) o`xshaydi, lekin 32 bitli belgili ma`lumot turi hisoblanadi. Masalan, e`lon qilamiz:

integer loop_count;


Verilog mantiqni bloklarga guruhlash imkonini beradi. Har bir blok “modul”

(module) deb nomlanadi. Modullar wire signallari kabi kirish va chiqishga ega. Modulni tavsiflashda avval uning portlari (kirish va chiqish) e`lon qilinadi:

module my_module_name (port_a, port_b, w, y, z);

So`ng signallarning yo`nalishi tavsiflanadi:

input port_a;

output [6:0] port_b;

input [0:4] w;

inout y; // ikkitomonlama signal, odatda mikrosxemaning tashqi kontaktlari uchun ishlatiladi.

Modulning chiqishi wire o`tkazgichidek emas, balki reg registr kabi e`lon qilinishi mumkin:

output [3:0] z;

reg [3:0] z;
Yanada oson bo`lishi uchun modulni tavsiflashda signallarning turi va yo`nalishini ko`rsatish mumkin:

module my_module

(

input wire



port_a,

output wire [6:0]port_b,

input wire [0:4]w,

inout wire y,

output reg [3:0]z

);
Wire o`tkazgichi kabi kirish signallarini ishlatish mumkin:

wire r = w[1];
Kirish signallarini e`lon qilganimizdek, chiqishlarga ham doimiy tayinlashni amalga oshirish mumkin:

assign port_b = h[6:0];

Har bir modulning tavsiflashini tugatganimizda endmodule so`zini yozamiz.

module my_module_name (input wire a, input wire b, output wire c);

assign c = a & b;

endmodule


Signal manbalarining oxirgi turi – doimiy signallar yoki sonlar:
wire [12:0] s = 12; /* 32-bitli o`nlik sonni, 13 bitgacha “qirqish” */

wire [12:0] z = 13’d12; //13-bitli o`nlik son

wire [3:0] t = 4'b0101; //4-bitli ikkilik son

wire [7:0] q = 8'hA5; // 8-bitli o`n oltilik son A5

wire [63:0] u = 64'hdeadbeefcafebabe; /*64-bitli o`n oltilik son */

Agar sonning qiymati aniqlanmasa, u 32-xonali deb qabul qilinadi.


Sonlar arifmetik va mantiqiy ifodalarda ishlailishi mumkin.

Masalan, “aa” vektorga 1 ni qo`shish mumkin:

wire [3:0] aa;

wire [3:0] bb;



assign bb = aa + 1;

Verilog tilida qo`shish ifodasi pirovardida chip ichidagi summator qurilmasiga aylanishi tushunarli albatta.
Download 36.96 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling