VHDL体会

合集下载

VHDL实验报告

VHDL实验报告

VHDL实验报告《创新实验》实验报告—基于vhdl的编程和硬件实现一、实验目的1.2.3.4. 熟悉和掌握硬件描述语言vhdl的基本语法及编写;掌握软件xilinx ise 10.1的使用;熟悉sdz-6电子技术实验箱的使用;了解节拍脉冲发生器等基本电路的实现;5. 了解八位二进制计数器的功能与设计;6. 学习键盘和七段数码管显示的控制和设计。

二、实验内容1. xilinx ise 10.1软件的使用;2. 节拍脉冲发生器等基本电路的实现;3. 八位二进制计数器的实现4. 键盘扫描及显示的实现三、实验器材1、 pc机2、 sdz-6电子技术实验箱3、正负5v电源4、 i/o接口线四、软件的使用在安装xilinx10.1软件时,需要一个id号,其实这个id号是可以重复使用的,几个同学在官网注册后就可以共享id号了。

安装完成之后就可以使用这个软件编写相应的vhdl的程序。

1.新建工程file—>new project 弹出下面的对话框输入工程名后单击next。

然后根据本实验的实验箱进行以下设置。

以后的步骤一般都是单击next(有些资料上会介绍有些这些步骤的具体功能,但对于本实验不必用到),最后单击finish,完成新建一个工程。

在窗口的左边会出现刚刚新建的工程,如下: 2.新建一个vhdl的源文件。

在上图中,右击工程选择new source ,弹出如下对话框。

在对画框的左边选择vhdl module,输入文件的名字(改名字最好是你定义的实体的名字)。

单击next。

出现下面的对话框。

该对话框主要是对外部端口的编辑。

可以直接跳过,即单击next,在源文件上编辑端口。

然后在接下来的对话框中单击finish。

完成建立一个源文件。

窗口右边就会出现刚才编辑的源文件。

3.编写和编译代码将事先编好的代码复制到源文件里,然后保存文件。

选中左边的文件名,在窗体的左边出现如下编辑文档内容。

选择synthesize —xst—》check syntax,双击check syntax,开始编译源文件。

VHDL编程的一些心得体会(共五则)

VHDL编程的一些心得体会(共五则)

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类型的端口不能连接到其他类型的端口上,无法把包含该类型端口的设计作为子模块元件例化,不利于大型设计和程序的可读性。

若设计时需要实现某个输出的回读功能,可以通过增加中间信号作为缓冲,由该信号完成回读功能。

双向端口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 作为输出且空闲时,必须将其设为高阻态挂起,即有类似第②行的语句,否则实现后会造成端口死锁。

VHDL中信号与变量的教学体会

VHDL中信号与变量的教学体会

很难发现其 中的错误。所以, 如何使学生分清两者 , 并 正 确的使 用 , 成为 影 响 VHDL语 言教 学 的关键 问 题 之 一 。本 文 主要 介 绍 了如 何 分 辨 VHD L语 言 的
d sg i g u i g VH DL r o n e .Ba e n o r e p re p r h s p stv e i n n sn a ep itd s d o u x e i n e h t o i e n t i a e a o ii e e f c n V HDL t a h n n e i n n . fe to e c i g a d d sg i g
维普资讯
第2 8卷 第 3期 20 0 6年 6月
电气 电子 教 学 学 报 J OURNAL 0F EEE
V o . 8 NO 3 12 .
J r 0 6 uL2 0
VHDL 中信 号 与 变 量 的教 学体 会
杨 丹 , 树 林 张
d s nn u igtahn ei ig d r ec igVHDL poet ai c n e t a o t aao jcsi VHDL ae ie rt h n g n rjc.B sc o cps b u t bet d n r v nf s;te g i tep p r o u e nt e to e n taetedf rn eb t e o fs beVHDLo jcs s — h a e c ss h dt d mo srt h i ee c ewent c nu a l f o h me o f wo b t , i e g
分 清变 量与 信号 的 区别 , 采用 何 种 数 据 对 象 往 往 随
心所 至 , 虽然 有 时候 系 统也 能正 常运 转 , 但是 在 系统

vhdl心得体会

vhdl心得体会

vhdl心得体会经过这个学期的VHDL课程学习,我对VHDL有了较为深入的了解和体会。

以下是我对VHDL的心得体会:首先,VHDL是一种硬件描述语言,用于描述数字电路和系统的行为和结构。

相比传统的结构化硬件描述语言,如Verilog,VHDL更加强调功能的建模和层次化设计。

