您好,欢迎来到爱够旅游网。
搜索
您的当前位置:首页[整理]verilog处理器设计.

[整理]verilog处理器设计.

来源:爱够旅游网
-------------

实验练习 9

图1展示了一个数字系统,它包含了一16位的寄存器,一个多路转换器,一个加法器/减法器单元,一个计数器和一个控制单元。数据是通过16位的DIN输入口输入到系统中的。此数据可以通过16位宽的多路转换器被加载到各种寄存器如R0,……R7和A中。多路转换器还可以将数据从一个寄存器中转移到另一个寄存器中。在图中,多路转换器的输出线被称为总线,因为这个术语通常用于布线,使数据可以在一个系统中从一个位置传送到另一个。【通过使用多路转换器,可以首先将一个16位的数据放在总线上,并把这个数据加载到寄 存器A中进行加法或减法的运算。这样做好之后,第二个16位的数据也被放置在总线上,加法器/减法器单元就可以执行所要求的操作,并把结果保存在寄存器G中。】(第一个操作数经总线到达寄存器A中,第二个操作数在总线上,此时加法减法单元进行运算,将结果放置在寄存器G中。)

由控制单元控制下,该系统可以在每个时钟周期内执行不同的操作。当特定的数据被放置在总线上后,由控制单元决定哪一个寄存器来装载这个数据。例如,若控制器断言R0out和Ain的信号,多路复用器将把寄存器R0out中的内容放置到总线上,而这个数据将在下一个有效时钟边沿被送入寄存器A。

表一 在处理器中执行的指令

每条指令都可以用9位IIIXXXYYY的格式编码并存储在IR寄存器中,其中III表示指令,XXX给出了RX寄存器而YYY给出了RY寄存器。尽管四条指令的编码只需要两个位,我们还是使用了3位,因为在本练习的后面部分,一些其他的指令将被添加到处理器中。【因此,IR在16位的DIN输入中具有9位的连接】(这句翻译的不好,见图理解),如图1中所示。【对于mvi指令来说,YYY字段是没有意义的,并且在mvi指令被存储到IR后,立即数#D必须由16位的DIN输入口提供。】(即mvi指令中,立即数D不需要被放置在寄存器中,可以直接从16位DIN输入进行运算处理。)

一些如加法和减法等的指令,需要一个以上的时钟周期来完成,因为多个数据的传输必须通过总线。控制单元使用了如图1所示两位的计数器,是的这些指令可以单步执行。当输入运行信号时(Run input),处理器开始执行DIN输入的指令;当指令执行完毕后,处理器将输出完成信号。【表2表示了表1中每条指令执行的每个时间步长控制器发出的信号。】(即表2中可以看到表1中的那些指令,每个时钟周期执行完后,处理器发出的信号,是否完成?进行加法运算?以及一共需要几个时钟周期。)需要注意的事,唯一的控制信号断言在时间步长0的是IRin,所以其当前的时间步长没有在表中显示出来。

-------------

-------------

表2 每个指令/时钟步长的控制信号

第一部分:

使用以下的Verilog代码设计和实施图1所示的处理器: 1、为这个练习新建一个Quartus II工程。

2、生成所需的Verilog文件添加到工程中,并对电路进行编译。图2a是Verilog代码的参考框架,图2b是一些可应用与这个代码中的子电路模块。

3、使用功能仿真以验证代码的正确性。图3是一个经过功能仿真的设计正确的电路产生的输出的例子。这表明数据(2000)16下标从DIN被装入IR的时间为30ns。此模式代表指令mvi R0,#D中,D=5的值在时钟边沿上被装入R0所需时间为50ns。模拟仿真显示,指令mv R1,R0耗时90 ns,指令add R0,R1耗时110ns,指令sub R0,R0耗时190ns。需要注意的是,模拟结果显示DIN是一个4位的16进制数而IR的内容是一个3位的8进制数。

