如何使用logisim.docx

上传人:b****6 文档编号:4103165 上传时间:2022-11-27 格式:DOCX 页数:16 大小:36.39KB
下载 相关 举报
如何使用logisim.docx_第1页
第1页 / 共16页
如何使用logisim.docx_第2页
第2页 / 共16页
如何使用logisim.docx_第3页
第3页 / 共16页
如何使用logisim.docx_第4页
第4页 / 共16页
如何使用logisim.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

如何使用logisim.docx

《如何使用logisim.docx》由会员分享,可在线阅读,更多相关《如何使用logisim.docx(16页珍藏版)》请在冰豆网上搜索。

如何使用logisim.docx

如何使用logisim

Logisim的简单入门之袁州冬雪创作

一,准备工作

参考:

罗老板的计算机布局与组成课程

MachineStructures.Spring2010,UCBerkeley

http:

//www-inst.eecs.berkeley.edu/~cs61c/sp10/

软件环境:

Logisim仿真软件(需要JAVA虚拟机)

http:

//ozark.hendrix.edu/~burch/logisim/

硬件环境:

PC机withWindowsXP

DE2开辟板(DE2DevelopmentandEducationBoardUserManual)

参考书:

关于QuartusII的使用教程

先来以一个与门电路的实验,来看一下基本的操纵,在Logisim中一个与门电路生成过程如下:

,添加一个与门到电路中.

按钮添加一个输入引脚,用于设置输入电平.

3.添加一个引脚,通过属性中设置Pin的属性为输出:

这样得到一个输出引脚

.

4.移动以上添加的元素,得到原理图:

注意选中

按钮,此时可以拖拽连线,那末我们把电路各部分毗连如下:

5.接下来通过选中

按钮便可以鼠标点击设定输入管脚上的电平为1或0了,输出引脚也会相应改变,输出成果.

当然通过左下方的属性设定,还可以设定当前选择元件的朝向,数据位数,输入端口数等参数.

这个工具,代替复杂的连线,在后面复杂设计的地方,让你从蜘蛛网一样的连线中摆脱出来,例如上面的电路可以这样暗示:

图中输入,与门模块,输出三部分布局分的很清晰,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,初始化RAM中数据

7,波形仿真工具

这里在学习一下使用QuartusII自带的波形仿真工具,新建一个VectorWaveformFile.

在图中位置右击,搜索添加Node和Bus,在InsertNodeorBus框中点击NodeFinder按钮,弹出NodeFinder框,点击List将所有输入输出节点列出,添加到SelectedNodes中,OK.

选中clk_button,点击工具栏的OverwriteClock,在Clock框中填好起始时间,竣事时间,时钟周期等参数,为其添加一个时钟输入.

在编译过整个工程后,如无错误,点击StartSimulation,片刻后,仿真波形输出出来,仿真成果如图,由于只是8位存储器,所以233后面的数成果会有问题,但是仿真成果与我们设计的电路所应得到的输出效果是一致的.

8,总结

这里我们学习了操纵MegaWizard添加megafunctions库中的复杂模块,学习了如何使用Node和Bus,以及如何使用节点标识取代直接连线,是原理图条理划分更加清楚,别的还有如何停止波形仿真,对设计停止有效验证,基本在Logisim中可以用到的常常使用功能在QuartusII设计工具中都能找到.会使用Logisim构建一个电路,相应使用QuartusII工具的原理图设计也不会有难度了,当然他们库中包含的模块还有些分歧,但一般罕见的尺度模块QuartusII都有,而是是我们在实际设计中会用到的尺度接口尺度功能的模块,要好好懂得熟悉他们的用法.

设计一个7段数码管的节制逻辑电路,用于节制数码管显示,后面他将作为一个子模块添加到我们的顶层设计中.

1,7段数码管译码电路

Hex

Seg(binary)

0x0

11000000

0x1

11111001

0x2

10100100

0x3

10110000

0x4

10011001

0x5

10010010

0x6

10000010

0x7

11111000

0x8

10000000

0x9

10010000

0xA

10001000

0xB

10000011

0xC

11000110

0xD

10100001

0xE

10000110

0xF

10001110

共阳极数码管编码表

有的同学可以看到真值表就开端画卡诺图了,呵呵,其实可以偷一点懒,看看图中这种实现.

通过使用选择器实现的这种译码电路,完成了一个真值表到电路的转换,而且实现布局清晰,可读性很好.

1,创建7段数码管的子电路

为设计好的数码管译码电路创建硬件描绘语言文件,点击File——>Create/Updata——>CreateHDLDesignFileforCurrentFile.

为设计好的数码管译码电路创建一个封装,点击File——>Create/Updata——>CreateSymbolFileforCurrentFile,这样我们在顶层设计中便可以调用这个子电路了.