通过使用VHDL,我们可以以一种高级的、可抽象化的方式来描述电路和系统的功能,从而提高开发效率。

其次,学习VHDL需要理解并熟练掌握语言的语法和规则。

VHDL有自己独特的语法和规则,例如信号声明、实体和体系结构的定义、过程语句等。

要编写正确的VHDL代码,需要深入理解这些语法和规则,并且要严格遵循它们。

此外,理解VHDL的数据类型和信号赋值的原理也是非常重要的。

再次,VHDL的建模能力非常强大。

我们可以通过使用VHDL来描述各种各样的数字电路和系统,包括组合逻辑电路、时序逻辑电路、状态机等。

在编写VHDL代码时,我们可以使用各种逻辑门、触发器、运算器等各种元件来构建我们所需要的电路和系统。

通过合理、灵活地使用这些元件,我们可以实现非常复杂的功能。

最后,学习VHDL需要进行大量的实践。

VHDL是一种实践性非常强的学科,需要通过实际编写代码来加深对语言的理解和掌握。

在这个学期的学习中,我通过完成实验和项目,不断地练习编写VHDL代码。

在实践中,我发现通过实际编写代码,我们可以更加深入地理解VHDL的语法和规则,也可以更加有利于我们理解和掌握VHDL的建模能力。

总之,学习VHDL需要理解并熟练掌握语言的语法和规则,需要具备良好的抽象建模能力,并且需要进行大量的实践。

通过对VHDL的学习,我不仅提高了对数字电路和系统的理解,还培养了我在硬件设计方面的能力。

我相信在今后的学习和工作中,VHDL的知识和技能将会对我有很大的帮助。

vhdl实验报告

vhdl实验报告

vhdl实验报告VHDL实验报告引言:VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和仿真。

本篇实验报告将介绍我在VHDL实验中的学习和实践经验,包括实验目的、实验过程、实验结果以及对VHDL的理解和展望。

一、实验目的VHDL实验的主要目的是让我们掌握VHDL语言的基本语法和使用方法,能够利用VHDL描述数字电路,并通过仿真和综合工具进行验证和实现。

通过这些实验,我们可以深入了解数字电路的原理和设计方法,提高我们的逻辑设计能力和工程实践能力。

二、实验过程在实验过程中,我们首先学习了VHDL的基本语法,包括实体声明、端口声明、信号声明等。

然后,我们通过实例学习了VHDL的建模方法,包括组合逻辑电路的建模和时序逻辑电路的建模。

在组合逻辑电路的建模中,我们学习了使用逻辑运算符和条件语句描述电路的功能;在时序逻辑电路的建模中,我们学习了使用过程语句和时钟信号描述电路的状态转换。

在学习了VHDL的基础知识后,我们开始进行实验设计。

我们选择了一个简单的数字电路,如4位加法器,来进行实验验证。

首先,我们通过VHDL语言描述了加法器的功能和结构,包括输入端口、输出端口和中间信号。

然后,我们使用仿真工具进行了功能仿真,验证了加法器的正确性。

接着,我们使用综合工具将VHDL代码综合成门级电路,并进行了时序仿真和时序优化,验证了加法器的时序正确性和性能。

三、实验结果通过实验,我们成功地实现了4位加法器的功能,并验证了其正确性和性能。

在功能仿真中,我们输入了不同的测试数据,观察了输出结果,发现加法器能够正确地进行加法运算,并得到了正确的结果。

在时序仿真中,我们观察了电路的时序行为,包括输入信号的变化、输出信号的响应和中间信号的传播延迟等,发现加法器能够在时序上满足要求,并且具有较好的性能。

vhdl中信号与变量的教学体会

vhdl中信号与变量的教学体会

vhdl中信号与变量的教学体会VHDL(电子设备自动化设计语言)是一种针对高端、复杂电子系统设计的硬件定义语言,它利用模块化的设计结构,使得电子设计师能够更轻松地创建、调试和管理复杂电子硬件系统。

而在VHDL中,信号和变量的概念被广泛使用。

它们是VHDL中的基本概念,无论在设计硬件系统时或者执行系统时,这些概念都起着至关重要的作用。

首先,在VHDL中,信号是一种可以携带信息的变量,它可以在不同的模块之间传递。

通常,VHDL中的信号用于实现硬件中的“计算”或“处理”操作,如硬件加法器、乘法器、移位器等。

此外,信号除了可以携带“数据”信息,还可以携带“控制”信息,如信号被测试或修改,VHDL中的控制结构就可以控制信号的传递和变换。

