如何使用logisim文档格式.doc
《如何使用logisim文档格式.doc》由会员分享,可在线阅读,更多相关《如何使用logisim文档格式.doc(35页珍藏版)》请在冰豆网上搜索。
![如何使用logisim文档格式.doc](https://file1.bdocx.com/fileroot1/2022-10/2/465f9fb5-77cc-43b6-a299-587461b59a4b/465f9fb5-77cc-43b6-a299-587461b59a4b1.gif)
硬件环境:
PC机withWindowsXP
DE2开发板(DE2DevelopmentandEducationBoardUserManual)
参考书:
Computer.Organization.and.Design
关于QuartusII的使用教程
先来以一个与门电路的实验,来看一下基本的操作,在Logisim中一个与门电路生成过程如下:
1.按与门的选择按钮,添加一个与门到电路中。
2.使用按钮添加一个输入引脚,用于设置输入电平。
3.添加一个引脚,通过属性中设置Pin的属性为输出:
这样得到一个输出引脚。
4.移动以上添加的元素,得到原理图:
注意选中按钮,此时可以拖拽连线,那么我们把电路各部分连接如下:
5.接下来通过选中按钮就可以鼠标点击设定输入管脚上的电平为1或0了,输出引脚也会相应改变,输出结果。
当然通过左下方的属性设定,还可以设定当前选择元件的朝向,数据位数,输入端口数等参数。
6.另外推荐大家后面设计的时候使用一下tunnel这个工具,代替复杂的连线,在后面复杂设计的地方,让你从蜘蛛网一样的连线中解脱出来,例如上面的电路可以这样表示:
图中输入,与门模块,输出三部分结构分的很清晰,tunnel的使用使我们的电路设计更加规范,类似logisim中的tunnel工具在其他原理图工具中类似的工具是经常见到的,虽然名字会有不同,用途是一样的。
7.最后是子电路添加方法,选择Project--->
AddCircuit…,如下图“:
子电路的绘制与上面基本相同,注意的是输入输出引脚要连接Pin引脚,并设定好输入输出属性。
右击子电路选择EditCircuitAppearance可以调整子电路的外观,通过拖拽将外观调整好,后面加到上层电路设计中的时候就不会显得布线拥挤了。
显然上面的要比下面的元件效果好一些。
以上描述的这些技巧与绘制规范整齐的原理图是关系密切的,后面实际应用中设计复杂电路时会突出显现出来。
几个关键的地方:
1,请尽量使用标准模块,如果需要建立自己的模块,请学习标准模块的设计风格。
2,请合理划分层次,清楚定义输入输出端口,尽量使定义的风格和规范保持一致。
3,请使用网络标识代替直接连线,会使你的原理图更加清晰易读。
4,为每个模块设计测试用例,用于测试和说明其使用方法。
5,这里用的软件比罗老板课上用的版本高一点,操作有细微差别。
打开QuartusII软件,程序主界面如下:
1,新建一个工程
点击File——>
NewProjectWizard,打开创建新工程向导,这里你将完成工程的基本设定选项。
1,Projectnameanddirectory——工程的名称与目录
2,Nameofthetop-leveldesignentity——顶层设计实体的名称
3,Projectfilesandlibraries——项目文件与库
4,Targetdevicefamilyanddevice——目标设备的族类
5,EDAtoolsettings——EDA工具设定
这里一般设定好工程名称和目录,顶层设计实体名称以及目标设备族类就可以了,其他的暂时直接使用默认项就可以了。
2,新建一个设计文件
通过点击File——>
New打开新建文件选择框,由于我们这里使用原理图描述实现的,则文件类型选择DesignFiles——>
BlockDiagram/SchematicFile,就新建了一个原理图文件,将其保存起来,注意命名要跟前面设置的顶层设计实体名称相同。
3,编写设计文件
接下来开始在文件中绘制原理图,这里首先完成与门的添加,点击左侧工具栏中的SymbolTool按钮,打开Symbol选择框,选择primitives——>
logic——>
and2,点击OK后即可在原理图中添加一个2输入的与门了。
在同样通过SymbolTool中的加入和primitives——>
pin——>
output加入输入和输出引脚,然后在原理图中把他们用OrthogonalNodeTool即导线连接起来,双击输入输出引脚,为他们设定好名字,pinA,pinB,pinC,就完成了原理图中的设计。
4,编译(分析综合)
点击Processing——>
Start——>
StartAnalysis&
Synthesis,进行分析综合,就好像是对程序进行编译,等待片刻,如果没有错误,编译报告会输出出来。
5,配置管脚
接下来配置管脚,就是设定刚才加入的输入输出管脚与实验板上FPGA芯片外部引脚之间的对应关系,设定好这个,我们设计的与门电路才能通过FPGA外部引脚与实验板上的其他设备连接起来,我们才好观察到电路的设计效果。
点击Assignment——>
Pins,打开PinPlanner设定框,这里查看实验板的说明文件,我们使用两个拨动开关来连接输入引脚,用一个led灯来连接输出引脚,对照说明中的表格,为pinA,pinB,pinC分配PIN_N25,PIN_N26和PIN_AE23,设定好后点击Assignment——>
Device进入设定框,点击DeviceandPinOptions按钮,在DeviceandPinOption框中的UnusedPins标签下将Reserveallunusedpins设定为Asoutputdrivingground。
因为我们的设计最终会以电路的表达形式工作,错误的设计极其容易导致实验板的损坏。
6,下载程序
当然我们实际设计中可能会用到波形仿真工具进行验证,进行时间分析验证,甚至要设定布局布线等工作,反复迭代修正,才能完成一个复杂电路的设计,不过这里这个与门的demo很简单,完成以上设计工作后,可以开始编译了,点击Processing——>
StartCompilation开始吧。
如果没有错误,输出编译报告,就可以准备下载到实验板上去了。
点击Tool——>
Programmer,打开下载工具。
这里我们选择使用JTAG的下载方式,注意先给实验板上电,点击Start开始,等待片刻,走完下载进度条,下载完成。
7,完成
现在你可以在实验板上通过SW0和SW1来设定与门的输入了,实验板上的LEDR0相应的亮或者灭。
我们实现的与门在哪呢?
就在你面前实验板的芯片中,实际上实验板的芯片中有很多电路单元,通过我们的编程选择我们需要的电路单元用连线连接起来,在通过配置引脚连接到FPGA芯片的外部引脚上,FPGA是焊接在PCB板上的,PCB板上的铜线把FPGA引脚与外部设备比如开关,发光二极管等连接起来,我们的电路就真正的连接到了这个系统当中了。
他们之间的连接关系在图中表示出来。
8,总结
经过了这么多繁杂的步骤,我们仅仅完成的是一个简单的与门电路,好在通过这个过程我们只是了解一下FPGA设计的基本过程与简单操作,熟悉了这个流程,以上步骤还是很清楚的,而且实现一个复杂的设计也基本是沿这个过程走的。
后面我们用FPGA实现一个CPU也可以这样下载到FPGA芯片当中,这可是一个真正的电路,真正工作的CPU,麻雀虽小五脏俱全,不再是仅仅在电脑上仿真了,你必然会满心欢喜。
而且实际中,这样的设计(当然还有一些其他的工作要做),是能够送到工厂中去生产真正的ASIC专用电路,也就是真正的,我们能摸到能使用的CPU,会有这样的一天。
1,使用MegaWizard添加一个RAM模块。
RAM模块属于原理图设计中一个较为复杂的模块,并非如一个简单的二输入与门那样直接添加就可以了,还有一些参数需要配置和设定。
在QuartusII中添加一个类似RAM的复杂模块需要用到MegaWizard,通过使用MegaWizard添加一个RAM模块,可以了解如何用MegaWizard为库提供的模块配置参数。
依然是使用Symboltool打开添加模块对话框,MagaWizard的模块多数在megafunctions目录下,我们使用的是megafunctions——>
storage——>
lpm_ram_dq,勾选上LaunchMegaWizardPlug-In,OK,打开MegaWizardPlug-InManager,选择为库文件生成的文件类型,有AHDL语言,VHDL语言和VerilogHDL语言三种选择,根据需要和自己对他们的熟悉程度选择,设定为其生成的目录文件,建议生成到工程所在目录下,并在其名称基础上加上些有意义的后缀。
接下来是关于模块具体参数的设定,不同的模块会有所不同,这里请先按照图中的配置方式选择,使用8位容量32个字的RAM,不带有输出口寄存功能。
为了让RAM有一个初始值,我们要为其写个初始化数据文件,下面选中Yes,usethisfileforthememorycontentdata,并设定好文件路径名称。
下一步是生成文件的清单,最后Finish将生成模块添加到设计文件中。
2,添加总线与提取总线上一位数据的方法。
以上是通过MegaWizard添加模块的方法,用相同的方法,我们可以添加lpm_add_sub模块。
本例中涉及到的就是以上两种模块,通过联系和实践,可以测试试验一下其他的模块。
接下来添加输入输出引脚,这个前面介绍过,这里有点不同的是,输出引脚是8位的,这个在命名的时候后面加上[7..0]就表示是个8位的输出,例如fib_res[7..0],如果要用到其中一位就是名字加上下方括号跟标号,例如fib_res[5]。
3,用手动按钮作为时钟信号测试。
实验板上的时钟太快了,不利于我们观察,那就用仿真时学的办法,加一个输入按钮,模拟时钟,按一下,时钟跳一下,于是加了一个输入引脚,用于连接实验板上的按钮开关。
输入引脚后面要加一个非门,因为实验板上松开按钮时候输入是高电平,所以用一个非门也就是反相器来取反向。
需要指出的是,用手动按钮做时钟信号来测试是一个权宜的方法,实际的设计中是不推荐的,包括组合电路的输出用做时钟信号都是不好的设计习惯,因为时序电路工作的时钟要求波形稳定,组合逻辑电路中产生波形的毛刺对其工作影响较大,造成错误的数据或不可预测的结果。
4,常量的加入。
由于加入的ram模块至少含有32个字的存储,只需用到其中一个,地址线置零就可以了,每次时钟来临都进行写入操作,那么写入使能始终设为Enable。
那么这些常量该怎么设定呢?
在原理图设计中,有GND和VCC两个常量,分别代表逻辑1和逻辑0,将他们引入到电路中就可以了,多位数据合并到一条总线上是将各位数据用逗号隔开,添加到总线命名中。
5,让你的电路更加清晰。
前面介绍到,当电路规模愈加复杂时,将各模块直接连接到一起会严重影响其清晰美观,那么推荐的方式是采用网络标识的形式,也可以为GND,VCC添加一个网络标识,把他们改名为b1和b0如图,那么内存地址我们可以写为b0,b0,b0,b0,b0。
再把上图整理一下,看看效果是否好一点了。
6,初始化R