4、新建一个Quartus ii工程,该工程将被用于电路在Altera DE2板上的执行。这个项目应该包含一个顶层模块,它包含适当的用于Altera开发板的输入和输出端口。在这个顶层模块中实例化你的处理器。用开关SW15-0来模拟DIN的输入,用开关SW17表示控制运行信号(Run input)。此外,按钮KEY0用于复位,KEY1用于控制时钟。将处理器总线连接在LEDR15-0上,讲完成信号接在LEDR17上。

5、在工程中添加与DE2板相关的引脚文件。编译电路并下载到FPGA芯片中。

6、通过切换开关和观察LED等的亮灭来测试设计的功能。由于处理器的时钟输入由按钮开关控制,可以通过单步执行来观察电路的状态。

-------------

-------------

-------------

-------------

图2a Verilog代码框架

-------------

-------------

-------------

-------------

图 2b 子电路模块

图 3 处理器仿真

第二部分

在这部分中你需要设计如图4中所示的电路,其中的存储器模块和计数器将被连接到第一部分你所设计的处理器上。计数器用于读取存储器中连续地址中存放的内容,并将该数据作为一个流的指令提供给处理器。为了简化这个电路的设计和测试,我们为处理器和内存使用不同的的的时钟的信号PClock和MClock。

-------------

-------------

图4处理器与一个存储器和计数器的连接

1、新建一个Quartus ii的工程,用于测试电路。

2、生成一个包含处理器,寄存器和计数器的顶层我Verilog文件。使用Quartus II MegaWizard插件管理工具从Altera库创建内存模块和参数化模块(LPMS)。在存储目录下找到正确的LPM,称为ALTSYNCRAM。按照指令所提供的向导来创建一个16位宽的读数据端口和32字深(32 words deep)的存储器。图5是向导的第一个界面。由于这个内存仅具有一个读端口,并没有写端口,它被称为一个同步的只读存储器(同步ROM)。请注意,存储器包括一个用于同步加载地址的寄存器。【由于Cyclone II FPGA上内存资源的设计,这个存储器是必需的,同时也导致了设计要中包含这个地址的时钟。】(这句话翻译的不好,理解原文This register is required due to the design of the memory resources on the Cyclone II FPGA; account for the clocking of this address register in your design.)为了将处理器指令放置到存储器中,你需要指定初始值,而当你的电路被编程到FPGA芯片上时,这个初始值需要就存储在存储器中。这样就可以告诉向导使用存储器初始化文件(MIF)的内容来初始化你的存储器。图6是MegaWizard插件管理器工具的相应界面的屏幕显示。我们已经指定了一个名叫inst mem.mif的文件,这个必须创建在一个已包含在Quartus II工程的目录中。使用Quartus II的在线帮助,以了解MIF文件的格式并创建一个有足够处理器指令的文件来测试你的电路。

3、使用功能仿真测试电路。确保数据已从ROM中被正确读出并且能够被处理器执行。 4、确保工程中含有必要的端口名称和引脚位置文件使得电路能够在DE2板上执行。用开关SW17来发出处理器的开始信号(Run input),KEY0用于复位,KEY1用于MCclock,KEY2用于PCclock。处理器总线连在LEDR15-0上,完成信号连在LED17上。

5、编译电路并且下载到FPGA芯片上。 6、通过转换开关和观察LED测试你设计的功能。由于由按钮开关控制电路的时钟输入,很容易通过指令的单步执行观察的电路的状态。

-------------

-------------

图 5 ALTSYNCRAM 配置

图 6 指定内存初始化文件(MIF)

增强型处理器

增强处理器的性能是可行的,所以我们不再需要图4中的计数器,因为增强型处理器通过利用存储器或其他器件可以实现读和写的功能。这些增强涉及添加新的指令到处理器和处理器执行程序,因此设计更为复杂。由于这些步骤是逻辑设计课程的范围之外,因此我们在下一个练习中讨论这个设计。 -------------

-------------

-------------

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务