2,把子电路应用到顶层设计中

添加刚才创建的子电路,点击Assignment——>Settings,在Settings对话框中的Libraries中添加刚佳人电路的目次,现在在Symbol中可以看到刚才创建的子电路模块了,我们再添加一个计数器,以及需要的输入输出引脚,完成我们的设计吧.

3,总结

这个例子主要是接洽子电路的创建以及如何将子电路应用到顶层设计中,在复杂设计中,分层设计的方法是必须要掌握的.

至此,QuartusII中的原理图设计的基本操纵方法就足够我们使用了,Logisim中所能完成的操纵,在QuartusII中都可以对应起来,所以建议后面的设计中,我们来参考课件中的使用Logisim设计简单CPU的方法,对应在QuartusII中实现一个真正的CPU.

由于Logisim是一个仿真软件,使用较QuartusII方便一些,可以先行做实验,然后再用QuartusII实现设计方案.

至此,我们要真正开端CPU设计了,前面的内容是给不熟悉QuartusII的同学热身用的.这里都是假定同学们已经熟悉了QuartusII基本操纵,会使用原理图设计方法设计电路,而且会使用MegaWizard添加尺度模块,会分层设计电路.

需要说明的是,我们选择使用原理图的设计方法,是思索与罗老板的课件相连系,可以对照Logisim的操纵,使同学们在学会使用Logisim软件仿真设计出一个CPU后,平滑的过度过来.别的原理图的设计更加直观一点,更容易入门.当然由于实际设计中主流的方式还是使用硬件设计语言,推荐大家懂得一下VerilogHDL,VHDL或SystemC等语言.

1,设计总揽

我们这里设计的是一个简单的16位处理器(即每个指令字长为16位,寄存器也是16位),该处理器有四个寄存器($r0到$r3).具有独立的数据和指令内存(即有两个内存,一个指令内存,一个数据内存).

需要注意的是由于器件的限制,也为了让事情更简单一些,我们以半字(16位)为单位对内存编址.这和MIPS分歧,MIPS指令是字长是32位,而内存是以字节(8位)为单位编址.

2,准备步调

第一步:

熟悉一下QuartusII的操纵,这个在前面我们已经完成了,对应于Logisim中操纵都先容到了,后面完成Proj3所需要的技术也都具有了(当然,想深入的懂得数字电路设计,可以需要更多),也就是说如果可以用Logisim完成Proj3,用QuartusII实现也不再话下.

第二步:

做一下相关的实验,懂得QuartusII下的一些模块和组件,如何建立简单模块,如何将简单模块构建到一起,成为复杂的模块,直至成为一个系统.MegaWizard中提供的是数字电路中罕见的尺度模块,我们的设计中要用到其中一些模块,所以熟悉他们,熟练应用是完成设计的前提.

3,阅读ISA

第三步:

阅读ISA

ISA(InstructionSetArchitecture)是硬件设计师跟软件设计师之间的协议,他规定了硬件设计师设计的CPU所需要具有的功能,以及软件设计师所可以使用的CPU指令.

设计一个CPU首先要设计一个ISA,之后才是软硬件设计:

软件设计师设计汇编器,编译器;硬件设计师设计CPU.我们需要的ISA在Proj3这里已经给出了,如下表:

通过查询opcode字段(高四位,即15-12位)的值,可知半字编码所对应的指令.注意,表中的opcode不到16个,而funct也不到8个.原因是指令少一些,使同学们更容易实现(呵呵,好象比教师上课讲的CPU指令数还是多了很多).

(如果需要更加细致的懂得原理,请认真学习罗老板课件中关于单指令周期CPU设计的这几节课的内容.)

我们可以懂得到需要实现的几个基本模块:

1,指令指针寄存器PC

2,指令存储器ROM

3,寄存器文件

4,ALU

5,内存单元

6,节制逻辑单元

一个大体的CPU的布局图:

4,总结

从分析成果来看,我们需要的实现的几个模块都在图中表示出来了,他们之间的关系也基本如上图所示,更详细的说明请参考罗老板的课件吧.

我们要设计中可以用到的库中的模块有以下几种,寄存器模块,RAM,ROM,算术以及逻辑运算单元比方加法器,移位,与或门等.

当然还有前面我们讲到的数据选择器,这个会在Controller中用到,别的在每个单元模块前做数据选择也会用到.

第四步:

制作一个寄存器组(也称寄存器文件)模块(组件).

1,输入与输出

根据前面设计总揽中得到的模块间的关系,设计出输入输出端口,包含rs,rt,rw,别的是rsBus,rtBus,当然还有使能节制,时钟,reset等.

2,寄存器

