citius-altius-fortius processor · 2016. 8. 29. · latince de bu kelimeler sirasiyla “daha...
TRANSCRIPT
CITIUS-ALTIUS-FORTIUS
PROCESSOR
Versiyon 1.00
15/04/2008
PROJE SORUMLUSU : BERKAY AYBAR
MURAT GOKSEL
E-MAIL : [email protected], [email protected]
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 2
ICINDEKILER
Tablo Listesi.............................................................................................................................
Figur Listesi.............................................................................................................................
1 GIRIS....................................................................................................................................
1.1 FPGA .................................................................................................................
1.2 RISC Islemci .......................................................................................................
1.3 EDA Yazilimlari ..................................................................................................
2 FPGA ile Fiziksel Islemci Tasarimi Uygulamasi................................................................
2.1 RISC Komut Seti Mimarisi....................................................................................
2.2 RISC Islemci Mimarisi ............................................................................................
2.3 RISC Islemci Verilog Uygulamasi..........................................................................
2.3.1 Komut Yakalama Birimi.........................................................................
2.3.2 Komut Cozumleme Birimi....................................................................
2.3.3 Kontrol Unitesi....................................................................................
2.3.4 Calisma Unitesi....................................................................................
2.3.5 Hafiza Birimleri..................................................................................
2.4 16 bitlik Pipeline Islemci Uygulamasi
2.4.1 Pipeline Tehlikeleri..................................................................................
2.5 Donanim Uygulamasi....................................................................................................
3 Sonuclar ....................................................................................................................................
4 Gelicekte Yapilmasi Gereken Calismalar..................................................................................
5 Sonuc........................................................................................................................................
Referanslar...............................................................................................................................
Appendiks.................................................................................................................................
A. Kaynaklar............................................................................................................................
B. Kisaltmalar ve Tanimlar.....................................................................................................
C. CAF Processor Verilog Kodu................................................................................................
D. Simulasyon .........................................................................................................................
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 3
CAF PROCESSOR PROJE OZETI
Bu proje kapsaminda verilen komut setinin tasarimda oncelikli olarak en verimli sekilde
gerceklenmesi on gorulmustur. Tasarimi zenginlestirmek icin verilen komut setine ek olarak
guncel islemcilerde kullanilan yaygin komutlar da eklenicektir(orn: POP, PUSH… ). Tasarim 16-
bitlik pipelined RISC mimarisi gerceklestirilerek uygulanacaktir. CAF_Processor tasariminin dort
farkli bolumden olusmasi on gorulmustur, bunlar sirasiyla;
1) Komut Yakalama Bolumu (Instruction Fetch Stage)
2) Komut Cozumleme Bolumu (Instruction Decoding Stage)
3) Calisma Bolumu (Execution Stage)
4) Geri Okuma Bolumu( Write Back Stage)
Her bolum bir veya birden fazla verilog modulunden olusacaktir.
Projenin iki fazdan olusturulmasi on gorulmustur. Birinci faz verilen komut kumesinin ve buna
ek olarak guncel komutlarin kullanilacagi 16-bitlik RISC islemci tasarimidir. Ikinci faz da ek olarak
IEEE 754 Floating Point Unitesi nin de donanima entegre edilip komut kumesini zenginlestirmek
ayni zamanda tasarlanicak islemcinin islem yapabilme gucunu artirmak olarak hedeflenmistir.
Proje kapsamin da tasarlanicak islemci ile ornek bir FIR filtre uygulamasi yapilmasi
planlanmaktadir.
Proje kapsaminda ozellikle fonksyonel simulasyonlari ve post-synthesis simulasyonlarini
gerceklestirmek icin gerekli olan EDA yazilimlari ve bir gelistirme boardi talep edilmektedir.
‘C’, ‘A’, ‘F’ harfleri latince Citius- Altius- Fortius kelimelerinin bas harflerinden gelmektedir.
Latince de bu kelimeler sirasiyla “Daha hizli, Daha Yuksek, Daha Guclu” anlamina gelmektedir.
Tasarlanicak islemcininde butun bu ozellikleri saglamasi hedeflendigi icin bu isim proje icin
uygun gorulmustur.
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 4
Add Addition 1
Addi Addition (immediate) 2
Sub Subtraction 3
Subi Subtraction (immediate) 4
Mul Multiplication 5
Muli Multiplication (immediate) 6
Mulu Multiplication (unsigned) 7
Cmp Compare 8
And AND 9
Andi AND (immediate) 10
Or OR 11
Ori OR (immediate) 12
Not NOT 13
Xor XOR 14
Xori XOR (immediate) 15
Sll Logical shift left 16
Srl Logical shift right 17
Sla Arithmetic shift left 18
Sra Arithmetic shift right 19
Lw Load word 20
Sw Store word 21
Mov Move data between registers 22
Movi Move data (immediate) 23
Beq Branch if equal to 0 24
Bne Branch if not equal to 0 25
Ba Branch always 26
BL Branch and Link 27
Nop No operation 28
Hlt Halt 29
Syscall System call (software interrupt) 30
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 5
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 6
1 GIRIS
1.1 FPGA Bu projenin amaci FPGA icerisinde 16 bitlik RISC islemci tasarlamak ve bu islemciyi kullanarak bir
uygulama gerceklestirmektir. Bu p roje raporu ileride egitim amacli kullanicagi dusunulerek sayisal
tasarim ve FPGA teknolojisi hakkinda genel bilgilerde icermektedir.
FPGA teknolojisi sayisal tasarimcilara cok buyuk esneklik saglamaktadir.Bunun en buyuk sebeplerinden
biri FPGA in tekrar programlanabilmesidir. Ayni zamanda FPGA lerin kismen dusuk fiyatli olmasi ve FPGA
sirketlerinin(Xilinx, Altera, Actel gibi...) sagladiklari gelismis yazilim araclari sayisal tasarimla ugrasan
donanim muhendislerinin hayatini kolaylastirir.
FPGA ile yeni calismaya baslayan genc muhensdiler genellikle FPGA yi farkli bir tur mikroislemci sanarlar.
Fakat FPGA kullanim amaci ile mikroislemcinin kullanim amaci bir cok zaman birbirlerinden cok farklidir.
FPGA in iki farkli kullanim alani vardir bunlardan ilki ASIC prototip gerceklemesidir. ASIC tasarimcilari
yaptiklari tasarimlari bilgisayar uzerinde yaptiklari simulasyonlardan sonra FPGA uzerine tasirlar. Cunku
FPGA uzerine tasinan bir tasarim gercek zamanda fonksyonellik gosterir . Tasarimci kendisinden istenen
tasarimin kriterleri gerceklesip gerceklesmedigini bu evrede test etme sansi bulunur.Tasarim
muhendisleri icin tasarimlarinin kriterleri olusturup olusturmadigini gormelerini saglayan onemli bir
firsattir. Bundan sonraki adim tasarimin ASIC(Chip) in fabrikasyonu icin proses e gonderilmesidir. FPGA
baska bir kullanim alani ise dusuk hacimde sistem uretimlerinde ASIC ye bir alternatiftir. ASIC uretimi cok
maliyetli bir is oldugu icin ancak yuksek hacimde uretim yapildigi zaman ASIC in birim fiyati makul bir
degere ulasir. Ama eger yuksek hacimli bir uretim yapilmayacaksa ASIC uretimi cok pahali olabilir. Bu
noktada FPGA boslugu doldurur tasarimcilara hem fiyat hemde tasarim kolayligi acisindan cok fazla
avantaj saglar. Tasarlanicak olan spesifik devre FPGA icinde gerceklestirilir ve sistem icinde calistirilir.
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 7
1.2 RISC Islemci Bu projede yer alan islemci mimarisi RISC islemci mimarisidir. RISC (Reduced Instruction Set
Computer )”Komut Seti Azaltilmis Bilgisayar” anlamina gelmektedir. Komut setinin azaltilmasi,
cogu zaman islemcinin komut kumesindeki kompleks komutlarin cikartilmasi ile gerceklesir. Bu
RISC islemci mimarisini daha az kompleks yapar. RISC islemcilerde asil amac tasarlanan komut
kumesini basit yapmak ve bunun sonucunda komutlari hizli isleyen bir islemci elde etmektir.
RISC islemcilerde komutlarin islenmesi bir saat cevrimi surer ve komutlarin uzunlugu sabittir.
RISC islemci mimarisi bir baska islemci mimarisi olan CISC(Complex Instruction Set Computer)
mimarisine alternatif olarak tasarlanmistir. Gunumuzde kullanilan bir cok kisisel bilgasayar CISC
mimarisi icerir. 1970 lerin basinda ilk mikroislemci tasarlandiginda hafiza birimleri pahali
oldugundan komutlari mumkun oldugu kompleks tasarlayip olusturulucak programlarin hafizada
daha az yer kaplanmasi amaclanmistir. O donemde hafiza birimleri maliyetli oldugu icin islemci
tasarimcilarini bu yola yoneltmistir. Hafiza maliyetlerinin dusmesi tasarimcilari RISC islemci
mimarisine yoneltmistir.
RISC ve CISC komut setleri arasindaki iliskiyi guzel bir analoji yaparak aciklamaya calisalim.
Ornegin latin alfabesi kullanarak yazilmis bir kitap in toplam sayfa sayisi ile ayni kitabin Cince
yazilmis versiyonu ayni sayida degildir. Cince yazilan kitap cok daha az sayfadan olusur bunun
sebebi Cın alfabesinde 4000 den fazla farkli sembolun olusudur. Semboller cok spesifik anlamlar
icerebilirler fakat bunun sonucunda cok kompleks ve ogrenmesi cok zordur. Latin alfabesinde ise
sadece 26 farkli sembol vardir. Bununla beraber atni kitap cok daha fazla sayfa icermektedir.
RISC islemci ve CISC islemci komut seti arasindaki farkda buna cok benzerdir. CISC islemcileri
cozumlemek cok daha karisik ve zordur.
Genel RISC mimarisi dort bolumden olusmustur. Bunlar sirasiyla
1. Komut Yakalama Evresi(Instruction Fetch Stage)
2. Komut Cozumleme Evresi(Instruction Decode Stage)
3. Komut Calistirma Evresi (Instruction Execution Stage)
4. Geri Yazma Evresi(Write Back)
Ilerleyen bolumlerde CAF islemci tasarimi ve mimarisi ile ilgili daha detayli bilgi verilecektir.
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 8
1.3 EDA Yazilimlari
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 9
2 FPGA ile Fiziksel Islemci Uygulamasi
2.1 Komut Seti Mimarisi
CAF_Processor Komut Kumesi Komut Sembol Opcode Ornek Anlam Yorum
Toplama add 00 0001
Toplama Immediate
addi 00 0010
Cikarma sub 00 0011
Cikarma Immediate
Subi 00 0100
Carpma Mul 00 0101
Carpma Immediate
Muli 00 0110
Carpma Isaretsiz
mulu 00 0111
Kiyaslama Cmp 00 1000
Ve And 00 1001
Ve Immediate
Andi 00 1010
Veya Or 00 1011
Veya Immediate
Ori 00 1100
Not Not 00 1101
Xor Xor 00 1110
Xor immediate
Xori 00 1111
Mantiksal sola
kaydirma
Sll 01 0000
Mantiksal saga
kaydirma
Sri 01 0001
Aritmetik sola
kaydirma
Sla 01 0010
Aritmetik saga
Sra 01 0011
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 10
kaydirma Kelime
Yukleme Lw 01 0100
Kelime Depolama
Sw 01 0101
Tasima
mov 01 0110
Tasima Immediate
Movi 01 0111
Kosul(Eger ‘0’ a esit
ise)
Beq 01 1000
Kosul (Eger ‘0’ esit degil
ise)
Bne 01 1001
Kosul her zaman
Ba 01 1010
Kosul ve baglama
BL 01 1011
İslem yok Nop 01 1100
Dur Halt 01 1101
Kesme Syscall 01 1110
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 11
2.2 RISC Islemci Mimarisi
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 12
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 13
Apendiks A : Komut Aciklamalari
1) ADD(Toplama) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 1 X Ra Rb Rc
Opcode
2 ) Addi(Toplama-Immediate) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 1 0 Ra Immediate
Opcode
3)Sub(Cikarma) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 1 1 X Ra Rb Rc
Opcode
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 14
4)Subi(Cikarma-Immediate) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 0 0 Ra Immediate
Opcode
5) Mul(Carpma) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 0 1 X Ra Rb Rc
Opcode
6 ) Muli(Carpma-Immediate) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 0 Ra Immediate
Opcode
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 15
7) Mulu(Carpma-Isaretsiz) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 1 X Ra Rb Rc
Opcode
8)Cmp(Kiyaslama) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 0 0 0 X Ra Rb Rc
Opcode
9)And(Ve) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 0 0 1 X Ra Rb Rc
Opcode
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 16
10)Andi(Ve-Immediate) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 0 1 0 Ra Immediate
Opcode
11 )Or(Veya) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 0 1 1 X Ra Rb Rc
Opcode
12)Ori (Veya-Immediate) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 0 0 Ra Immediate
Opcode
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 17
13)Xori(Exor-Immediate) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 0 1 Ra Immediate
Opcode
14)Xor(Exor) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 1 0 X Ra Rb Rc
Opcode
15)Sll(Mantiksal – Sola Kaydirma) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 1 1 Immediate Rb Rc
Opcode
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 18
16)Srl(Mantiksal – Saga Kaydirma) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 0 0 Immediate Rb Rc
Opcode
17)Sra(Aritmatik-Saga Kaydirma) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 0 1 Immediate Rb Rc
Opcode
18)Sla(Aritmatik-Sola Kaydirma) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 1 0 Immediate Rb Rc
Opcode
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 19
19)Not 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 1 1 X Ra Rb Rc
Opcode
20)Lw(Kelime Yukleme) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 1 0 0 X Ra Rb Rc
Opcode
21)Sw(Kelime Depolama) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 1 0 1 X Ra Rb Rc
Opcode
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 20
22) Movi(Veri tasima Immediate) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 1 1 1 Ra Immediate
Opcode
23) Mov(Veri Tasima) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 1 1 0 X XXX Rb Rc
Opcode
24)Beq(Brans Esit) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 0 0 0 Kosul Immediate
Opcode
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 21
25)Bnq(Brans Esit Degil) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 0 0 1 Kosul Immediate
Opcode
26)Ba(Branch always) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 0 1 0 Immediate
Opcode
27)Nop(No Operation) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 0 1 1 Kosul Immediate
Opcode
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 22
28)Hlt(Halt) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 0 0 Kosul Immediate
Opcode
29)Syscall(System calll) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 0 1 Kosul Immediate
Opcode
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 23
Apendiks B : Verilog Kodu
// CAF_Processor.v
`include "global_parameters_def.v" 1
2
module (clk, reset_n, read_instruction_n, instruction_address, 3
instruction, read_data_n, write_data_n,data_address, data); 4
input clk; 5
input reset_n; 6
input read_instruction_n; 7
input [`WORD_SIZE-1:0] instruction_address; 8
input [`WORD_SIZE-1:0] instruction; 9
10
output read_data_n; 11
output write_data_n; 12
output [`WORD_SIZE-1:0] data_address; 13
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 24
output [`WORD_SIZE-1:0] data; 14
//Signal declarations for chip inputs and outputs 15
reg read_instruction_n; 16
reg read_data; 17
reg write_data_n; 18
reg [`WORD_SIZE-1:0] PC; //program counter 19
reg [`WORD_SIZE-1:0] LR; //link register 20
reg [`WORD_SIZE-1:0] SP; //stack pointer 21
reg [`WORD_SIZE-1:0] R[`reg_file_size-1:0];// general regs 22
reg N_FLAG; //condition flags (N = negative) 23
reg Z_FLAG; //Zero 24
reg C_FLAG; //Carry 25
reg V_FLAG; //Overflow 26
//signal declarations used to aid in the verilog description 27
reg branch_taken; 28
reg [`WORD_SIZE-1:0] branch_target; 29
reg [`WORD_SIZE-1:0] ALU_out_reg; 30
reg [`WORD_SIZE-1:0] DR; 31
integer i, ex_i; 32
integer found_i, found_ex_i; 33
//pipeline regs 34
reg [`WORD_SIZE-1:0] IF_IR; 35
reg [`WORD_SIZE-1:0] IF_PC; 36
reg [`WORD_SIZE-1:0] ID_PC; 37
reg [`WORD_SIZE-1:0] ID_Ra; 38
reg [`WORD_SIZE-1:0] ID_Rb; 39
reg [`WORD_SIZE-1:0] ID_Rc; 40
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 25
reg [`WORD_SIZE-1:0] EX_ALU_out; 41
reg [5:0] ID_opcode; 42
reg [5:0] EX_opcode; 43
reg [10:0] ID_Imm_offset; 44
reg [7:0] EX_Imm_offset; 45
reg [3:0] ID_cond; 46
reg [2:0] ID_Rd_code; 47
reg [2:0] EX_Rd_code; 48
49
50
//ASSIGN_STATEMENTS// 51
assign instruction_address = PC; 52
assign data = (~write_data_n) ? DR : `bz; //tri-state data 53
54
//Komut_Yakalama: Komut Yakalama Evresi 55
always@(posedge clk or posedge reset_n) begin 56
if(~reset_n) begin 57
PC <= 0; //program sayaci ilk kosulu 58
read_instruction_n <= 0; 59
end 60
else begin 61
read_instruction_n <= 0; 62
PC <= PC + 2; 63
IF_IR <= instruction; // Komut Yakalama Komut Yazicisi 64
IF_IR <= PC + 2; 65
end 66
end process; 67
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 26
68
//Komut_Cozucu Evresi 69
always@(posedge clk) begin 70
case(IF_IR[15:10]) 71
6'b00_0001:begin 72
ID_opcode <= `ADD; 73
ID_Ra <= R[IF_IR[8:6]]; 74
ID_Rb <= R[IF_IR[5:3]]; 75
ID_Rc <= R[IF_IR[2:0]]; 76
6'b00_0010:begin 77
ID_opcode <= `ADDi; 78
ID_Ra <= R[10:8]; 79
ID_imm_offset[7:0] <= IF_IR[7:0]; 80
6'b00_0011:begin 81
ID_opcode <=`SUB; 82
ID_Ra <= R[IF_IR[8:6]]; 83
ID_Rb <= R[IF_IR[5:3]]; 84
ID_Rc <= R[IF_IR[2:0]]; 85
6'b00_0100:begin 86
ID_opcode <= `SUBi; 87
ID_Ra <= R[10:8]; 88
ID_imm_offset[7:0] <= IF_IR[7:0]; 89
6'b00_0101:begin 90
ID_opcode <= `MUL; 91
ID_Ra <= R[IF_IR[8:6]]; 92
ID_Rb <= R[IF_IR[5:3]]; 93
ID_Rc <= R[IF_IR[2:0]]; 94
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 27
6'b00_0110:begin 95
ID_opcode <= `MULi; 96
ID_Ra <= R[IF_IR[10:8]]; 97
ID_imm_offset <= R[IF_IR[7:0]]; 98
99
6'b00_0111:begin 100
ID_opcode <= `MULu; 101
ID_Ra <= R[IF_IR[8:6]]; 102
ID_Rb <= R[IF_IR[5:3]]; 103
ID_Rc <= R[IF_IR[2:0]]; 104
6'b00_1000:begin 105
ID_opcode <= `CMP; 106
ID_Ra <= R[IF_IR[8:6]]; 107
ID_Rb <= R[IF_IR[5:3]]; 108
ID_Rc <= R[IF_IR[2:0]]; 109
6'b00_1001:begin 110
ID_opcode <= `AND; 111
ID_Ra <= R[IF_IR[8:6]]; 112
ID_Rb <= R[IF_IR[5:3]]; 113
ID_Rc <= R[IF_IR[2:0]]; 114
115
6'b00_1010:begin 116
ID_opcode <= `ANDi; 117
ID_Ra <= R[IF_IR[10:8]]; 118
ID_imm_offset <= R[IF_IR[7:0]]; 119
120
6'b00_1011:begin 121
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 28
ID_opcode <= `OR; 122
ID_Ra <= R[IF_IR[8:6]]; 123
ID_Rb <= R[IF_IR[5:3]]; 124
ID_Rc <= R[IF_IR[2:0]]; 125
126
6'b00_1100:begin 127
ID_opcode <= `ORi; 128
ID_Ra <= R[10:8]; 129
ID_imm_offset[7:0] <= IF_IR[7:0]; 130
131
6'b00_1101:begin 132
ID_opcode <= `XOR; 133
ID_Ra <= R[IF_IR[8:6]]; 134
ID_Rb <= R[IF_IR[5:3]]; 135
ID_Rc <= R[IF_IR[2:0]]; 136
137
6'b00_1110:begin 138
ID_opcode <= `XORi; 139
ID_Ra <= R[10:8]; 140
ID_imm_offset[7:0] <= IF_IR[7:0]; 141
142
6'b00_1111:begin 143
ID_opcode <= `SLL; 144
ID_imm_offset[4:0] <= R[IF_IR[8:6]]; 145
ID_Rb <= R[IF_IR[5:3]]; 146
ID_Rc <= R[IF_IR[2:0]]; 147
148
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 29
6'b01_0000:begin 149
ID_opcode <= `SRL; 150
ID_imm_offset[4:0] <= R[IF_IR[8:6]]; 151
ID_Rb <= R[IF_IR[5:3]]; 152
ID_Rc <= R[IF_IR[2:0]]; 153
154
6'b01_0001:begin 155
ID_opcode <= `SLA; 156
ID_imm_offset[4:0] <= R[IF_IR[8:6]]; 157
ID_Rb <= R[IF_IR[5:3]]; 158
ID_Rc <= R[IF_IR[2:0]]; 159
160
6'b01_0010:begin 161
ID_opcode <= `SRA; 162
ID_imm_offset[4:0] <= R[IF_IR[8:6]]; 163
ID_Rb <= R[IF_IR[5:3]]; 164
ID_Rc <= R[IF_IR[2:0]]; 165
166
167
6'b01_0011:begin 168
ID_opcode <= `NOT; 169
ID_Ra <= R[IF_IR[8:6]]; 170
ID_Rb <= R[IF_IR[5:3]]; 171
ID_Rc <= R[IF_IR[2:0]]; 172
173
6'b01_0100:begin 174
ID_opcode <= `LW; 175
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 30
ID_Ra <= R[IF_IR[8:6]]; 176
ID_Rb <= R[IF_IR[5:3]]; 177
ID_Rc <= R[IF_IR[2:0]]; 178
179
6'b01_0101:begin 180
ID_opcode <= `SW; 181
ID_Ra <= R[IF_IR[8:6]]; 182
ID_Rb <= R[IF_IR[5:3]]; 183
ID_Rc <= R[IF_IR[2:0]]; 184
185
6'b01_0110:begin 186
ID_opcode <= `MOVi; 187
ID_Ra <= R[IF_IR[8:6]]; 188
ID_imm_offset[7:0] <= IF_IR[7:0]; 189
190
191
6'b01_0111:begin 192
ID_opcode <= `MOV; 193
ID_Ra <= R[IF_IR[5:3]]; 194
ID_Rb <= R[IF_IR[2:0]]; 195
196
6'b01_1000:begin 197
ID_opcode <= `BEQ; 198
ID_cond <= IF_IR[11:8]; 199
ID_imm_offset[7:0] <= IF_IR[7:0]; 200
201
202
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 31
6'b01_1001:begin 203
ID_opcode <= `BNQ; 204
ID_cond <= IF_IR[11:8]; 205
ID_imm_offset[7:0] <= IF_IR[7:0]; 206
207
6'b01_1010:begin 208
ID_opcode <= `BA; 209
ID_imm_offset[9:0] <= IF_IR[9:0]; 210
211
6'b01_1011:begin 212
ID_opcode <= `NOP; 213
ID_Ra <= R[IF_IR[8:6]]; 214
ID_Rb <= R[IF_IR[5:3]]; 215
ID_Rc <= R[IF_IR[2:0]]; 216
217
6'b01_1100:begin 218
ID_opcode <= `HLT; 219
ID_Ra <= R[IF_IR[8:6]]; 220
ID_Rb <= R[IF_IR[5:3]]; 221
ID_Rc <= R[IF_IR[2:0]]; 222
223
6'b01_1101:begin 224
ID_opcode <= `SYSCALL; 225
ID_Ra <= R[IF_IR[8:6]]; 226
ID_Rb <= R[IF_IR[5:3]]; 227
ID_Rc <= R[IF_IR[2:0]]; 228
229
CAF Processor Versiyon1.00
FPGA ile CPU tasarimi Page 32
endcase 230
end 231
endmodule 232