学习心得——《eda技术实用教程》本学期对《eda技术实用教程--vhdl版》的学习为我的专业知识学习打开了一个全新的窗口——微电子技术领域。
对eda技术,我更是有了全新的认识。
微电子技术的进步主要表现在大规模集成电路加工技术即半导体工艺技术的发展上,使得表征半导体工艺水平的线宽已经达到了纳米级。
所以,集成电路设计正在不断地向超大规模、极低功耗和超高速的方向发展。
而现代电子设计技术的核心已日趋转向基于计算机的电子设计自动化技术,即eda技术。
eda技术就是依赖功能强大的计算机,在eda工具软件平台上,对以硬件描述语言hdl为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
eda技术使得设计者的工作仅限于利用软件的方式,即利用硬件描述语言和eda软件来完成对系统硬件功能的实现,这是电子设计技术的一个巨大进步。
eda技术在进入21世纪后,得到了更大的发展。
嵌入式处理器软核的成熟,使得sopc 步入大规模应用阶段。
电子技术领域全方位融入eda技术,除了日益成熟的数字技术外,传统的电路系统设计建模理念发生了重大的变化。
同时,eda使得电子领域各学科的界限更加模糊,更加互为包容。
这些都利于设计人员利用eda技术进行电子系统设计,如全定制或半定制asic设计,fpga/cpld开发应用和印制电路板。
从eda技术的特点不难看出,相比于传统的数字电子系统或ic设计,eda技术拥有独特的优势。
在传统的数字电子系统或ic设计中,手工设计占了较大的比例。
因此,也存在很多缺点。
例如:复杂电路的设计、调试十分困难;由于无法进行硬件系统仿真,如果某一过程存在错误,查找和修改十分不便;设计过程中产生大量文档,不易管理;可移植性差等。
相比之下,eda技术有很大不同。
它运用hdl对数字系统进行抽象的行为与功能描述到具体的内部线路结构描述,从而可以在电子设计的各个阶段、各个层次进行计算机模拟验证,保证设计过程的正确性,可以大大降低设计成本,缩短设计周期。
由于有各类库的支持,能够完成各种自动设计过程。
它极大地简化了设计文档的管理,逻辑设计仿真测试技术也日益强大。
vhdl在现在的eda设计中使用最多,也拥有几乎所有主流eda工具的支持。
vhdl作为一个规范语言和建模语言,不仅可以作为系统模拟的建模工具,而且可以作为电路系统的设计工具,可以利用软件工具将vhdl源码自动地转化为文本方式表达的基本逻辑元件连接图,即网表文件。
这种方法显然对于电路自动设计是一个极大的推进。
它具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。
eda技术良好的可移植性与可测试性,将所有设计环节纳入统一的自顶向下的设计方案中。
它不但在整个设计流程上充分利用计算机的自动设计能力、在各个设计层次上利用计算机完成不同内容的仿真模拟,而且在系统板设计结束后仍可利用计算机对硬件系统进行完整的测试。
书中通过大量的图示对pld硬件特性与编程技术进行了形象的讲解,不仅融合了之前学习的关于电路设计的知识还将eda的技术加入其中。
对vhdl语言的详尽讲解更是让我深刻理解了vhdl语言的编程原理。
由于本门课程是一门硬件学习课程,所以实验必不可少。
通过课程最后实验,我体会一些vhdl语言相对于其他编程语言的特点。
相对于其它计算机语言的学习,如 c 或汇编语言,vhdl 具有明显的特点。
这不仅仅是由于vhdl 作为一种硬件描述语言的学习需要了解较多的数字逻辑方面的硬件电路知识,包括目标芯片基本结构方面的知识更重要的是由于vhdl 描述的对象始终是客观的电路系统。
由于电路系统内部的子系统乃至部分元器件的工作状态和工作方式可以是相互独立、互不相关的,也可以是互为因果的。
这表明,在任一时刻,电路系统可以有许多相关和不相关的事件同时并行发生。
例如可以在多个独立的模块中同时入行不同方式的数据交换和控制信号传输,这种并行工作方式是任何一种基于cpu 的软件程序语言所无法描绘和实现的。
传统的软件编程语言只能根据cpu 的工作方式,以排队式指令的形式来对特定的事件和信息进行控制或接收。
在cpu 工作的任一时间段内只能完成一种操作。
因此,任何复杂的程序在一个单cpu的计算机中的运行,永远是单向和一维的。
因而程序设计者也几乎只需以一维的思维模式就可以编程和工作了。
vhdl 虽然也含有类似于软件编程语言的顺序描述语句结构,但其工作方式是完全不同的。
软件语言的语句是根据cpu 的顺序控制信号,按时钟节拍对应的指令周期节拍逐条运行的,每运行一条指令都有确定的执行周期。
但vhdl 则不同,从表面上观,vhdl 的顺序语句与软件语句有相同的行为描述方式,但在标准的仿真执行中有很大的区别。
vhdl 的语言描述只是综合器赖以构成硬件结构的一种依据,但进程语句结构中的顺序语句的执行方式决非是按时钟节拍运行的。
实际情况是其中的每一条语句的执行时间几乎是0 (但该语句的运行时间却不一定为0),即1000 条顺序语句与10条顺序语句的执行时间是相同的。
在此,语句的运行和执行具有不同的概念(在软件语言中,它们的概念是相同),的执行是指启动一条语句,允许它运行一次,而运行就是指该语句完成其设定的功能。
通过实验,我认识到理论要与实际结合,培养动手动脑能力的重要性,做事情要抱着一丝不苟的态度,这样才能做好事情。
同时也入一步了解到eda的强大之处,硬件电路的优秀的地方,对硬件方面更感兴趣了。
这门课程的学习,为我以后的专业知识的学习打下了良好的基础。
篇二:vhdl 编程的一些心得体会vhdl 编程的一些心得体会(转) vhdl 是由美国国防部为描述电子电路所开发的一种语言,其全称为(very high speedintegrated circuit) hardware description language。
与另外一门硬件描述语言 veriloghdl 相比,vhdl 更善于描述高层的一些设计,包括系统级(算法、数据通路、控制)和行为级(寄存器传输级),而且 vhdl 具有设计重用、大型设计能力、可读性强、易于编译等优点逐渐受到硬件设计者的青睐。
但是,vhdl 是一门语法相当严格的语言,易学性差,特别是对于刚开始接触 vhdl 的设计者而言,经常会因某些小细节处理不当导致综合无法通过。
为此本文就其中一些比较典型的问题展开探讨,希望对初学者有所帮助,提高学习进度。
一.关于端口vhdl 共定义了 5 种类型的端口,分别是 in, out,inout, buffer及 linkage,实际设计时只会用到前四种。
in 和 out 端口的使用相对简单。
这里,我们主要讲述关于 buffer和inout 使用时的注意事项。
与 out 端口比,buffer 端口具有回读功能,也即内部反馈,但在设计时最好不要使用buffer,因为 buffer类型的端口不能连接到其他类型的端口上,无法把包含该类型端口的设计作为子模块元件例化,不利于大型设计和程序的可读性。
若设计时需要实现某个输出的回读功能,可以通过增加中间信号作为缓冲,由该信号完成回读功能。
双向端口 inout 是四种端口类型中最为特殊的一种,最难以学习和掌握,为此专门提供一个简单程序进行阐述,部分程序如下:... ?① datab<=din when ce=’1’ and rd=’0’ else② (others=>’z’);③ dout<=datab when ce=’1’ and rd=’1’ else④ ( others=>’1’ );? ?程序中 datab 为双向端口,编程时应注意的是,当 datab 作为输出且空闲时,必须将其设为高阻态挂起,即有类似第②行的语句,否则实现后会造成端口死锁。
而当 datab 作为有效输入时, datab 输出必须处于高阻态,对于该例子中即,当 ce=’1’ and rd=’1’时,二.信号和变量常数、信号和变量是 vhdl 中最主要的对象,分别代表一定的物理意义。
常数对应于数字电路中的电源或地;信号对应某条硬件连线;变量通常指临时数据的局部存储。
信号和变量功能相近,用法上却有很大不同。
表 1 信号与变量主要区别信号变量赋值延迟至少有△延时无,立即变化相关信息有,可以形成波形无,只有当前值进程敏感是否全局性具有全局性,可存在于多个进程中只能在某个进程或子程序中有效相互赋值关系信号不能给变量赋值变量可以给信号赋值对于变量赋值操作无延迟,初学者认为这个特性对 vhdl 设计非常有利,但这只是理论上的。
基于以下几点原因,我们建议,编程时还是应以信号为主,尽量减少变量的使用。
(1)变量赋值无延时是针对进程运行而言的,只是一个理想值,对于变量的操作往往被综合成为组合逻辑的形式,而硬件上的组合逻辑必然存在输入到输出延时。
当进程内关于变量的操作越多,其组合逻辑就会变得越大越复杂。
假设在一个进程内,有关于变量的 3 个级连操作,其输出延时分别为 5ns,6ns,7ns,则其最快的时钟只能达到 18ns。
相反,采用信号编程,在时钟控制下,往往综合成触发器的形式,特别是对于 fpga 芯片而言,具有丰富的触发器结构,易形成流水作业,其时钟频率只受控于延时最大的那一级,而不会与变量一样层层累积。
假设某个设计为 3 级流水作业,其每一级延时分别为 10ns,11ns,12ns,则其最快时钟可达 12ns。
因此,采用信号反而更能提高设计的速度。
(2)由于变量不具备信息的相关性,只有当前值,因此也无法在仿真时观察其波形和状态改变情况,无法对设计的运行情况有效验证,而测试验证工作量往往会占到整个设计70%~80%的工作量,采用信号则不会存在这类问题。
(3)变量有效范围只能局限在单个进程或子程序中,要想将其值带出与其余进程、子模块之间相互作用,必须借助信号,这在一定程度上会造成代码不够简洁,可读性下降等缺点。
当然,变量也具有其特殊的优点,特别是用来描述一些复杂的算法,如图像处理,多维数组变换等。
三.位(矢量)与逻辑(矢量)bit 或其矢量形式 bit_vector只有’0’和’1’两种状态,数字电路中也只有’0’和’1’两种逻辑,因此会给初学者一个误区,认为采用位(矢量)则足够设计之用,而不必像std_logic那样出现’x’,’u’,’w’各种状态,增加编程难度。
但实际情况却并非如此,以一个最简单 d型触发器设计为例? ?① process(clk)② begin③ if clk’event and clk=’1’ then④ q<=d;⑤ end if;⑥ end process;? ?实际中 clk 对数据端 d的输入有一定的时间限制,即在 clk 上升沿附近(建立时间和保持时间之内),d必须保持稳定,否则 q输出会出现亚稳态,如下图所示。