【正文】
atain。 end if。 12 加 /減法器 addsub 加 /減法器 addsub 用于處理兩個(gè)輸入的數(shù)據(jù) datain2[15..0] 和 datain1[15..0],當(dāng)控制端 Addsub=1 時(shí),兩個(gè)數(shù)據(jù)輸入端 datain2[15..0] 和 datain1[15..0]相加并從數(shù)據(jù)輸出端 dataout[15..0]輸出;當(dāng)控制端Addsub=0 時(shí),數(shù)據(jù)輸入端 datain2[15..0] 減去 datain1[15..0],結(jié)果從數(shù)據(jù)輸出端 dataout[15..0]輸出。 use 。 dataout:out std_logic_vector(15 downto 0) )。139。) then databuffer=datain2datain1。 end process。 use 。 end G。139。 else databuffer=databuffer。 dataout=databuffer。 當(dāng)時(shí)鐘輸入 clock 的上升沿到來且IRin=1 時(shí),取數(shù)據(jù)輸入端 datain[15..0]的 高 9 位將其 鎖存到寄存器中并從數(shù)據(jù)輸出端 dataout[8..0]輸出;當(dāng) RXin=0 時(shí),輸出端保持原來的值不變。 datain :in std_logic_vector(15 downto 0)。 begin process(clock,IRin,datain,databuffer) begin if (clock39。139。 else databuffer=databuffer。 end behave。 use 。 end upcount。139。139。 end if。 16 復(fù)用器 multi 復(fù)用器根據(jù) 控 制單元的控制信 號(hào)將指定的輸入數(shù)據(jù)輸出到總線上。 use 。 R2in :in std_logic_vector(15 downto 0)。 R6in :in std_logic_vector(15 downto 0)。 R0out :in std_logic。 R4out :in std_logic。 Gout :in std_logic。 architecture behave of multi is signal select_signal:std_logic_vector(9 downto 0)。R5outamp。R1outamp。 process(databuffer,R0in,R1in,R2in,R3in,R4in,R5in,R6in,R7in,DIN,Gin,R7out,R6out,R5out,R4out,R3out,R2out,R1out,R0out,Gout,DINout) begin case select_signal is when0000000001=databuffer=DIN。 when0000010000=databuffer=R2in。 when0100000000=databuffer=R6in。 buswire=databuffer。 R unR es etD I N _I R _9 [ 8. . 0]count[1..0]IRinGoutDINoutR0inR1inR2inR3inR4inR5inR6inR7inR0outR1outR2outR3outR4outR5outR6outR7outGinAinAddsubD on eclearc on t ro lin s t 圖 18 控制單元 control 的 VHDL 代碼 library ieee。 entity control is port( Run :in std_logic。 IRin :out std_logic。 R0out,R1out,R2out,R3out,R4out,R5out,R6out,R7out :out std_logic。 Done :out std_logic。 signal current_state,next_state:state。 if (Run=39。 )then case count is when 00= IRin=39。DINout=39。R1in=39。R3in=39。R5in=39。R7in=39。R1out=39。R3out=39。R5out=39。R7out=39。Ain=39。Done=39。 IRin=39。 Gout=39。 R0in=39。R2in=39。R4in=39。R6in=39。 R0out=39。R2out=39。R4out=39。R6out=39。 Gin=39。Addsub=39。clear=39。 test1_signal=39。 when 001=R1in=39。 when 011=R3in=39。 when 101=R5in=39。 when 111=R7in=39。 when001= R1out=39。 20 when 001=R1in=39。 when 011=R3in=39。 when 101=R5in=39。 when 111=R7in=39。 when010= R2out=39。 when 001=R1in=39。 when 011=R3in=39。 when 101=R5in=39。 when 111=R7in=39。 when011= R3out=39。 when 001=R1in=39。 when 011=R3in=39。 when 101=R5in=39。 when 111=R7in=39。 when100= R4out=39。 when 001=R1in=39。 when 011=R3in=39。 when 101=R5in=39。 when 111=R7in=39。 when101= R5out=39。 when 001=R1in=39。 when 011=R3in=39。 when 101=R5in=39。 when 111=R7in=39。 when110= R6out=39。 when 001=R1in=39。 when 011=R3in=39。 when 101=R5in=39。 when 111=R7in=39。 when111= R7out=39。 when 001=R1in=39。 when 011=R3in=39。 when 101=R5in=39。 when 111=R7in=39。 when others=null。 clear=39。 Gout=39。 R0in=39。R2in=39。R4in=39。R6in=39。 R0out=39。R2out=39。R4out=39。R6out=39。 Gin=39。Addsub=39。clear=39。 case IR_buffer(5 downto 3) is when 000=R0in=39。 when 010=R2in=39。 when 100=R4in=39。 when 110=R6in=39。 when others=null。 clear=39。 Gout=39。 R0in=39。R2in=39。R4in=39。R6in=39。 R0out=39。R2out=39。R4out=39。R6out=39。 Gin=39。Addsub=39。clear=39。 when 001=R1out=39。 when 011=R3out=39。 when 101=R5out=39。 when 111=R7out=39。 Ain=39。 Gout=39。 R0in=39。R2in=39。R4in=39。R6in=39。 R0out=39。R2out=39。R4out=39。R6out=39。 23 Gin=39。Addsub=39。clear=39。 when 001=R1out=39。 when 011=R3out=39。 when 101=R5out=39。 when 111=R7out=39。 Ain=39。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。039。139。139。139。139。 end case。139。039。039。039。039。039。039。039。039。039。039。039。039。139。139。139。139。039。 state2state2state2 state3state3state3state3 when 11= if(IR_buffer(8 downto 6)=000) then mv without state2 IRin=39。DINout=39。R1in=39。R3in=39。R5in=39。R7in=39。R1out=39。R3out=39。R5out=39。R7out=39。Ain=39。Done=39。 elsif (IR_buffer(8 downto 6)=001) then mvi without state2 25 IRin=39。DINout=39。R1in=39。R3in=39。R5in=39。R7in=39。R1out=39。R3out=39。R5out=39。R7out=39。Ain=39。Done=39。 elsif (IR_buffer(8 downto 6)=010 or IR_buffer(8 downto 6)=011 ) then add Rx,Ry state2 IRin=39。DINout=39。R1in=39。R3in=39。R5in=39。R7in=39。R1out=39。R3out=39。R5out=39。R7out=39。Ain=39。Done=39。 Gout=39。 when 001=R1in=39。 when 011=R3in=39。 when 101=R5in=39。 when 111=R7in=39。 Done=39。 end case。 26 控制指令輸入轉(zhuǎn)換模塊 由于試驗(yàn)箱上只有 12 個(gè)撥動(dòng)開關(guān),而 16 位控制指令只有高 9 位有效, 低 7 位只有在賦立即數(shù)時(shí)有用到。 use 。 operate_out_16: out std_logic_vector(15 downto 0)