【文章內(nèi)容簡介】
到11111111依次遞增1,當IA=0輸入數(shù)據(jù),輸出=輸入,當IA=1數(shù)據(jù)沒有被輸入,出輸出仍為上次輸入,所以輸出為00000000,00000010,00000100......由仿真波形可知,ACC模塊設計功能成功實現(xiàn)。 控制器模塊 說明:控制模塊根據(jù)指令操作碼和時序信號,產(chǎn)生各種操作控制信號 控制器CTRL程序流程圖 說明:輸入信號為三個操作指令信號LD,ADD,HALT和T0T7八個節(jié)拍脈沖及一個時鐘信號CLK,輸出為九個控制信號。當HALT=1時IPC=0和ESUM=0,當HALT=0時,9個控制信號別根據(jù)不同的節(jié)拍發(fā)生有不同的取值來執(zhí)行各自控制功能。 LIBRARY IEEE。USE 。USE 。USE 。ENTITY CTRL IS POTR(LD,ADD,HALT: IN STD_LOGIC。 CLK: IN STD_LOGIC。 T0,T1,T2,T3,T4,T5,T6,T7:IN STD_LOGIC。 IPC,IMAR,IDR,EDR,IA,EA,ISUM,ESUM,IIR: OUT STD_LOGIC。)。END ENTITY。ARCHITECTURE A OF CTRL ISBEGIN PROCESS(LD,ADD,HALT) BEGIN IF (HALT=’1’) THEN IPC=’0’。 ESUM=’0’。 ELSE IMAR=not(t0 or (t3 and ld)or (t3 and add))。 IIR=not t2。 IA=not((t6 and ld)or(t6 and add ))。 IDR=t1 or(t4 and ld) or (t4 and add)。 IPC=t2 or (t5 and ld) or (t5 and add)。 ISUM=not (t5 and add)。 ESUM=not(t6 and add)。 EA=not (t7 and add)。 EDR=(t6 an add) or (t7 and add)。 END IF。 END PROCESS。END A。 控制器CTRL功能仿真 波形分析:ADD,LD,T0T7波形設置為0,1交替,HALT先為10ns的高電平之后皆為低電平,根據(jù)公式 IMAR=not(t0 or (t3 and ld)or (t3 and add))。 IIR=not t2。 IA=not((t6 and ld)or(t6 and add ))。 IDR=t1 or(t4 and ld) or (t4 and add)。 IPC=t2 or (t5 and ld) or (t5 and add)。 ISUM=not (t5 and add)。 ESUM=not(t6 and add)。 EA=not (t7 and add)。 EDR=(t6 and add) or (t7 and add)??沈炞C波行無誤,CTRL模塊功能設計成功。 節(jié)拍發(fā)生器 說明:用于產(chǎn)生T0T7的8個節(jié)拍脈沖信號,是模型機按此節(jié)拍有序的工作 節(jié)拍發(fā)生器程序流程圖 說明:輸入信號位CLR和CLK,當CLR=0時賦初值,否則當CLK上升沿到來時進行環(huán)形移位,以實現(xiàn)節(jié)拍發(fā)生器功能。 2. VHDL源程序LIBRARY IEEE。USE 。USE 。USE 。ENTUTY COUNTER ISPORT(CLK,CLR:IN STD_LOGIC。 T0,T1,T2,T3,T4,T5,T6,T7:OUT_LOGIC)。END COUNTER。ARCHITECTURE A OF COUNTER ISSIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0)。BEGIN T0=TEMP(0)。 T1=TEMP(1)。 T2=TEMP(2)。 T3=TEMP(3)。 T4=TEMP(4)。 T5=TEMP(5)。 T6=TEMP(6)。 T7=TEMP(7)。 PROCESS(CLKCLR) BEGINIF(CLR=’0’)THEN TEMP(0)=’1’。 TEMP(1)=’0’。 TEMP(2)=’0’。 TEMP(3)=’0’。 TEMP(4)=’0’。 TEMP(5)=’0’。 TEMP(6)=’0’。 TEMP(7)=’0’。 ELSIF(CLK’EVENT AND CLK=’1’)THEN TEMP(0)=TEMP(7)。 TEMP(1)=TEMP(0)。 TEMP(2)=TEMP(1)。 TEMP(3)=TEMP(2)。 TEMP(4)=TEMP(3)。 TEMP(5)=TEMP(4)。 TEMP(6)=TEMP(5)。 TEMP(7)=TEMP(6)。 END IF。 END PROCESS。END A。 節(jié)拍發(fā)生器仿真波形圖 波形分析:根據(jù)輸入的時鐘信號以8個時鐘周期為一個大周期發(fā)生一個節(jié)拍脈沖,從T0到T7依次循環(huán)發(fā)生,節(jié)拍發(fā)生器模塊功能設計成功。 指令寄存器模塊IR和指令譯碼器 說明:指令寄存器IR用來保存當前正在執(zhí)行的一條指令,如果是操作碼就送到指令譯碼器進行譯碼。 指令寄存器模塊程序流程圖 說明:當執(zhí)行一條指令時,先把它從主存儲器中取到數(shù)據(jù)寄存器中,然后在傳送到指令寄存器。如果IR中儲存的是操作碼LD00111110,ADD11100110,HALT01110110,譯碼器就將操作碼譯成相應的操作指令LD,ADD,HALT。 LIBRARY IEEE。USE 。ENTITY IR ISPORT(DATA_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 IIR:IN STD_LOGIC。 CLK:IN STD_LOGIC。 LD,:OUT STD_LOGIC)。END IR。ARCHITECTURE A OF IR ISSIGNAL REGQ:STD_LOGIC_VECTOR(7 OWNTO 0)。BEGIN PROCESS(CLK,IIR) BEGINIF(CLK’EVENT AND CLK=’1’)THEN IF(IIR=’0’)THEN REGQ=DATA_IN。 END IF。END IF。 END PROCESS。PROCESS(CLK,REGQ)BEGIN CASE REGQ IS WHEN”00111110”=LD=’1’。ADD=’0’。HALT=’0’。 WHEN”11000110”=LD=’0’。ADD=’1’。HALT=’0’。 WHEN”01110110”=LD=’0’。ADD=’0’。HALT=’1’。 WHEN OTHERS=NULL。 END CASE。 END PROCESS。END A。 3. 指令寄存器模塊波形仿真 指令寄存器功能仿真 波形分析:當IIR=0時,輸入操作碼,并對其進行判斷,當操作碼為某個指令時,該指令輸出。當執(zhí)行一條指令時,先把它從主存儲器中取到數(shù)據(jù)寄存器中,然后在傳送到指令寄存器。如果IR中儲存的是操作碼LD00111110,ADD11100110,HALT01110110,譯碼器就將操作碼譯成相應的操作指令LD,ADD,HALT。在此仿真圖中為了清晰其功能把DATA_IN設置成00111110,11100110,01110110,循環(huán),,LD,HALT依次使能,證明此功能模塊設計成功。 時鐘產(chǎn)生器 說明:用來產(chǎn)生固定頻率的方波脈沖。 時鐘產(chǎn)生器模塊程序流程圖 說明:用于產(chǎn)生固定頻率的方波,設置counter值從0到25000000依次按clk周期順次加一得以實現(xiàn),如此循環(huán)。 LIBRARY IEEE。USE 。ENTITY CLK_SOURCE IS PORT(CLK_50M:IN STD_LOGIC。 CLK:OUT STD_LOGIC)。END ENTITY。ARCHITECTURE A OF CLK_SOURCE ISSIGNAL CLK_TEMP:STD_LOGIC。BEGIN CLK=CLK_TEMP。 PROCESS(CLK_50M,CLK_TEMP) VARIABLE COUNTER:INTEGER RANGE 0 TO 25000000。 BEGIN IF(COUNTER=25000000)THEN COUNTER:=0。 CLK_TEMP=NOT CLK_TEMP。 ELSIF(CLK_50M’EVENT AND CLK_50M=’1’)THEN COUNTER:=COUNTER+1。 END IF。 END PROCESS。END A。 時鐘產(chǎn)生器功能仿真 波形分析:輸入信號CLK_50M時鐘頻率為50MHZ即周期為20ns,在每個時鐘上升沿是counter值自動加1,在達到25000000時歸零重計。 程序計數(shù)器模塊 說明:用于確定下一條指令的地址。 程序計數(shù)器模塊程序流程圖 說明:程序計數(shù)器的作用是確定下一條指令的地址。由于模型計算機只有5個字節(jié)的機器碼,所以程序計數(shù)器PC的輸出只使用3位,當IPC=0時,計數(shù)器保持原狀態(tài);IPC=1時,計數(shù)器處于計數(shù)狀態(tài),當時鐘信號CLK上升沿到來時,做加1運算。 LIBRARY IEEE。USE 。USE 。USE 。ENTITY PC ISPORT( IPC,CLK,CLR:IN STD_LOGIC。 PCOUT:OUT STD_LOGIC_VECTOR(2 DOWNTO 0))。END PC。ARCHITECTURE A OF PC ISSIGNAL QOUT:STD_LOGIC_VECTOR(2 DOWNTO 0)。BEGINPROCESS(CLK,CLR,IPC)BEGIN IF(CLR=’0’) THEN QOUT=”0000”。 ELSIF(CLK’EVENT AND CLK=’1’) THEN IF(IPC=’1’) THEN QOUT=QOUT+1。 END IF。 END IF。 END PROCESS。 PCOUT=QOUT。END A。 程序計數(shù)器功能仿真 波形分析:時鐘信號CLK周期設為10ns,前20nsCLR信號設為低電平,程序計數(shù)器清零輸出為000,第20ns之后CLR=1,程序計數(shù)器開始隨時鐘上升沿開始計數(shù),輸出地址為000,001,010,011,100,101,110,111。 地址寄存器MAR 說明:用MAR來保存當前CPU所訪問的主存儲器單元的地址。 地址寄存器模塊程序流程圖 說明:用來保存當前CPU所訪問的主存儲器單元的地址,由于主存儲器與CPU之間存在操作速度上的差別,所以必須使用地址寄存器來保存地址信息,直到主存儲器的讀/寫操作完成為止。當IMAR=0且時鐘信號CLK上升沿到來時,將地址存入,并直接輸出到存儲器的地址線上. LIBRARY IEEE。USE 。ENTITY MAR ISPORT(ADDR_IN:IN STD_LOGIC_VECTOR(2 DOWNTO 0)。 IMAR:IN STD_LOGIC。 CLK:IN STD_LOGIC。 ADDR_OUT:OUT STD_LOGIC_VECTOR(2 DOWNTO 0))。END MAR。ARCHITECTURE A OF MAR ISBEGIN PROCESS(CLK,IMAR) BEGINIF(CLK’EVENT AND CLK=’1’) THEN IF (IMAR=’0’) THEN ADDR_OUT=ADDR_IN。 END IF。 END IF。END PROCESS。 END A。 地址寄存器功能仿真 波形分析:輸入等于輸出,當?shù)刂芳拇嫘盘朓MAR=0時,將地址輸入,ADDR_IN設置為000到100循環(huán),ADDR_OUT輸出也是對應的000到1000。 存儲器RAM 說明:用于存儲程序和數(shù)據(jù) 存儲器RAM程序流程圖 說明:計算機是按事先編寫