另一方面,VHDL中的变量概念更多的是属于软件程序的概念,它更多的用来表示硬件系统中的状态变量,如存储数据或状态信息,以及可以被访问的变量。

简单地说,在VHDL中,变量的主要功能是存储电路的内部状态,如存储数据,以及保存可以被其它模块调用的信息。

总而言之,不可否认,信号和变量在VHDL中具有重要作用。

除了信号可以传输信息,变量在可以存储数据和调用信息。

这两类概念应用于VHDL硬件系统的设计上,可以达到更精确、更有效的系统设计效果,从而实现高性能的硬件系统。

因此,在VHDL教学过程中,教师应该把这两类概念融入到教学之中,让学生充分理解和掌握VHDL 中信号与变量的作用,这样有助于培养学生的硬件系统设计能力,提高学生在VHDL设计上的熟练度。

另外,为了更好地让学生理解和掌握VHDL中信号与变量的概念,教师还可以给学生安排一些设计和编码的实践课。

学生通过参加实验课,可以更好地理解和掌握VHDL中信号与变量的概念,能够熟练地把硬件系统设计中的信号和变量应用到实际的设计中。

综上所述,信号和变量的概念在VHDL中扮演着重要的角色,它们不仅是VHDL教学过程中的基本概念,在VHDL设计硬件系统中也具有重要意义。

vhdl学习笔记

电子系统设计学习笔记经过一个学期的数字逻辑电路实验以及电子系统设计学习,我对VHDL语言的知识从无到有,从少到多,其中要归因于多次试验以及设计时间。

现将学习过程中得到的一些经验积累如下:1、关于设计方法可以将传统的自下而上方法和VHDL的至上而下方法综合。

先使用maxplus的原理图设计功能画出原理图,进行波形仿真。

再综合图中的各接口和原件进行行为描述。

以一个时序脉冲与整形电路为例:分析如下:输入端:clk,prnclrn,ent,enp,ldn,其中使能端prn与清除段clrn在实验中不发挥作用,可省略。

74161中的两个使能端和读取功能多余,也可以省略。

输出端:与图相同。

接线:三个计数器输出Q3,Q4,Q4b,Q5,,74641输出Q6,三周期输出Q7,Q8图中包含五进制、四进制、三进制和二进制计数器各一代码如下:USE IEEE.STD_LOGIC_1164.ALL;ENTITY exp5tx ISPORT(clk : IN STD_LOGIC;CP1,CP2,CP3,CP4,CP5,CP6 : OUT STD_LOGIC;Q3,Q4,Q4b,Q5,Q6,Q7,Q8 : BUFFER STD_LOGIC);//接线均使用buffer,方便调试,波形模拟成功后再改回signal END exp5tx;ARCHITECTURE DISTRIBUTER OF exp5tx ISBEGINPROCESS(clk,Q3,Q5)VARIABLE count_5 : STD_LOGIC_VECTOR(2 DOWNTO 0);VARIABLE count_2 : STD_LOGIC;VARIABLE count_4 : STD_LOGIC_VECTOR(1 DOWNTO 0);VARIABLE count_3 : STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINIF(clk'EVENT AND clk='1')THENIF(count_5="000")THENcount_5 := "001";Q3 <= '1';ELSIF(count_5="001")THENcount_5 := "010";Q3 <= '0';ELSIF(count_5="010")THENcount_5 := "011";Q3 <= '0';ELSIF(count_5="011")THENcount_5 := "100";Q3 <= '0';ELSIF(count_5="100")THENcount_5 := "000";Q3 <= '0';END IF;END IF; //五进制计数器IF(Q3'EVENT AND Q3='1')THENIF(count_2='0')THENcount_2 := '1'; Q4 <= '1';Q4b <= '0';ELSIF(count_2='1')THENcount_2 := '0'; Q4 <= '0';Q4b <= '1';END IF;END IF; //二进制计数器IF(Q3'EVENT AND Q3='1')THENIF(count_4="00")THENcount_4 := "01";Q5 <= '1';ELSIF(count_4="01")THENcount_4 := "10";Q5 <= '1';ELSIF(count_4="10")THENcount_4 := "11";Q5 <= '0';ELSIF(count_4="11")THENcount_4 := "00";Q5 <= '0';END IF;END IF; //四进制计数器IF(Q5'EVENT AND Q5='1')THENIF(count_3="00")THENcount_3 := "01"; Q6 <= '1';Q7 <= '0';Q8 <= '0';ELSIF(count_3="01")THENcount_3 := "10"; Q6 <= '0';Q7 <= '1';Q8 <= '0';ELSIF(count_3="10")THENcount_3 := "00"; Q6 <= '0';Q7 <= '0';Q8 <= '1';END IF;END IF; //三进制计数器END PROCESS;CP1 <= Q4b AND Q5 AND Q6;CP2 <= Q4b AND NOT Q5 AND Q6;CP3 <= Q4b AND Q5 AND Q7;CP4 <= Q4b AND NOT Q5 AND Q7;CP5 <= Q4b AND Q5 AND Q8;CP6 <= Q4b AND NOT Q5 AND Q8;//组合逻辑END DISTRIBUTER;这是学习vhdl过程中的一个程序,其中还有些缺点,比如没将每个模块分成单独的process等。