作为第一小步你可以先放四个寄存器,然后做出一个输出,即可选择四个寄存器中的任意一个的值输出.

注意:

用MegaWizard生成模块文件的时候,别忘了加一个后缀,因为这里都是子模块设计,后面要应用到顶层设计中去,为防止各个子模块设计中引入的尺度模块文件重名,推荐加一个子模块名字的后缀,例如lpm_dff_reg0,就暗示reg模块中引入的lpm_dff模块.

3,输入输出数据选择器

四个寄存器不克不及同时全部加到两个数据输出端口rsBus和rtBus上,rwBus一次也只能对一个寄存器写入,那末就需要相应的数据选择以及写使能节制.

4,整体设计

全部完成好的原理图如下:

各个部分之间的关系如布局框图:

5,总结

从设计一开端要养成杰出的绘图习惯,以布局清晰为原则,设计依照一定顺序完成,比方这里的顺序就是:

输入输出端口——>核心模块——>数据通路节制

别的将各部分功能用注释文字标好,方便阅读.

书接上回……

第四步:

制作一个ALU

输入输出端口

ALU的输入输出相对简单,输入是两个操纵数和一个操纵符,输出是计算成果.

各运算单元

为了节俭片上资源,加减法器使用一个,用一根选择线节制加或减,逻辑左右移位也是用一根选择线节制左右移.

数据通路选择

上面的各运算单元是并行工作的,对于输入的两个操纵数,几个运算单元都会计算成果,至于输出哪个,要通过后面的数据选择器来节制了.选择器的选择开关接的是操纵符,这样输出成果就是操纵数对应的操纵运算得到的的成果了.

第五步:

制作一个PC指针寄存器

4,PC指针寄存器

关于PC指针的操纵很多,有一般指令所需的PC+1操纵(这里是+1操纵,与课件中+4稍有分歧,因为我们后面设计ROM的时候按16位数据线设计,每个地址存储的是16位数据,那末PC+1就可以读取完整的一条指令),别的还有相对跳转需要的PC=(PC&0xF000)|address,beq和bne指令所需的PC=PC+1+offset.

设计模块要求模块完成的功能尽可以单一,模块的功能定义要清楚,上面跳转所需的address,断定所需的offset都是从指令中提取的,全部设计到PC寄存器模块中来,会使设计一下子变得复杂.在实现PC寄存器模块时,需要更多的外部信息,从而使顶层设计的修改会影响到子电路.所以PC寄存器就是由输入输出端口和一个寄存器组成,其余部分要放到节制逻辑和顶层设计中去.

5,总结

ALU暂时可以仅实现ADD,SUB,AND,OR以及移位,比较运算,将来再扩大更多功能.(对于各种运算单元有两种法子实现,其一是自己用基本的与或非门电路搭建,其二是直接使用QuartusII的MegaWizard库实现).

PC寄存器的实现也很简单,基本在前面的基础上,完成一个ALU和一个PC寄存器不会遇到任何坚苦,我们这里关注的是模块的划分,模块功能的定义,高内聚,低耦合的设计不只是软件设计中提倡的,这也是硬件设计中推荐的.

原来很多道理是相通的

数据存储在RAM里,程序存储在ROM里,这是大家常常听到的,那末怎么设计一个存储数据的RAM和一个存储程序的ROM呢?

这里我们就来亲手试验一下.

有一点要说明的QuartusII中提供的ROM和Logisim中提供的ROM模块有一点点分歧,他们相差一根时钟线,虽然只有这一点分歧,但却是很重要的一点,这就涉及到了一个组合逻辑实现的ROM与时序逻辑实现的ROM的区别.

这里给出了QuartusII中的两种实现方式,一种是用库中提供的模块,另外一种是组合逻辑的实现方式,关于二者的分歧毕竟会发生怎样的影响,后面我们再详细讨论.

第六步:

实现一个RAM

直接上图吧,基本操纵的问题未几叙述了,有问题的话请检查前面的学习或者参考QuartusII的教程.

第七步:

ROM的实现

用组合逻辑实现ROM的方法

用组合逻辑实现的ROM其实质是电路,如果感觉难以懂得,你可以认为你的程序就是一堆门电路按某种顺序摆列暗示出来的,而不是存在真正意义的存储器当中,我们写程序的时候其实是搭建了一个电路.

这里给出一种实现方法

这是一个16个字的16位ROM,是用选择器实现的(前面说过了选择器是个有用的好东西),

由于只有16个存储单元,所以4位地址就可以暗示出来,ROM中的内容就是接到选择器data0x到data15x上的数据,每次对ROM的编程写入,就是将综合的电路下载到FPGA实验板中.

2,用时序电路实现ROM

实际的ROM应该是可以在系统编程的,也就是说不改变电路布局,可以把程序写入ROM.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1