vhdl编程的一些心得体会_第1页
vhdl编程的一些心得体会_第2页
vhdl编程的一些心得体会_第3页
vhdl编程的一些心得体会_第4页
vhdl编程的一些心得体会_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

vhdl 编程的一些心得体会篇一:VHDL 学习心得学习心得 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 体会学习心得 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 speed integrated circuit) hardware description language。 与另外一门硬件描述语言 verilog hdl 相比,vhdl 更善于描述高层的一些设计,包括系统级(算法、数据通路、控制)和行为 级(寄存器传输级) ,而且 vhdl 具有设计重用、大型设计能力、可读性强、易于编译等优点 逐渐受到硬件设计者的青睐。但是,vhdl 是一门语法相当严格的语言,易学性差,特别是对 于刚开始接触 vhdl 的设计者而言,经常会因某些小细节处理不当导致综合无法通过。为此 本文就其中一些比较典型的问题展开探讨,希望对初学者有所帮助,提高学习进度。 一 关于端口 vhdl 共定义了 5 种类型的端口,分别是 in, out,inout, buffer 及 linkage,实际设 计时只会用到前四种。in 和 out 端口的使用相对简单。这里,我们主要讲述关于 buffer 和 inout 使用时的注意事项。与 out 端口比,buffer 端口具有回读功能,也即内部反馈,但在设计时最好不要使用 buffer,因为 buffer 类型的端口不能连接到其他类型的端口上,无(转 载于: 小 龙 文档网:vhdl 编程的一些心得体会)法把包含该类型端口的 设计作为子模块元件例化,不利于大型设计和程序的可读性。若设计时需要实现某个输出的 回读功能,可以通过增加中间信号作为缓冲,由该信号完成回读功能。双向端口 inout 是四种端口类型中最为特殊的一种,最难以学习和掌握,为此专门提供 一个简单程序进行阐述,部分程序如下:. ? databz); dout1 );? ? 程序中 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)由于变量不具备信息的相关性,只有当前值,因此也无法在仿真时观察其波形和状 态改变情况,无法对设计的运行情况有效验证,而测试验证工作量往往会占到整个设计 7080的工作量,采用信号则不会存在这类问题。(3)变量有效范围只能局限在单个进程或子程序中,要想将其值带出与其余进程、子模 块之间相互作用,必须借助信号,这在一定程度上会造成代码不够简洁,可读性下降等缺点。当然,变量也具有其特殊的优点,特别是用来描述一些复杂的算法,如图像处理,多维 数组变换等。 三位(矢量)与逻辑(矢量)bit 或其矢量形式 bit_vector 只有0和1两种状态,数字电路中也只有0和 1两种逻辑,因此会给初学者一个误区,认为采用位(矢量)则足够设计之用,而不必像 std_logic 那样出现x,u,w各种状态,增加编程难度。但实际情况却并非如此, 以一个最简单 d 型触发器设计为例? ? process(clk) begin if clkevent and clk=1 then q end process; ? ?实际中 clk 对数据端 d 的输入有一定的时间限制,即在 clk 上升沿附近(建立时间和 保持时间之内) ,d 必须保持稳定,否则 q 输出会出现亚稳态,如下图所示。 当 clk 和 d 时序关系不满足时,由于 bit 只有0或1 ,系统只能随机的从0 和1中给 q 输出,这样的结果显然是不可信的;而采用 std_logic 类型,则时序仿真时 会输出为一个x ,提醒用户建立保持时间存在问题,应重新安排 d 和 clk 之间时序关系。此外,对于双向总线设计(前面已提及) 、 fpga/cpld 上电配置等问题,如果没有z, x等状态,根本无法进行设计和有效验证。 四关于进程 进程(process)是 vhdl 中最为重要的部分,大部分设计都会用到 process 结构,因 此掌握 process 的使用显得尤为重要。以下是初学和使用 process 经常会出错的例子。 1. 多余时钟的引入 在设计时往往会遇到这种情况,需要对外部某个输入信号进行判断,当其出现上跳或下 跳沿时,执行相应的操作,而该信号不像正常时钟那样具有固定占空比和周期,而是很随机, 需要程序设计判断其上跳沿出现与否。这时,很容易写出如下程序: process(ctl_a) - ctl_a 即为该输入信号 begin if ctl_aevent and ctl_a=1 then ? ? ; -执行相应操作 end if ; end process; 由于出现第行这类语句,综合工具自动默认 ctl_a 为时钟,某些 fpga 更会强行将该 输入约束到时钟引脚上。而设计者的初衷只是想将其作为下位机的状态输入以进行判断。上 面的程序容易造成多时钟现象,增加设计的难度。解决的办法可以如下,将 ctl_a 增加一级 状态 ctl_areg 寄存,通过对 ctl_a 和 ctl_areg 状态判断上跳与否,改正程序如下: process(clk) begin if clkevent and clk=1 then ctl_areg end if; end process; 程序中第行用以产生两个相邻状态,第行对前后状态进行判断是否有上跳现象发生。其中,需注意的是 clk 的时钟频率应明显快于 ctl_a 信号的变化频率,以保 证正确采样。 2. 输出多驱动 误用 process 经常会引起输出多驱动源的发生,即在两个以上的进程内对同一信号赋值 操作。 以下程序就出现了这类情况: proc_a: process(clk) begin if clkevent and clk=1 then dout end process; proc_b:process(sel_en) begin if sel_en=1 then dout end process; 进程 proc_a 和 proc_b 中都出现了对 dout 的赋值语句,设计者原本的想法是,只要 合理控制好 clk 和 sel_en 输入,使其不发生冲突,即 clk 上升沿时 sel_en 不为1 ; sel_en 为1时,不出现 clk 的上升沿,这样 proc_a,proc_b 两个进程就不会发生冲突。 但综合时,综合工具会将所有可能情况全部罗列进去,包括第行和第行同时成立的情况, 此时对于 dout 就有 din_a 和 din_b 两个输入驱动,dout 不知接收哪一个,因此该程序无 法综合,改正的方法是只要将两个进程合并成一个即可。由于进程在 vhdl 中的重要性,对此专门做了一个总结如下: (1)一个进程中不允许出现两个时钟沿触发,(xilinx 公司 coolrunner 系列 cpld 支 持单个时双钟的双触发沿除外) (2)对同一信号赋值的语句应出现在单个进程内,不要在时钟沿之后加上 else 语句, 如 if clkevent and clk=1 then - else ? 的结构,现有综合工具支持不了这种特 殊的触发器结构 (3)当出现多层 if 语句嵌套时,最好采用 case 语句替代,一是减少多层嵌套带来的 延时,二来可以增强程序的可读性 (4)顺序语句如 if 语句、case 语句、loop 语句、变量赋值语句等必须出现在进程、 函数或子程序内部,而不能单独出现在进程之外 (5)进程内部是顺序执行的,进程之间是并行运行的;vhdl 中的所有并行语句都可以 理解为特殊的进程,只是不以 process 结构出现,其输入信号和判断信号就是隐含的敏感表 五关于 vhdl 学习中的几点说明 与软件语言相比,vhdl 最重要的特点就在于它的并行运行特性,当设计好的电路上电后, 器件内部所有信号将同时并发工作,而不会以软件方式按照 程序顺序执行,即使在进程内部也是趋向并行工作的。例如以下程序: process(clk) begin if clkevent and clk=1 then end if; end process; 综合的结果两个独立的 d 型触发器,虽然进程内部应按顺序执行,但是硬件实现后,只 要采样到时钟上升沿, 和 状态会同时翻转,而不会先执行 的变化,然后才会去执行 的 转变。因此,vhdl 学习过程中,应加强硬件概念的理解,没有硬件概念或是硬件概念不强, 在设计时,往往会将 vhdl 设计以软件编程的方式来处理,而得出一些不可思议的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论