【前言】
最近手上寫(xiě)了一個(gè)練手的小項(xiàng)目,項(xiàng)目的大致要求是實(shí)現(xiàn)一個(gè)取指,執(zhí)行電路。取指的指令預(yù)存在,從ROM中讀取指令后,根據(jù)預(yù)定的解碼規(guī)則,對(duì)指令進(jìn)行解碼,并執(zhí)行相對(duì)應(yīng)的操作。發(fā)出來(lái)和大家共同分享。
該工程的設(shè)計(jì)要求如下:
在ram模塊中,儲(chǔ)存有初始化的指令數(shù)據(jù)。我們要設(shè)計(jì)一個(gè)取指電路,并能根據(jù)不同的指令執(zhí)行不同的操作。指令數(shù)據(jù)為16bit.
指令編碼定義如下:
如果指令代碼為0,則下一個(gè)狀態(tài)為空閑。如果指令的低位8位為0,高位8位非0,則讀取指定高位8位的存儲(chǔ)器,并將其寫(xiě)入obuf0。如果指令的低8位非0,且高8位也不是0,則將下8位作為數(shù)據(jù),寫(xiě)入地址為上8位的存儲(chǔ)器中。
List4顯示了指令獲取電路。它實(shí)例化了五個(gè)模塊:PC0(程序計(jì)數(shù)器、8位計(jì)數(shù)器)、Ir0(指令寄存器、16位計(jì)數(shù)器)、OBUF0(輸出緩沖器、16位計(jì)數(shù)器)、STATE0(狀態(tài)機(jī))和RAM0(存儲(chǔ)器,8位256字塊RAM)。模塊pc0用于指定要讀取的地址,以便從ram0獲取(提取)指令代碼。指令代碼存儲(chǔ)在IR0中。
此指令獲取操作在兩種狀態(tài)下執(zhí)行:fetcha和fetchb。fetcha用于取地址操作,該地址作為讀取ram中指令的地址,fetchb用于指令寄存操作,將指令寄存到指令寄存器中。
在execa和execb狀態(tài)下,執(zhí)行表1中的操作。如果存儲(chǔ)在IR0中的指令代碼為0,則下一個(gè)狀態(tài)為空閑。如果指令的低位8位為0,高位8位非0,則讀取指定高位8位的存儲(chǔ)器,并將其寫(xiě)入obuf0。如果指令的下8位非0,則將下8位寫(xiě)入地址為上8位的存儲(chǔ)器。
指令解碼列在table1中
頂層代碼如圖所示:
下面是該工程的測(cè)試模塊:
下面的ram模塊的代碼:
狀態(tài)控制模塊的代碼:
計(jì)數(shù)器模塊的代碼:
設(shè)計(jì)說(shuō)明
該工程有以下模塊組成:
PC0(程序計(jì)數(shù)器、8位計(jì)數(shù)器)、
Ir0(指令寄存器、16位計(jì)數(shù)器)、
OBUF0(輸出緩沖器、16位計(jì)數(shù)器)、
STATE0(狀態(tài)機(jī))、
RAM0(存儲(chǔ)器,8位256字塊RAM)。
其中,PC0,IR0,OBUF0是例化計(jì)數(shù)器模塊得到的,該計(jì)數(shù)器模塊擁有計(jì)數(shù)和寄存數(shù)據(jù)兩個(gè)功能,分別由端口 inc 和 端口 load 控制。
當(dāng) inc有效時(shí),在下一個(gè)時(shí)鐘,會(huì)將計(jì)數(shù)器內(nèi)部的計(jì)數(shù)器自增1,并在q端輸出。
當(dāng)load信號(hào)有效時(shí),在下一個(gè)時(shí)鐘會(huì)將D端 的數(shù)據(jù)寄存到該計(jì)數(shù)器的寄存器中,并在Q端輸出。
PC0利用的是計(jì)數(shù)器的計(jì)數(shù)功能,用于產(chǎn)生取指令的地址信息。
IR0利用的是計(jì)數(shù)器的寄存功能,用于將ram中取出的指令暫時(shí)寄存。
OBUF0利用的是計(jì)數(shù)器的寄存功能,用于將輸出中暫時(shí)寄存。
在狀態(tài)機(jī)控制模塊中,設(shè)置了以下五個(gè)狀態(tài):
IDLE:空閑態(tài)。
FETCHA:取地址狀態(tài)。同時(shí)將程序計(jì)數(shù)器的內(nèi)部計(jì)數(shù)值加一。
FETCHB:取指令,指令寄存狀態(tài)。將從ram中讀出的指令寫(xiě)入到指令寄存器模塊中。
EXECA:指令解碼模塊,判斷指令的停止,讀,寫(xiě)控制信號(hào)。如果為寫(xiě)信號(hào),將指令的低8位作為數(shù)據(jù)寫(xiě)到高8位對(duì)應(yīng)的地址中。如果為讀指令,跳轉(zhuǎn)到EXECB狀態(tài),將指令的低8位輸出。如果停止信號(hào)為真3,跳轉(zhuǎn)到空閑狀態(tài)。
EXECB:執(zhí)行狀態(tài)。用于將指令的低8位輸出。
在ram模塊中,儲(chǔ)存有初始化的指令數(shù)據(jù)。
編輯:jq
-
cpu
+關(guān)注
關(guān)注
68文章
10905瀏覽量
213034
原文標(biāo)題:簡(jiǎn)單的CPU取指執(zhí)行電路設(shè)計(jì)
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論