1、VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。1、设计任务用VHDL设计一个简单的处理器,并完成相关的仿真测试。 2、设计说明2.1 处理器原理图及其组成图1是一个处理器的原理图,它包含了一定数量的寄存器、一个复用器、一个加法/减法器(Addsub),一个计数器和一个控制单元。图1 简单处理器的电路图2.2数据传输及加减法的实现数据传输实现过程:16位数据从DIN输入到系统中,可以通过复用器分配给R0R
2、7和A,复用器也允许数据从一个寄存器传通过Bus送到另外一个寄存器。加法和减法的实现过程:复用器先将一个数据通过总线放到寄存器A中,然后将另一个数据放到总线上,加法/减法器对这两个数据进行运算,运算结果存入寄存器G中,G中的数据又可根据要求通过复用器转存到其他寄存器中。2.3处理器所支持的指令及功能说明、指令的编码规则表1是该处理所支持的指令表1 操作功能说明mv Rx, RyRx Ry将 Ry 寄存器的值复制到 Rx 寄存器mvi Rx, #DRx Data将 Data 值 存入 Rx寄存器add Rx, RyRx Rx + Ry先将 Rx 和 Ry寄存器的值相加,再把相加的值存入 Rx寄存
3、器sub Rx, RyRx Rx - Ry先将 Rx 和 Ry 寄存器的值相减,再把相减的值存入 Rx 寄存器所有指令都按9位编码(取自DIN的高9位)存储在指令寄存器IR中,编码规则为IIIXXXYYY,III表示指令,XXX表示Rx寄存器,YYY表示Ry寄存器。立即数#D是在mvi指令存储到IR中之后,通过16位DIN输入的。如表2所示表22.4指令执行的时序控制有一些指令,如加法指令和减法指令,需要在总线上多次传输数据,因此需要多个时钟周期才能完成。控制单元使用了一个两位计数器来区分这些指令执行的每一个阶段。当Run信号置位时,处理器开始执行DIN输入的指令。当指令执行结束后,Done信
4、号置位,表3列出四个指令在执行过程中每一个时间段置位的控制信号。图2列出了处理器的状态转换图表3: 时间指令T0T1T2T3(mv):I0(mvi):I1(add):I2(sub):I3IRinRYout,RXin,DoneDINout,RXin,DoneRXout,Ain-RYout,Gin,AddsubGout,RXin,Done图2,处理器状态转换图3.处理器指令实现的功能及其具体描述3.1 mv Rx,Ry实现的功能:将寄存器Rx的值赋给寄存器Ry(以mv R0, R5为例)(1 )计数器为“00”时,指令寄存器的置位控制信号输入端IRin=1有效,将DIN输入的数据的高9位锁存。置位
5、的控制信号如图3加粗黑线所示。图3(2)计数器为“01”时,首先控制单元根据设计器为“00”时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R5的值输出到总线上,然后控制单元控制寄存器R0将总线上的值锁存,完成整个寄存器对寄存器的赋值过程。置位的控制信号和数据流如图4加粗黑线所示。图43.2 mvi Rx,#D将的立即数#D赋给寄存器Rx(以mv R0, #D为例)(1)计数器为“00”时,指令寄存器的置位控制信号输入端IRin=1有效,将DIN输入的数据的高9位锁存。置位的控制信号如图5加粗黑线所示。图5(2)计数器为“01”时,首先控制单元根据设计器为“00”时输入的指令,向
6、复用器发出选通控制信号,复用器根据该控制信号让DIN的值输出到总线上,然后控制单元控制寄存器R0将总线上的值锁存,完成整个立即数对寄存器的赋值过程。置位的控制信号和数据流如图6加粗黑线所示。图63.3 add Rx,Ry和sub Rx,Ry将寄存器Ry的值加上/减去寄存器Rx的值并赋给寄存器Rx(以add/sub R0,R1为例)。置位的控制信号如图7加粗黑线所示。图7(2)计数器为“01”时,首先控制单元根据设计器为“00”时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R0的值输出到总线上,然后控制单元控制寄存器A将总线上的值锁存。置位的控制信号和数据流如图8加粗黑线所示。图
7、8(3)计数器为“10”时,首先控制单元根据设计器为“00”时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R1的值输出到总线上,然后控制单元控制加法/减法器addsub将寄存器A的值和总线上的值相加/相减并输出,接着寄存器G将加法/减法器addsub的计算结果锁存。置位的控制信号和数据流如图9加粗黑线所示。图9(4)计数器为“11”时,首先控制单元向复用器发出选通控制信号,复用器根据该控制信号让寄存器G的值输出到总线上,寄存器R0将总线上的值进行锁存,完成整个寄存器与对寄存器见加减法的运算过程。置位的控制信号和数据流如图10加粗黑线所示。图104单元模块设计说明、VHDL代码及
8、其仿真4.1寄存器RX寄存器R0R7用于数据的存储。当时钟输入clock的上升沿到来且RXin=1时,将数据输入端datain15.0的数据锁存到寄存器中并从数据输出端dataout15.0输出;当RXin=0时,输出端保持原来的值不变。图11寄存器RX的VHDL代码:library ieee;use ieee.std_logic_1164.all;entity RX isport(RXin,clock : in std_logic;datain :in std_logic_vector(15 downto 0);dataout:out std_logic_vector(15 downto 0
9、) );end RX;architecture behave of RX is signal databuffer:std_logic_vector(15 downto 0);beginprocess(clock,RXin,datain,databuffer)if (clockevent and clock=1) then if (RXin=) then databuffer=datain; else databuffer=databuffer;end if;else databufferdataout01101100不断循环;当clear=1时(清零端clear有效),对输出Q1.0异步清零
10、,与时钟无关。图16计数器upcount的VHDL代码use ieee.std_logic_signed.all;entity upcount isport(clear, clock : Q : out std_logic_vector(1 downto 0);end upcount;architecture Behavior of upcount issignal count : std_logic_vector(1 downto 0);process (Clock)if clear= then -clear= clear is effectivecount = 00;else count=
11、 count+1;Q=count;end Behavior;4.7 复用器multi复用器根据控制单元的控制信号将指定的输入数据输出到总线上。来自控制单元的控制信号为R0outR7out、Gout、DINout,输入数据位来自寄存器R0R7、寄存器A、数据输入端DIN,当控制信号的某一位为1时,将其对应的输入数据输出到总线上。图17复用器multi的VHDL代码entity multi isR0in :R1in :R2in :R3in :R4in :R5in :R6in :R7in :DIN :Gin :R0out :in std_logic;R1out :R2out :R3out :R4ou
12、t :R5out :R6out :R7out :Gout :DINout :buswire:buffer std_logic_vector(15 downto 0) end multi;architecture behave of multi is signal select_signal:std_logic_vector(9 downto 0);select_signaldatabuffernull;end case;buswire4.8 控制单元control控制单元根据计数器发出的脉冲和DIN输入的操作指令对整个系统的其他模块进行控制,完成指定的操作。图18控制单元control的VHDL代码use ieee
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1