
仿真实验心得体会
篇一:multisim实验心得 现代电路实验心得 multisum是一款完整的设计工具系统,提供了一个非常大的呢原件数据库,并提供原理图输入接口﹑全部的数模spice仿真功能﹑Vhdl\\\/Verilog设计接口于仿真、Fpga\\\/cpld综合、eF设计能力和后处理功能,还可以进行从原理图到pcb布线工具包的无缝隙数据传输。
它提供的单一易用的图形输入接口可以满足用户的设计需求。
multisim提供全部先进的设计功能,满足用户从参数到产品的设计要求。
因为程序将原理图输入、仿真和可编程逻辑紧密集成,用户可以放心地进行设计工作,不必顾及不同供应商的应用程序之间传递数据时经常出现的问题。
本学期在现代电路课程实验中,在老师的指导下对multisim进行了初步的学习与认识,由对此款软件的一无所知,到渐渐熟悉,感到莫大欢喜。
本学期的学习也只是对multisim此款仿真软件的初步认识与学习。
在初步学习与认识的过程中,深深了解到multisun此款仿真软件是一款完整的设计工具,今后一定会在实训中将此款软件学习的更好,应用的更好。
本学期的上机实验中,主要应用了multisim此款软件的模电与数电的电路仿真,下面将从本学期的上机实验中总结本学期对multisim此款仿真软件的学习心得。
数电部分实验: 实验中通过阅读实验指导用书,及在老师的指导下,从打开multisum软件、建立文件、放置元器件、对元器件参数的修改编辑,按照实验原理图在multisim软件界面建立了第一个电路图,函数信号发生器实验原理图。
VHDL与Verilog在FPGA开发中的比较
硬件描述语言HDL(Hardware Describe Language) HDL 随着EDA的发展,使用硬件语言设计PLD\\\/FPGA成为趋势。
目主要的硬件描述语言是VHDL和Verilog HDL。
VHDL发展的较早,语法严格,而Verilog HDL是在C语言的基础上发展起来的一种硬件描述语言,语法较自由。
VHDL和Verilog HDL两者相比,VHDL的书写规则比Verilog烦琐一些,但verilog自由的语法也容易让少数初学者出错。
国外电子专业很多会在本科阶段教授VHDL,在研究生阶段教授verilog。
从国内来看,VHDL的参考书很多,便于查找资料,而Verilog HDL的参考书相对较少,这给学习Verilog HDL带来一些困难。
从EDA技术的发展上看,已出现用于CPLD\\\/FPGA设计的硬件C语言编译软件,虽然还不成熟,应用极少,但它有可能会成为继VHDL和Verilog之后,设计大规模CPLD\\\/FPGA的又一种手段。
选择VHDL还是verilog HDL
这是一个初学者最常见的问题。
其实两种语言的差别并不大,他们的描述能力也是类似的。
掌握其中一种语言以后,可以通过短期的学习,较快的学会另一种语言。
选择何种语言主要还是看周围人群的使用习惯,这样可以方便日后的学习交流。
当然,如果您是集成电路(ASIC)设计人员,则必须首先掌握verilog,因为在IC设计领域,90%以上的公司都是采用verilog进行IC设计。
对于PLD\\\/FPGA设计者而言,两种语言可以自由选择。
学习HDL的几点重要提示1.了解HDL的可综合性问题:HDL有两种用途:系统仿真和硬件实现。
如果程序只用于仿真,那么几乎所有的语法和编程方法都可以使用。
但如果我们的程序是用于硬件实现(例如:用于FPGA设计),那么我们就必须保证程序“可综合”(程序的功能可以用硬件电路实现)。
不可综合的HDL语句在软件综合时将被忽略或者报错。
我们应当牢记一点:“所有的HDL描述都可以用于仿真,但不是所有的HDL描述都能用硬件实现。
” 2. 用硬件电路设计思想来编写HDL:学好HDL的关键是充分理解HDL语句和硬件电路的关系。
编写HDL,就是在描述一个电路,我们写完一段程序以后,应当对生成的电路有一些大体上的了解, 而不能用纯软件的设计思路来编写硬件描述语言。
要做到这一点,需要我们多实践,多思考,多总结。
3.语法掌握贵在精,不在多30%的基本HDL语句就可以完成95%以上的电路设计,很多生僻的语句并不能被所有的综合软件所支持,在程序移植或者更换软件平台时,容易产生兼容性问题,也不利于其他人阅读和修改。
建议多用心钻研常用语句,理解这些语句的硬件含义,这比多掌握几个新语法要有用的多。
HDL与原理图输入法的关系 HDL和传统的原理图输入方法的关系就好比是高级语言和汇编语言的关系。
HDL的可移植性好,使用方便,但效率不如原理图;原理图输入的可控性好,效率高,比较直观,但设计大规模CPLD\\\/FPGA时显得很烦琐,移植性差。
在真正的PLD\\\/FPGA设计中,通常建议采用原理图和HDL结合的方法来设计,适合用原理图的地方就用原理图,适合用HDL的地方就用HDL,并没有强制的规定。
在最短的时间内,用自己最熟悉的工具设计出高效,稳定,符合设计要求的电路才是我们的最终目的。
HDL开发流程用VHDL\\\/VerilogHD语言开发PLD\\\/FPGA的完整流程为:1.文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。
通常VHDL文件保存为.vhd文件,Verilog文件保存为.v文件2.功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)3.逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和信号的连接关系。
逻辑综合软件会生成.edf(edif)的EDA工业标准文件。
4.布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到PLD\\\/FPGA内5.时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。
(也叫后仿真)6.编程下载:确认仿真无误后,将文件下载到芯片中通常以上过程可以都在PLD\\\/FPGA厂家提供的开发工具(如MAXPLUSII,Foundation,ISE)中完成,但许多集成的PLD开发软件只支持VHDL\\\/Verilog的子集,可能造成少数语法不能编译,如果采用专用HDL工具分开执行,效果会更好,否则这么多出售专用HDL开发工具的公司就没有存在的理由了。
VHDL如何实现延时
1。
VHDL中的delta延时大于零,但小于任何指定的延时(指定的延时包括after指定的惯性延时和transport指定的传输延时)。
因此,在一个确定的仿真时刻t,开启有限多个仿真周期(即一个delta延时)不会使仿真时刻向前推进,就是说不论有多少个delta延时,都认为是在t时刻。
为什么能够这样认为呢,请看2。
2。
在具体硬件中,进程是并行发生的,也就是说,数据总是不断的流进各个模块,模块间不会有先来后到。
因此在一个时刻t,会同时有多个事件发生。
但是仿真软件是在PC机上用C语言之类的串行机制实现的,所以就必须在串行机制下尽可能准确地仿真并行事件的发生。
怎么办呢,就出现了delta延时的模型。
在一个仿真周期(即一个delta延时)里,仿真器串行的处理各个事件,但我们把这个仿真周期看成一个整体认为这些事件宏观上是并行的。
既然是并行的,就理所当然地认为还是在t时刻了。
3。
一个process只要在时刻t它的敏感表中有事件发生,就开启一个仿真周期。
一个仿真周期里,可以同时有多个process被激活,就看敏感表中是不是有事件。
但是对于一个进程,不管它有多长,只要其中没有after 之类的具体时间延时,就认为需要花费一个delta延时完成,也就是说它的结果是在delta之后才更新的(可以理解成立刻算出来,但是等到delta之后才更新)。
如果它的输出在delta后更新完又触发了另外一个process,那么就再开一个仿真周期,再花费delta执行。
由1可知,不管开了多少个delta,都认为在时刻t并行发生。
但是注意,一旦哪个进程中有after了,就认为新值在after指定时间更新,不考虑delta。
4。
举个例子。
(i)下面两行在一个architecture中: Z <= X+Y;--(1) A <= Z+B;--(2) 这样两句话可以看成两个进程。
现在的时刻为t1,此时X变化了,好,激活了(1),开一个仿真周期,立即计算Z=X+Y,但是要等到delta延时后Z的值更新。
由于Z的值发生了变化,又激活了(2),好,再开一个仿真周期,算出A=Z+B,再等delta后A的值更新。
因此,无论(1)(2)先写谁,都是这样的过程,总共花费2delta(还属于ti时刻)。
(ii)上面我们假设了X变化时B没有变。
假如X变化时B也变化了,这时开一个仿真周期,在这个周期里(1)(2)同时被激活,Z和A的值同时计算(当然仿真器具体实现时有先后,但在delta内认为并行),等待delta后,Z和A同时更新,但一定要注意,这时的A值是利用Z更新前的值计算的。
之后,Z的变化再次激活(2),这时计算的A就是用更新后的Z了,但是要再等待delta,A值才更新为最后的结果。
和(i)对比,结果相同,时间花费也相同,都是2delta。
(iii)假如把(1)改成Z <= X+Y after 2ns,(2)不变,那么t1时刻X变化后,就认为在t1+2ns时刻Z值更新,不考虑delta延时。
之后,再过delta延时A值更新。
所以总花费变为delta+2ns. (iv)假如(1)(2)是在一个process中,那么情况是这样的。
由于在一个process里只开一个仿真周期,所以(1)(2)总是在一个delta里完成,因此无论(1)(2)先写谁,最终的A值是利用Z的旧值计算的,就会出现错误的结果。
这一点一定要注意。
这也是为什么在一个process里给一个信号多次赋值,只会得到最后一个赋值的结果。
因为每一次赋值都在等着delta时间结束才更新。
5。
总结一下,就是在一个进程中内部和有after的语句可以理解为不再单开仿真周期。
6。
再深究一下,信号赋值为什么要等待delta延时呢
2中说过,是由于要利用串行机制处理并行问题。
除此之外,还由于信号本身用途和特点所决定。
信号主要用于进程间通信,同时信号是需要驱动的,假如一个A进程需要读入 signal Z的值,B进程又在写入signal Z的值,那么仿真时就会有冲突。
通过引入delta延时,使得读写错开一段delta时间,解决了信号在进程间同时读写的问题。
7。
题外话,说明一下惯性延时和传输延时的区别。
惯性延时就是说使输出能够得到正确的值,输入需要保持多久。
比如 Z <= X after 2ns,说明X需要至少保持2ns,Z才会得到X的值,否则X的值可能被吃掉。
对应的物理情况是要给电容留够充放电时间,太短的脉冲就可能被吃掉了。
而传输延时没有吃不吃掉的问题,就是经过多长时间输入完全再现,不管脉冲多么短。
比如: Z<= transport X after 2ns,就是指X的值经过2ns后在Z端完全再现。
对应的物理情况就是传输线。
VHDL语言设计中并行语句与串行语句包含哪些语句
真谛就是超高速硬件设计,用在高速系统方面,非常有优势,要精通,就是多学多练,没有其他什么特殊办法。
VHDL编译问题
[转的]我是FPGA方面的新手, 刚学了VHDL,看了几本书, 在看的时候比较了各书的优缺点, 现在将我的体会奉献给还没入门的朋友们, 希望大家在选书方面少走弯路 - 对初学者来说, 选一本好书可以事半功倍.我总共买\\\/借了以下几本书:书1) VHDL硬件描述语言与数字逻辑电路设计(修订版), 西电出版社, 候伯亨书2) VHDL实用教程,电子科大出版社, 潘松书3) VHDL与数字电路设计, 科学出版社, 卢毅书4) VHDL入门\\\/解惑\\\/经典实例\\\/经验总结, 北航出版社, 黄任书评如下(个人意见, 仅供参考) :书1) 不敢妄评, 因为没看懂. 虽然这本书算是国内VHDL书中的名牌, 但是似乎并不适合初学者. 我自认理解能力还行, 可是这本书却让我觉得一头雾水, 而且其语言和书的结构都有点死板, 让我没有想往下读的感觉. 因为不推荐给初学者.书2) 好书. 适合作第二本书读. 用来入门的话, 门槛似乎过高. 但推荐各位初学者买一本备查.书3) 适合入门. 但是有些问题没讲明白, 特别是可综合与可仿真语句的区别等等. 书4) 我觉得此书是四本书当中最好的入门书, 最适合初学者. 下面是我看这本书的一些体会:首先, 这本书继承了卢毅那本书的易读性和循序渐进的教学手法. 正如作者在前言里说的虽然无法做到老妪能懂, 但对有一定数字设计基础的读者来说是浅显易懂的. 其次, 这本书所教授的, 全部是可综合的VHDL语句. 这对我这种主要用VHDL开发FPGA的读者来说, 真是最适合不过了. **但对那些想用VHDL进行高阶建模的人来说, 可能并不合适**. 而且它有整整一章(虽然不过10页)对VHDL的可综合性进行讨论, 这章是一个十分有有益的总结, 至少让我搞清楚了不少之前在FPGA开发中遇到的问题. 第三, 这本书实例相当多, 而且都实际可综合! (我试着输入一个比较大的程序, 居然一次编译通过, 没有错误! 很多书上的程序都是不可直接运行的, 本书是个例外, 难能可贵)最后, 这本书是这四本书里最便宜的.^_^ (俺是穷学生, 其它的书都是借的, 只买得起这本书). 综上所述, 我郑重向初学者推荐两本书:第一本: VHDL入门\\\/解惑\\\/经典实例\\\/经验总结(黄任)第二本: VHDL 实用教程(潘松)只此二书, 即可入门. 至于入门后, 想要提升到中级或是高级的水平, 我想恐怕只有多做实际的系统了. 因为我自认没到中级水平, 所以没资格向各位推荐书籍.
用vhdl语言设计一个全加器
1位二进制全加器:先做一个底层设计:library ieee;use ieee.std_logic_1164.all;entity or2a isport(a,b:in std_logic;c:out std_logic):end;architecture one of or2a isbeginc<=a or b;end;然后是顶层设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY f_adder IS PORT ( ain,bin,cin :IN STD_LOGIC; cout, sum :OUT STD_LOGIC);END ENTITY f_adder;ARCHITECTURE fa1 OF f_adder ISCOMPONENT h_adder PORT (a,b:IN STD_LOGIC; co,so :OUT STD_LOGIC);END COMPONENT ;COMPONENT or2a PORT (a,b: IN STD_LOGIC; c: OUT STD_LOGIC);END COMPONENT ;SIGNAL d,e,f :STD_LOGIC ; BEGIN u1 : h_adder PORT MAP (a=>ain,b=>bin,co=>d,so=>e) ; u2 : h_adder PORT MAP (a=>e,b=>cin,co=>f,so=>sum) ; u3 : or2a PORT MAP (a=>d,b=>f,c=>cout) ;END ARCHITECTURE fa1;注意元件例化,要打包底层设计



