module mealy (
input wire clk ,
input wire rst ,
input wire [ 1 : 0 ] x ,
output reg [ 2 : 0 ] y
) ;
localparam S0 = 0 , S1 = 1 , S2 = 2 ;
80
localparam X0 = 0 , X1 = 1 , X2 = 2 , X3 = 3 ;
localparam Y0 = 0 , Y1 = 1 , Y2 = 2 ,
Y3 = 3 , Y4 = 4 ;
reg [ 1 : 0 ] state;
reg [ 1 : 0 ] state_next ;
reg [ 2 : 0 ] y_next ;
// keyingi holatni shakllantirish mantig‘i
always @*
case ( state)
S0 : state_next = ( x == X0) ? S1 : S0 ;
S1 : state_next = ( x == X1) ? S2 : S1 ;
S2 : state_next = ( x == X2) ? S1 :
( x == X3) ? S0 : S2 ;
default : state_next = state;
endcase
// chiqish qiymatini yaratish mantig‘i
always @* begin
y_next = y ;
case ( state)
S0 : i f ( x == X0) y_next = Y1 ;
S1 : i f ( x == X1) y_next = Y2 ;
S2 : begin
i f ( x == X2) y_next = Y3 ;
i f ( x == X3) y_next = Y4 ;
end
default : y_next = y ;
endcase
end
// chiqish porti registr y
always @(posedge c l k )
81
i f ( rst ) begin
y <= Y0 ;
end el se begin
y <= y_next ;
end
// holat reestri
always @(posedge c l k )
i f ( rst ) begin
state<= S0 ;
end el se begin
state<= s tate_next ;
end
endmodule
Mili avtomatini mos Mur avtomatiga aylantirilish mumkin va aksincha. 6.5-
rasmda 6.4-rasmda ko‘rsatilgan Mili avtomatining funksionalligini amalga
oshiradigan Mur avtomatining o‘tish grafi ko‘rsatilgan. Olingan Mur avtomatining
o‘tish jadvali 6.3-jadvalda keltirilgan.
82
6.5. 6.4-rasmda ko‘rsatilgan Mili avtomatiga ekvivalent bo‘lgan Mur avtomatining
o‘tish grafi.
6.5-rasmdan ko‘rinib turibdiki, chiqishni aniqlashda noaniqliklarga yo‘l
qo‘ymaslik uchun
𝑆
0 va
𝑆
1 boshlang‘ich holatlari mos ravishda ikkiga bo‘lingan:
𝑆
0.1,
𝑆
0.2 va
𝑆
1.1,
𝑆
1.2. Endi mashinaning chiqish qiymati 6.3-jadvalda
ko‘rsatilganidek, uning holati bilan to‘liq aniqlanadi.
6.3-jadval - Mur avtomatining o‘tish jadvali, 2.4-rasmda ko‘rsatilgan Mili
avtomatiga ekvivalent.
S/rst,X
rst
𝑥
0
𝑥
1
𝑥
2
𝑥
3
𝑆
0.1
𝑆
0.1/
𝑦
0
𝑆
1.1/
𝑦
1
𝑆
0.1/
𝑦
0
𝑆
0.1/
𝑦
0
𝑆
0.1/
𝑦
0
𝑆
0.2
𝑆
0.1/
𝑦
0
𝑆
1.1/
𝑦
1
𝑆
0.2/
𝑦
4
𝑆
0.2/
𝑦
4
𝑆
0.2/
𝑦
4
𝑆
1.1
𝑆
0.1/
𝑦
0
𝑆
1.1/
𝑦
1
𝑆
2/
𝑦
2
𝑆
1.1/
𝑦
1
𝑆
1.1/
𝑦
1
𝑆
1.2
𝑆
0.1/
𝑦
0
𝑆
1.2/
𝑦
3
𝑆
2/
𝑦
2
𝑆
1.2/
𝑦
3
𝑆
1.2/
𝑦
3
𝑆
2
𝑆
0.1/
𝑦
0
𝑆
2/
𝑦
2
𝑆
2/
𝑦
2
𝑆
1.2/
𝑦
3
𝑆
0.2/
𝑦
4
Raqamni siljitish bilan amalga oshiriladi.
6.6- rasm. Ustunli ko‘paytirishga misol.
83
Natijani saqlash uchun operandlar kengligidan ikki baravar katta sig‘imga
ega bo‘lgan registrni belgilash talab qilinishi muhimdir. Bu formatning to‘lib
ketishi va noto‘g‘ri natijalarni oldini olish uchun kerak.
"Ustunli" ko‘paytirish algoritmining sxemasi 6.7-rasmda ko‘rsatilgan.
N
belgisi 6.7-rasmda
a
va
b
operandlarning xonaligini bildiradi. Yig‘indini
qisman qiymat miqdori har bir qadamda
part_res
o‘zgaruvchisiga joylashtiriladi.
Algoritmda qadamlarining hisoblagichi sifatida
ctr
o‘zgaruvchisi ishlatiladi.
Qo‘yidagi
b[ctr]
ifoda ikkinchi
b
operandidan
ctr
bit xonasini olishni bildiradi.
Bitlar 0 dan boshlab nomerlanadi. Hisoblash oxirida natija
result
o‘zgaruvchisiga
joylashtiriladi.
Endi
apparatli
ko‘paytirish
blokini
loyihalashtirishga
kirishiladi.
Birinchidan, blok interfeysi aniqlanadi. Hisob-kitoblar bosqichma-bosqich amalga
oshirilganligi sababli, hisoblash bloklarini ishga tushirishga kerak bo‘lgan signal
(
start_i
), blokning hisob-kitoblar bilan bandligini aniqlaydigan signal (
busy_o
),
shuningdek, qayta boshidan o‘rnatish signali (
rst_i
) va takt (
clk_i
) signallari kerak.
Algoritmni bosqichma-bosqich amalga oshirish uchun takt signali yoki
sinxronizatsiya signali talab qilinadi va har bir qadam
clk_i
signalining keyingi
musbat chekkasi (fronti) kelishi bilan bajariladi. Bundan tashqari, operandlarning
qiymatlarini (
a_bi
va
b_bi
) blokga berish uchun kirish ma’lumotlar shinalari,
shuningdek, hisob-kitoblar natijalarini uzatish uchun bitta chiqish shinalari (
y_bo
)
kerak bo‘ladi. Masalan, operandlar 8 bitli(xonali) ihorasiz butun sonlar deb faraz
qilinsa, chiqish ma’lumotlar shinasi 16 bitli (xonali) bo‘ladi, ya’ni operandlarning
xonaligidan ikki baravar katta bo‘lishi kerak. Loyihalanayotgan blokning interfeysi
6.8-rasmda ko‘rsatilgan.
84
6.7.Rasm "Ustun" ko‘paytirish algoritmining sxemasi.
6.8.Rasm - Ko‘paytirish qurilma birligining interfeysi.
Hisoblash jarayonini boshqarish moslamasini Mili cheklangan holat
avtomati sifatida loyihalash qulay, uning o‘tish grafigi 6.9-rasmda ko‘rsatilgan.
Tugash
Boshlash
Ko‘paytirish
bloki
85
6.9-rasm. Ko‘paytirish blokining boshqaruv bloki avtomatining o‘tish grafi.
Boshqarish mashinasi ikkita holatga ega: kutish (
IDLE
) va ish (
WORK
).
IDLE
holatida blok
start_i
boshqaruv signalining kelishini kutadi va hisob-
kitoblarning boshlanishiga o‘tadi. Algoritmning barcha bosqichlari
WORK
holatida
amalga oshiriladi.
Taqdim etilgan grafikda, har bir o‘tishning yuqorisida, o‘tish sharti
ko‘rsatilgan va y_bo va busy_o chiqish signallarining qiymati chiziq bilan
ajratilgan. Shunday qilib, masalan, (
start_i
== 1) shart bajarilganda
, IDLE
holatidan
WORK
holatiga o‘tish amalga oshiriladi.
Y_bo
chiqishida oldingi qiymat
saqlanib qoladi va
busy_o
signali 1 ga o‘rnatiladi.
Ko‘paytirish algoritmining Verilog HDL dasturi 6.3 listingda ko‘rsatilgan.
Taqdim etilgan tavsifda keyingi holatni yaratish mantig‘i, holat registri va Mili
avtomatining chiqish qiymatlarini yaratish mantig‘i bitta protsessual blokga
birlashtirilgan.
Listing 6.3 - Verilog HDL dagi ko‘paytirish blokining tavsifi
module mult (
input clk_i ,
input rst_i ,
input [ 7 : 0 ] a_bi ,
input [ 7 : 0 ] b_bi ,
input star t_i ,
86
output busy_o ,
output reg [ 1 5 : 0 ] y_bo
) ;
localparam IDLE = 1 ’ b0 ;
localparam WORK = 1 ’ b1 ;
reg [ 2 : 0 ] c t r ;
wire [ 2 : 0 ] end_step ;
wire [ 7 : 0 ] part_sum;
wire [ 1 5 : 0 ] shifted_part_sum ;
reg [ 7 : 0 ] a , b ;
reg [ 1 5 : 0 ] part_res ;
reg state;
assign part_sum = a & {8{b [ c t r ] } } ;
assign shifted_part_sum = part_sum << c t r ;
assign end_step = ( c t r == 3 ’ h7 ) ;
assign busy_o = state;
always @(posedge c lk_i )
i f ( rst_i ) begin
c t r <= 0 ;
Dostları ilə paylaş: |