VHDL语言与EDA课程设计心得【模版】

湖南人文科技学院课程设计报告课程名称: VHDL语言与EDA课程设计设计题目:出租车自动计价器设计系别:专业:班级:学生姓名:学号:起止日期: 2011年6月13日~2011年6月26日指导教师:教研室主任:摘要随着我国社会经济的全面发展,各大中小城市的出租车营运事业发展迅速,出租车已经成为人们日常出行选择较为普遍的交通工具。

出租车计价器是出租车营运收费的专用智能化仪表,是出租车市场规范化、标准化以及减少司机与乘客之间发生纠纷的重要设备。

一种功能完备、简单易用、计量准确的出租车计价器是加强出租车行业管理、提高服务质量的必备品。

根据预定的设计要求和设计思路,我们使用VHDL硬件描述语言设计了一个实际的基于Altera FPGA芯片的出租车自动计价器系统,介绍了该系统的电路结构和程序设计。

通过在QuartusII6.0软件中编译和下载测试,得到了仿真波形和关键的设计结果。

经过在实验箱上进行硬件测试,证明该出租车计价系统具有实用出租车计价器的基本功能,如能进一步完善,将可以实用化和市场化。

关键词:出租车自动计价器;VHDL; FPGA ;QuartusII6.0目录设计要求 01、方案论证与对比 01.1方案一 01.2方案二 (1)1.3两种方案的对比 (2)2、实验步骤和设计过程 (2)2.1计程模块 (2)2.2等待计时模块 (2)2.3计费模块 (2)3、调试与操作说明 (3)3.1QuartusII中的VHDL程序 (3)3.2程序的编译与及仿真波形 (6)3.3程序的下载与功能的测试 (7)4、课程设计心得体会 (8)5、元器件及仪器设备明细 (9)6、参考文献 (10)7、致谢 (11)出租车自动计价器设计设计要求设计一个出租车自动计费器,具有行车里程计费、等候时间计费、及起价三部分,用四位数码管显示总金额,最大值为99.99元,行车里程单价1元/公里,等候时间单价0.5元/10分钟,起价3元(3公里起价)。

数字电路实验心得体会

数字电路实验心得体会数字电路实验心得体会篇一:数电实验总结心得数字电子技术实验总结心得数字电子技术是一门理论与实践密切相关的学科,如果光靠理论,我们就会学的头疼,如果借助实验,效果就不一样了,特别是数字电子技术实验,能让我们自己去验证一下书上的理论,自己去设计,这有利于培养我们的实际设计能力和动手能力。

通过数字电子技术实验, 我们不仅仅是做了几个实验,不仅要学会实验技术,更应当掌握实验方法,即用实验检验理论的方法,寻求物理量之间相互关系的方法,寻求最佳方案的方法等等,掌握这些方法比做了几个实验更为重要。

在数字电子技术实验中,我们可以根据所给的实验仪器、实验原理和一些条件要求,设计实验方案、实验步骤,画出实验电路图,然后进行测量,得出结果。

在数字电子技术实验的过程中,我们也遇到了各种各样的问题,针对出现的问题我们会采取相应的措施去解决,比如:1、线路不通——运用逻辑笔去检查导线是否可用;2、芯片损坏——运用芯片检测仪器检测芯片是否正常可用以及它的类型;3、在一些实验中会使用到示波器,这就要求我们能够正确、熟悉地使用示波器,通过学习我们学会了如何调节仪器使波形便于观察,如何在示波器上读出相关参数,如在最后的考试实验《555时基电路及其应用》中,我们能够读出多谐振荡器的Tpl、Tph和单稳态触发器的暂态时间T,还有有时是因为接入线的问题,此时可以通过换用原装线来解决。

同时,我们也得到了不少经验教训:1、当实验过程中若遇到问题,不要盲目的把导线全部拆掉,然后又重新连接一遍,这样不但浪费时间,而且也无法达到锻炼我们动手动脑能力的目的。

此时,我们应该静下心来,冷静地分析问题的所在,有可能存在哪一环节,比如实验原理不正确,或是实验电路需要修正等等,只有这样我们的能力才能有所提高。

2、在实验过程中,要学会分工协作,不能一味的自己动手或是自己一点也不参与其中。

3、在实验过程中,要互相学习,学习优秀同学的方法和长处,同时也要学会虚心向指导老师请教,当然这要建立在自己独立思考过的基础上。

vhdl+inout

最近在用VHDL设计简易CPU,想用总线式的,这就要求端口模式必须是INOUT,之前没接触过。

在网上搜到了博主jiangyi_love的一篇文章,转载过来,我们大家共同学习。

在工程应用中,双向电路是设计者不得不面对的问题.在实际应用中,数据总线往往是双向的.如何正确处理数据总线是进行时序逻辑电路设计的基础.在程序设计过程中,关键技术在于:实体部分必须对端口属性进行申明,端口属性必须为inout 类型,在构造体需要对输出信号进行有条件的高阻控制.在双向电路的处理问题上,常用的处理方式有两种,在介绍双向电路的处理方式之前,先看看双向电路的基本格式:ENTITY bidir_pin IS(bidir : INOUT std_logic;oe, clk, from_core : IN std_logic;to_core : OUT std_logic;……END bidir_pin;ARCHITECTURE behavior OF bidir_pin ISBEGINbidir <= from_core WHEN oe=…1‟ ELSE “ZZZZ”;to_core <= bidir;END behavior;该程序揭示了双向电路的处理技巧,首先在实体部分bidir属于双向信号,在端口定义时,端口属性为inout类型,即把bidir信号作为输入三态输出. 语句“bidir <= from_core WHEN oe=…1‟ ELSE “ZZZZ”;”表示bidir信号三态输出,语句”to_core <= bidir;”把bidir信号作为输入信号.由此可见,双向电路在程序设计中,didir输入当着普通的in类型,而在输出时,需要加一定的控制条件,三态输出.问题的关键在于:如何确定这个条件?1)双向信号作一个信号的输入,作另一信号的输出ENTITY bidir ISPORT(bidir : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0);oe, clk : IN STD_LOGIC;from_core : IN STD_LOGIC_VECTOR (7 DOWNTO 0);to_core : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));END bidir;ARCHITECTURE logic OF bidir ISSIGNAL a : STD_LOGIC_VECTOR (7 DOWNTO 0);SIGNAL b : STD_LOGIC_VECTOR (7 DOWNTO 0);BEGINPROCESS (clk)BEGINIF clk = '1' AND clk'EVENT THENa <= from_core;to_core <= b;END IF;END PROCESS;PROCESS (oe, bidir)BEGINIF( oe = '0') THENbidir <= "ZZZZZZZZ";b <= bidir;ELSEbidir <= a;b <= bidir;END IF;END PROCESS;END logic;这种设计方式叫做寄存双向信号的方法.本设计中bidir为双向信号,from_core为数据输入端,to_core为数据输出端,oe为三态输出使能,clk为读写数据的时钟.在程序设计中,需要定义两个signal a和b信号.a信号用于输入数据from_core的寄存器,b用于输出数据to_core的寄存器.采用寄存器的方法需要设计两个进程,一个进程把a,b信号在时钟的控制下负责端口的输入信号from_core和端口输出信号to_core的连接,这一步实现了寄存双向的功能.另外一个进程则负责信号a,b和双向口之间的赋值关系.本设计只揭示了简单的双向信号操作方式,即bidir 既可以作为from_core的输出,又可以作为to_core的输入2)双向信号既做输出又做输出上例是最简单的双向信号应用的特例.在实际的工程中,双向信号既做信号的输入,又做信号的输出,常见的数据总线就是这种操作模式.library IEEE;use IEEE.STD_LOGIC_1164.all;entity dir_data isport(clk : in STD_LOGIC;rst : in STD_LOGIC;rw : in STD_LOGIC;address : in STD_LOGIC_VECTOR(1 downto 0);data : inout STD_LOGIC_VECTOR(7 downto 0));end dir_data;architecture arc_dir of dir_data issignal data_in : STD_LOGIC_VECTOR(7 downto 0);signal data_out: STD_LOGIC_VECTOR(7 downto 0);signal reg_a: STD_LOGIC_VECTOR(7 downto 0);signal reg_b: STD_LOGIC_VECTOR(7 downto 0);begindata_in<=data;d1:process(clk,rst,rw)beginif rst='1' thenreg_a<= (others=>'0');reg_b<= (others=>'0');elsif clk'event and clk='1' then if rw='1' thenif address="00" thenreg_a<=data_in;elsif address="01" thenreg_b<=data_in;else null;end if;else null;end if;else null;end if;end process d1;d2:process(clk,rw,reg_a,reg_b) beginif clk'event and clk='1' thenif rw='0' thenif address="00" thendata_out<=reg_a;elsif address="01" thendata_out<=reg_b;else null;end if;else null;end if;else null;end if;end process d2;data<=data_out when (rw='0' and address(1)='0') else(others=>'Z');end arc_dir;针对这个程序,我编了一个仿真波形,仅供参考!在程序设计中,首先需要定义data_in, data_out, reg_a, reg_b四个signal,我们把data_in叫做输入寄存器,它是从双向信号data接收数据的寄存器,data_out叫做输出寄存器,它是向双向信号data发送信号的寄存器,reg_a和reg_b叫做操作寄存器,它们是在一定的时序控制下把data_in数据送给reg_a,reg_b,在一定的时序控制下从reg_a和reg_b读出数据的.这样的处理方式必须有两个进程,因为在architecture arc_dir of dir_data is和begin之间定义了data_in, data_out, reg_a, reg_b四个signal,它在同一进程内不支持既赋值,又调用,也就是说它不支持在d1进程中对信号reg_a, reg_b赋值,又在d1进程中又调用reg_a, reg_b.首先有语句”data_in<=data;”它表示输入寄存器无条件的接收双先信号的数据.在d1进程中,首先在rst信号有效时,对操作寄存器reg_a,和reg_b进行清零操作,然后在时钟(clk)的控制下,在写(rw)信号有效的情况下,对reg_a, reg_b寄存器在不同的地址控制下写入不同的data_in值.在d2进程中,在时钟(clk)的控制下,在读(rw)信号有效的时候,把不同地址的reg_a, reg_b的值送进data_out中.最关键的是最后一句:“data<=data_out when (rw='0' and address(1)='0') else (others=>'Z');”它表示双向信号的三态输出,而最最关键的是when后面的条件,如果条件限制太宽,就会错误占用双向信号总线,引起总线的误操作,如果条件限制太窄,输出寄存器的数据就不能够正确的送到数据总线上去,会引起数据的丢失.也就是说,只有正确的限制了when语句后面的条件,才能够把输出寄存器的数据正确地送到数据总线上去.仔细查看此条件,有如下的规律:when语句后的条件是操作寄存器写入输出寄存器的条件的公共条件.如:rw=‟0‟是操作寄存器的数据写入输出寄存器的读使能信号,address(1)是地址线的公共部分.在实际工程应用中,需要设计者在分配地址总线的时候掌握一定的技巧,尽量从地址的低位到到高位,保证地址总线有更多位的公共部分,比如只对四个寄存器操作时,地址线分配为”100”,”010”,”110”,”001”是不科学的,而”000”,”001”,”010”和”011”则是理想的.两者不同的是前者地址线没有公共部分,这样的设计无法用when语句对条件进行直接的控制,如果置之不理,由于列举不全,在逻辑综合时,电路会利用器件的乘积项和查找表的资源形成一个Latch, Latch不仅会把电路的时序变得复杂,而且电路存在潜在的危险性.虽然when语句后的条件不能够对条件进行直接的控制,但是可以使用枚举法一一把用到的地址线罗列出来,表示只有在这样的地址线的情况下才会用到数据总线,否则其他状态对数据总线送高阻,表示不占用数据总线. 总而言之,双向信号是程序设计中尤其重要的基础,设计者在设计程序的时候,要尤其注意,何时会占用数据总线,何时不占用数据总线。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学习心得——《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&lt;=din when ce=’1’ and rd=’0’ else② (others=&gt;’z’);③ dout&lt;=datab when ce=’1’ and rd=’1’ else④ ( others=&gt;’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&lt;=d;⑤ end if;⑥ end process;? ?实际中 clk 对数据端 d的输入有一定的时间限制,即在 clk 上升沿附近(建立时间和保持时间之内),d必须保持稳定,否则 q输出会出现亚稳态,如下图所示。

相关文档
最新文档