搜档网
当前位置:搜档网 › VHDL体会

VHDL体会

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 编程的一些心得体会

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 作为输出且空闲时,必须将

其设为高阻态挂起,即有类似第②行的语句,否则实现后会造成端口死锁。而当 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输出会出现亚稳态,如下图所示。

当 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_a’event and ctl_a=’1’ then

④ ? ? ; --执行相应操作

⑤ end if ;

⑥ end process;

由于出现第③行这类语句,综合工具自动默认 ctl_a 为时钟,某些 fpga 更会强行将该

输入约束到时钟引脚上。而设计者的初衷只是想将其作为下位机的状态输入以进行判断。上

面的程序容易造成多时钟现象,增加设计的难度。解决的办法可以如下,将 ctl_a 增加一级

状态

ctl_areg 寄存,通过对 ctl_a 和ctl_areg 状态判断上跳与否,改正程序如下:①

process(clk)

② begin

③ if clk’event and clk=’1’ then

④ ctl_areg<=ctl_a;--产生相邻状态

⑤ if ctl_areg=’0’ and ctl_a=’1’ then--上跳判断

⑥ ? ? ; --执行相应操作

⑦ end if;

⑧ end if;

⑨ end process;

程序中第④行用以产生两个相邻状态,第⑤行对前后状态进行判断是否有上跳现

象发生。其中,需注意的是 clk 的时钟频率应明显快于 ctl_a信号的变化频率,以保

证正确采样。

2. 输出多驱动

误用 process经常会引起输出多驱动源的发生,即在两个以上的进程内对同一信号赋值

操作。

以下程序就出现了这类情况:

⑴ proc_a: process(clk)

⑵ begin

⑶ if clk’event and clk=’1’ then

⑷ dout<=din_a;

⑸ end if

⑹ end process;;

⑻ proc_b:process(sel_en)

⑼ begin

⑽ if sel_en=’1’ then ⑾ dout<=din_b;

⑿ end if;

⒀ 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 clk’event and clk=’1’ then - else ? 的结构,现有综合工具支持不了这种特

殊的触发器结构

(3)当出现多层 if语句嵌套时,最好采用 case 语句替代,一是减少多层嵌套带来的

延时,二来可以增强程序的可读性

(4)顺序语句如 if语句、case 语句、loop 语句、变量赋值语句等必须出现在进程、

函数或子程序内部,而不能单独出现在进程之外

(5)进程内部是顺序执行的,进程之间是并行运行的;vhdl 中的所有并行语句都可以

理解为特殊的进程,只是不以 process结构出现,其输入信号和判断信号就是隐含的敏感表五.关于 vhdl 学习中的几点说明

与软件语言相比,vhdl 最重要的特点就在于它的并行运行特性,当设计好的电路上电后,

器件内部所有信号将同时并发工作,而不会以软件方式按照

程序顺序执行,即使在进程内部也是趋向并行工作的。例如以下程序:① process(clk)

② begin

③ if clk’event and clk=’1’ then

④ <= ;

⑤ <= ;

⑥ end if;;

⑦ end process;

综合的结果两个独立的 d 型触发器,虽然进程内部应按顺序执行,但是硬件实现后,只

要采样到时钟上升沿,和状态会同时翻转,而不会先执行的变化,然后才会去执行的

转变。因此,vhdl 学习过程中,应加强硬件概念的理解,没有硬件概念或是硬件概念不强,

在设计时,往往会将 vhdl 设计以软件编程的方式来处理,而得出一些不可思议的结果。

作为一门硬件描述语言,vhdl 几乎可以用来描述现有的大型系统数字电路、算法以及其

它设计。但是,限于目前综合工具的水平,vhdl 中的许多语法还不能支持,例如:

dout<=din after 5 ns;

综合时就无法达到如此精度,因此这条语句主要用来编写测试激励,而很少出现在设计

实体中。类似的情况还有很多,目前 vhdl 设计使用的也只是整个标准中的一部分,这也正

是vhdl 的“可综合子集”性质,它一定程度上限制了 vhdl 的广泛应用,但是随着综合技

术的发展,这种情况会逐渐得以改善,vhdl 也将在各个领域中发挥出愈来愈重要的作用篇三:

vhdl第一次实验报告

深圳大学实验报告

课程名称:

学院:信息工程学院

实验时间:

实验报告提交时间:

教务部制

篇四:eda心得体会

eda学习心得

班号:072093-05 学号:20091000880 课程刚开始的时候,对eda技术很陌生,也感到很茫然,也非常没有信心,当接触到可

编程器件的时候,看到大家同样感到很迷惘。或许,在学习eda的时候,我应该比别人更有

些优势,在双学位计算机的课程里我已经学过《数字逻辑》,而eda的一些内容也是和《数字

逻辑》直接相关联的。

通过一学期的努力学习,查阅了一些相关技术的书籍,书中通过大量的图示对pld硬件

特性与编程技术进行了形象的讲解,不仅融合了之前学习的关于电路设计的知识还将eda的

技术加入其中。对vhdl语言的详尽讲解更是让我深刻理解了vhdl语言的编程原理。由于本

门课程是一门硬件学习课程,所以实验必不可少。通过课程最后实验,我体会一些vhdl语言

相对于其他编程语言的特点。

在接触vhdl语言之前,我已经学习了c语言,汇编语言,而相对于这些语言的学习,,

vhdl 具有明显的特点。这不仅仅是由于vhdl 作为一种硬件描述语言的学习需要了解较多的

数字逻辑方面的硬件电路知识,包括目标芯片基本结构方面的知识更重要的是由于vhdl 描

述的对象始终是客观的电路系统。由于电路系统内部的子系统乃至部分元器件的工作状态和

工作方式可以是相互独立、互不相关的,也可以是互为因果的。这表明,在任一时刻,电路

系统可以有许多相关和不相关的事件同时并行发生。例如可以在多个独立的模块中同时入行

不同方式的数据交换和控制信号传输,这种并行工作方式是任何一种基于cpu 的软件程序语

言所无法描绘和实现的。传统的软件编程语言只能根据cpu 的工作方式,以排队式指令的形

式来对特定的事件和信息进行控制或接收。在cpu 工作的任一时间段内只能完成一种操作。

因此,任何复杂的程序在一个单cpu 的计算机中的运行,永远是单向和一维的。因而程序设

计者也几乎只需以一维的思维模式就可以编程和工作了。

在学习的过程中,我深深体会到,学习不单单要将理论知识学扎实了,更重要的是实际

动手操作能力,学完了课本知识,我并没有觉得自己有多大的提高,相反的,每次做完实验

之后,都会感觉自己收获不少,因此,我认为在老师今后的教学当中,应当更加注重动手实

验,把理论与实践很好的结合起来,才能使同学融会贯通。篇五:vhdl实现贪吃蛇

西北工业大学

课程设计报告

目: 贪吃蛇小游戏

摘要

贪吃蛇是一个简单地小游戏,写作贪吃蛇的目的在于以c语言算法思(转载于:vhdl体会)

想为基础,通过进一步的改编实现贪吃蛇小游戏,实现其基本游戏功能(显示蛇和老鼠、移

动、长大、死亡、十五步内未吃掉则消失、计分、剩余时间)提高自己的对数字电路和相关

语言的掌握。

利用de0板写作,以vhdl语法撰写,并参考实验相关资料文件、网上相关资源以及图书

馆相关书籍並,并通过老师的指导和与同学讨论完成写作贪吃蛇游戏。

由于未学习过vhdl和verilog dhl语言,对de0板不熟悉,写作过程中遇到了不小麻烦,

通过进一步的学习,老师的指导以及参考资料,虽然不能完全实现游戏功能,但是已基本可

以实现小游戏。

从一开始的无从下手到最后学会撰写vhdl、游戏显示设计、烧录到板子调试到最后得到

成果,使自己一点一点补充不足的知识,对于vhdl硬件与软件间的关系运作也能更加清楚与

了解,研究此设计如有机会会再继续完成。

关键词:vhdl, verilog hdl,de0 目录

一、课程设计目

的 .............................................................................

- 3 -

二、设计任务与要求.......................................................................... - 3

-

三、方案设计与论证.......................................................................... - 3

-

1、vga显

示 ............................................................................. ........... - 3 -

2、键盘控

制 ............................................................................. .......... - 5 -

3、蛇的运动与增

长 ........................................................................... -

5 -

四、遇到问题的解决方

法 .................................................................. - 6 -

五、存在的问题与不

足 ...................................................................... - 6 -

六、总结与体

会 .............................................................................

.... - 6 -

七、参考文

献 .............................................................................

........ - 7 -

八、附

录 ............................................................................. ................ - 8 - 贪吃蛇

一、课程设计目的

1)巩固和加深所学电子技术课程的基本知识,提高综合运用所学知识的能力;

2)培养根据课题需要选用参考书、查阅手册、图表和文献资料的能力,提高学生独立解

决工程实际问题的能力

3)通过设计方案的分析比较、设计计算、元件选择及电路安装调试等环节.初步掌握简

单实用电路的工程设计方法。

4)提高动手能力.掌握常用仪器设备的正确使用方法,学会对简单实用电路的实验调试

和对整机指标的测试方法,

5)学习vhdl和verilog hdl语言,熟悉de0电路板。提高对软件与硬件之间关系的认

识与了解

二、设计任务与要求

设计任务:设计一个贪吃蛇小游戏

要求和指标:

1. 用ps2键盘作为输入设备,用lcd作为显示器。

2. 自定义蛇的图像和老鼠的图像,用四个按键控制蛇的运动方向,完成贪食蛇游戏,蛇

撞“墙”、边或者游戏时间到,游戏结束。

3. 老鼠出现的地方是随机的,在某个地点出现的时间是蛇走15步的时间,如果15步之

内没有被吃掉,它就会在其它地方随机出现。;

4. 在旁边显示得分情况和游戏的剩余时间。

三、方案设计与论证

1、vga显示

vga标准是一种计算机显示标准,最初是由ibm公司在1987 年提出的一种

视频传输标准,在彩色显示器领域得到了广泛应用。vga管脚中,vga_hs和vga_vs分别

是水平扫描信号和竖直扫描信号,vga_r, vga_g和vga_b是颜色控制信号,控制当前显示的

像素色彩。利用水平扫描信号和竖直扫描信号实现二维平面的像素扫描显示,程序中中我們

利用cnt_h与cnt_v信号来控制,以确认程序正确的将色彩输出到屏幕上。将屏幕分成30*40

的矩阵,每个矩阵块根据不同的值赋予不同的颜色。屏幕是从最左上角的(4,4)坐标开始扫

描更新,可以将屏幕视为x-y 平面來看,根据矩阵点值赋予不同颜色绘制游戏框架并且实时

显示蛇与老鼠

在做vga显示前先进行了彩条显示,以确保颜色显示正确,结果如下:

根据彩条显示绘制游戏框架,并定义蛇与老鼠的颜色。

VHDL实验报告

《创新实验》实验报告 —基于VHDL的编程和硬件实现

一、实验目的 1.熟悉和掌握硬件描述语言VHDL的基本语法及编写; 2.掌握软件Xilinx ISE 10.1的使用; 3.熟悉SDZ-6电子技术实验箱的使用; 4.了解节拍脉冲发生器等基本电路的实现; 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.编写和编译代码 将事先编好的代码复制到源文件里,然后保存文件。 选中左边的文件名,在窗体的左边出现如下编辑文档内容。

VHDL语言实例教学内容

VHDL语言实例 例1:设计一七段显示译码器,用它来驱动七段发光管LED显示十六进制数字0到9和字母A到F。LED显示数码管为共阳极。 LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY HEX2LED IS PORT( HEX :IN std_logic_vector(3 DOWNTO 0); LED : OUT std_logic_vector(6 TO 0) ); END HEX2LED; 图例1 七段显示译码 器实体 ARCHITECTURE HEX2LED_arc OF HEX2LED IS BEGIN -- HEX-TO-SEVEN-SEGMENT DECODER -- SEGMENT ENCODING -- -- ---- -- 5 | |1 -- ---- <--6 -- 4 | |2

-- ---- -- 3 WITH HEX SELECT LED<= "1111001" when "0001", "0100100" when "0010", "0110000" when "0011", "0011001" when "0100", "0010010" when "0101", "0000010" when "0110", "1111000" when "0111", "0000000" when "1000", "0010000" when "1001", "0001000" when "1010", "0000011" when "1011", "1000110" when "1100", "0100001" when "1101", "0000110" when "1110", "0001110" when "1111", "1000000" when others; END HEX2LED_arc; 例2:设计一个八选一数据选择器 1)s是通道选择信号, d0,d1,d2,d3,d4,d5,d6,d7数据输入 out1是数据输出

基于VHDL的流水灯设计

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY huayang IS PORT(clk:IN STD_LOGIC; led0,led1,led2,led3,led4,led5,led6,led7,led8:OUT STD_LOGIC); END huayang; ARCHITECTURE haha OF huayang IS SIGNAL cnt :INTEGER RANGE 0 TO 49999999; signal clk1hz:INTEGER RANGE 0 TO 1; SIGNAL k1:INTEGER RANGE 0 TO 25; BEGIN PROCESS(clk) BEGIN IF (clk'EVENT AND clk='1') THEN IF(cnt=49999999) THEN cnt<=0; else cnt<=cnt+1; END IF; IF(cnt<=24999999) then clk1hz<=1; ELSE clk1hz<=0; END IF; END IF; IF(clk1hz'event and clk1hz=1) THEN IF(k1=25) THEN k1<=0; ELSE k1<=k1+1; END IF; END IF; END PROCESS; PROCESS(k1) BEGIN led0<='0'; led1<='0'; led2<='0'; led3<='0'; led4<='0';

led6<='0'; led7<='0'; led8<='0'; IF(k1=0) THEN led0<='1'; ELSIF(k1=1) THEN led1<='1'; ELSIF(k1=2) THEN led2<='1'; ELSIF(k1=3) THEN led3<='1'; ELSIF(k1=4) THEN led4<='1'; ELSIF(k1=5) THEN led5<='1'; ELSIF(k1=6) THEN led6<='1'; ELSIF(k1=7) THEN led7<='1'; ELSIF(k1=8) THEN led8<='1'; ELSIF(k1=9) THEN led7<='1'; ELSIF(k1=10) THEN led6<='1'; ELSIF(k1=11) THEN led5<='1'; ELSIF(k1=12) THEN led4<='1'; ELSIF(k1=13) THEN led3<='1'; ELSIF(k1=14) THEN led2<='1'; ELSIF(k1=15) THEN led1<='1'; ELSIF(k1=16) THEN led0<='1'; ELSIF(k1=17) THEN led4<='1'; ELSIF(k1=18) THEN led3<='1';

VHDL实验报告03137

VHDL实验报告 60 庄炜旭实验三. 4位可逆计数器,4位可逆二进制代码-格雷码转换器设计 一.实验目的 学习时序电路的设计,仿真和硬件测试,进一步熟悉VHDL设计技术 1. 学习4位可逆计数器的设计 2. 学习4位可逆二进制代码-格雷码转换器设计 二.实验内容 设计4位可逆计数器,及4位可逆二进制代码-格雷码转换器,并仿真,下载。 [具体要求] 1.4位可逆计数器 a)使用CLOCK_50作为输入时钟,其频率为50MHz(对于频率大于50Hz的闪烁, 人眼会看到连续的光),因而,对其进行225的分频后,再用于时钟控制。(可 利用实验一) b)使用拨码开关SW17作为模式控制,置‘1’时为加法计数器,置‘0’时为减 法计数器,同时使用LEDR17显示SW17的值。 c)使用KEY3作为异步复位开关(按下时为0,不按为1),当为加法计数器时, 置“0000”,当为减法计数器时,置“1111”。 d)使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高 位,LEDR0为低位。 2.4位可逆二进制代码――格雷码转换器 a)使用拨码开关SW17作为模式控制,置‘1’时为二进制代码―>格雷码转换, 置‘0’时为格雷码―>二进制代码,同时使用LEDR17显示SW17的值。 b)使用拨码开关SW3, SW2, SW1, SW0作为输入的被转换数,SW3为高位,SW0 为低位。 c)使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高 位,LEDR0为低位。 三.管脚设定 SW[0]PIN_N25 SW[1]PIN_N26 SW[2]PIN_P25 SW[3] PIN_AE14 SW[17] PIN_V2 LEDR[0] PIN_AE23 LEDR[1] PIN_AF23 LEDR[2] PIN_AB21 LEDR[3] PIN_AC22 LEDR[17] PIN_AD12 KEY[3] PIN_W26

EDA-常见实例源程序代码vhdl

第4章用VHDL程序实现常用逻辑电路4.1 组合逻辑电路设计 4.1.1 基本逻辑门 library ieee; use iee.std_logic_1164.all; entity jbm is port(a,b: in bit; f1,f2,f3,f4,f5,f: out bit); end jbm; architecture a of jbm is begin f1<=a and b; --构成与门 f2<=a or b; --构成或门 f<=not a; --构成非门 f3<=a nand b; --构成与非门 f4<=a nor b; --构成异或门 f5<=not(a xor b); --构成异或非门即同门 end; 4.1.2 三态门 library ieee; use ieee.std_logic_1164.all; entity tri_s is port(enable: in std_logic; datain: in std_logic_vector(7 downto 0); dataout: out std_logic_vector(7 downto0)); end tri_s; architecture bhv of tri_s is begin process(enable,datain) begin if enable='1' then dataout<=datain; else dataout<="ZZZZZZZZ"; end if; end process; end bhv; 4.1.3 3-8译码器 library ieee; use ieee.std_logic_1164.all; entity decoder3_8 is port(a,b,c,g1,g2a,g2b: in std_logic; y: out std_logic_vector(7 downto 0)); end decoder3_8; architecture a of decoder3_8 is signal dz:std_logic_vector(2 downto 0); begin dz<=c&b&a; process (dz,g1,g2a,g2b) begin if(g1='1'and g2a='0'and g2b='0')then case dz is when "000"=> y<="11111110"; when "001"=> y<="11111101"; when "010"=> y<="11111011"; when "011"=> y<="11110111"; when "100"=> y<="11101111"; when "101"=> y<="11011111"; when "110"=> y<="10111111"; when "111"=> y<="01111111"; when others=>y<="XXXXXXXX"; end case; else y<="11111111"; end if; end process; 4.1.4 优先编码器

基于VHDL的自动售货机的设计与实现

自动售货机实验报告 一、设计任务 设计一个自动售货饮料机,设每瓶饮料2.5元,投币口有两个,1元硬币(one)或5角硬币(half),每个时刻可以输入其中一种硬币,自动售货机有找零钱功能,oute为出货,outm为找零。 二、设计过程 1.设计思路: 状态定义:s0表示初态,s1表示投入5角,s2表示投入1元,s3表示投入1元5角,s4表示投入2元,s5表示投入2元5角,s6表示投入3元。 输入信号:state_outputs(0)表示输入货物,comb_outputs(1)表示找5角硬币,输入信号为1 表示投入硬币,输入信号为1表示未投入硬币。 输出信号:comb_outputs(0)表示输出货物,comb_outputs(1)表示找5角零钱,输出信号为1表示输出货物或找零,输入信号为0表示不输出货物或找零。 根据设计要求分析,得到状态转化图如下图所示,其中状态为s0、S1、S2、S3、S4、S5、S6;输入为state_inputs(0,1);输出为comb_outouts(0,1);输入仅与状态有关,因此将输入写在状态圈内部。

2.设计步骤: (1)创建工程。打开QuartusII ,创建一个新的工程并命名。根据实验室条件,选择的芯片为cyclone 系列中的EP1C6Q240C8芯片。 00

输入VHDL文本文件。新建文本文件VHDL file。输入程序并保存。程序如下:library ieee; use ieee.std_logic_1164.all; entity autosell is port(clk,reset :in std_logic; state_inputs:in std_logic_vector(0 to 1); comb_outputs:out std_logic_vector(0 to 1)); end autosell; architecture be of autosell is type fsm_st is(s0,s1,s2,s3,s4,s5,s6); signal current_state,next_state:fsm_st; begin reg:process(reset,clk) begin if reset='1'then current_state<=s0; elsif rising_edge(clk)then

基于VHDL语言的VGA程序

library ieee; use ieee.std_logic_1164.all; entity vgactr is port( c lk:in std_logic; rst:in std_logic; red:out std_logic; green:out std_logic; blue:out std_logic; H_Sync:out std_logic; V_Sync:out std_logic); end vgactr; architecture behavioral of vgactr is signal cnt_H:integer range 0 to 799; signal cnt_V:integer range 0 to 520; signal clk_H:std_logic:='0'; signal clk_V:std_logic:='0'; signal colorbuf:std_logic_vector(0 to 2); begin red<=colorbuf(0); green<=colorbuf(1); blue<=colorbuf(2); --50MHz分频为25MHz,作为水平扫描信号的时钟process(clk) variable n:integer range 0 to 1; begin if rising_edge(clk)then clk_H<=not clk_H; end if; end process; --水平扫描计数,并产生竖直扫描计数的时钟 process(clk_H,Rst) begin if rst='1' then cnt_H<=0; clk_V<='1'; elsif rising_edge(clk_H)then if cnt_H=799 then cnt_H<=cnt_H+1; end if;

VHDL实验报告论文

硬件描述语言期末实验报告 题目:硬件描述语言实现秒表功能 姓名xxxx 学号xxxxxxxxxx 年级专业xxxxxxxxxxxxx 指导教师xxxx 2012年6月20日

河北大学本科生VHDL硬件实验论文(设计) 硬件描述语言实现秒表功能 摘要 应用VHDL语言设计数字系统,很多设计工作可以在计算机上完成,从而缩短了数字系统的开发时间。我们尝试利用VHDL为开发工具设计数字秒表。 秒表的逻辑结构较简单,它主要由十进制计数器、六进制计数器、数据选择器、和显示译码器等组成。在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外整个秒表还需有一个启动信号,暂停信号和一个清零信号,以便秒表能随意停止及启动。 关键词:VHDL语言数字秒表时序仿真图

目录 一、实验目的 (1) 二、硬件要求 (1) 三、引脚说明 (1) 四、模块介绍 (2) 4.1.计数器(六、十进制) (2) 4.2.蜂鸣器 (2) 4.3.译码器 (3) 4.4.控制器 (4) 五、整体连接图 (5) 六、实验结果 (6) 七、实验总结 (6) 八、谢辞 (7) 九、附录 (7)

一实验目的 学习使用VHDL语言,以及EDA芯片的下载仿真。 二硬件要求 (1)主芯片EPF10K10LC84-4。 (2)蜂鸣器。 (3)8位八段扫描共阴极数码显示管。 (4)二个按键(暂停,开关)。 三引脚说明 3.1引脚设置 3.2信号说明 signal q:std_logic_vector(3 downto 0); --q是用于分频的信号。 signal state: std_logic_vector(3 downto 0); --state为状态信号,state为1时为暂停记录状态,为0时为正常显示计数状态。signal led: std_logic_vector(3 downto 0); --led为数码管扫描信号,通过对d1~d6的选择使数码管发光。

vhdl基本语法

VHDL 基础语法篇——VHDL VHDL硬件描述语言 1.1 VHDL概述 1.1.1 VHDL的特点 VHDL语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点,由于 VHDL语言来源于C、Fortran等计算机高级语言,在VHDL语言中保留了部分高级语言的原 语句,如if语句、子程序和函数等,便于阅读和应用。具体特点如下: 1. 支持从系统级到门级电路的描述,既支持自底向上(bottom-up)的设计也支持从顶向下 (top-down)的设计,同时也支持结构、行为和数据流三种形式的混合描述。 2. VHDL的设计单元的基本组成部分是实体(entity)和结构体(architecture),实体包含设 计系统单元的输入和输出端口信息,结构体描述设计单元的组成和行为,便于各模块之间数 据传送。利用单元(componet)、块(block)、过程(procure)和函数(function)等语句, 用结构化层次化的描述方法,使复杂电路的设计更加简便。采用包的概念,便于标准设计文 档资料的保存和广泛使用。 3. VHDL语言有常数、信号和变量三种数据对象,每一个数据对象都要指定数据类型,VHDL 的数据类型丰富,有数值数据类型和逻辑数据类型,有位型和位向量型。既支持预定义的数 据类型,又支持自定义的数据类型,其定义的数据类型具有明确的物理意义,VHDL是强类 型语言。 4. 数字系统有组合电路和时序电路,时序电路又分为同步和异步,电路的动作行为有并行 和串行动作,VHDL语言常用语句分为并行语句和顺序语句,完全能够描述复杂的电路结构 和行为状态。 1.1.2 VHDL语言的基本结构 VHDL语言是数字电路的硬件描述语言,在语句结构上吸取了Fortran和C等计算机高级 语言的语句,如IF语句、循环语句、函数和子程序等,只要具备高级语言的编程技能和数字 逻辑电路的设计基础,就可以在较短的时间内学会VHDL语言。但是VHDL毕竟是一种描述 数字电路的工业标准语言,该种语言的标识符号、数据类型、数据对象以及描述各种电路的 语句形式和程序结构等方面具有特殊的规定,如果一开始就介绍它的语法规定,会使初学者 感到枯燥无味,不得要领。较好的办法是选取几个具有代表性的VHDL程序实例,先介绍整 体的程序结构,再逐步介绍程序中的语法概念。 一个VHDL语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路, 或者是一个计数器,也可以是一个CPU。一般情况下,一个完整的VHDL语言程序至少要包含程序包、实体和结构体三个部分。实体给出电路单元的外部输入输出接口信号和引脚信 息,结构体给出了电路单元的内部结构和信号的行为特点, 程序包定义在设计结构体和实体 中将用到的常数、数据类型、子程序和设计好的电路单元等。 一位全加器的逻辑表达式是: S=A⊕B⊕Ci Co=AB+ACi+BCi 全加器的VHDL程序的文件名称是fulladder.VHD,其中VHD是VHDL程序的文件扩展名, 程序如下: LIBRARY IEEE; --IEEE标准库 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fulladder IS -- fulladder是实体名称 PORT( A, B, Ci : IN STD_LOGIC; --定义输入/输出信号 Co, S : OUT STD_LOGIC ); END fulladder; ARCHITECTURE addstr OF fulladder IS --addstr是结构体名 BEGIN S <= A XOR B XOR Ci; Co <= (A AND B) OR (A AND Ci) OR (B AND Ci); END addstr; 从这个例子中可以看出,一段完整的VHDL代码主要由以下几部分组成: 第一部分是程序包,程序包是用VHDL语言编写的共享文件,定义在设计结构体和实体

(完整版)基于VHDL毕业设计论文

本科毕业设计基于VHDL的FIR滤波器设计

学院名称工程学院专业名称电子信息工程 论文提交日 期2012年5月14 日 论文答辩日 期2012年5月19 日 摘要 常用的实时数字信号处理的器件有可编程的数字信号处理(DSP)芯片(如AD系列、TI系列)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等。 有限长冲击响应(FIR)滤波器,由于FIR系统只有零点、系统稳定,便于实现FFT(快速傅里叶变换)算法、运算速度快、线性相位的特性和设计更为灵活等突出优点而在工程实际中获得广泛应用,属于数字信号处理的基本模块之一。本论文对基于FPGA的FIR数字滤波器实现进行了研究,所做的主要工作如下: 1.介绍了FIR数字滤波器的基本理论和FPGA的基本概况,以及FPGA设计流程、设计指导原则和常用的设计指导思想与技巧。 2.以FIR数字滤波器的基本理论为依据,使用分布式算法为滤波器的硬件实现算法,并对其进行了详细的讨论。 3.设计出一个16阶低通线性相位FIR滤波器实例。设计使用VHDL 语言通过Quartus II软件进行仿真。 关键词:FIR滤波器FPGA Quartus II Matlab VHDL The Design of FIR Filter base on VHDL (College of Engineering, South China Agricultural University,Guangzhou China) Abstract: Common real-time digital signal processing devices -specific

原创:VHDL verilog 互相调用的例子

给两个例子, 一个是VHDL做顶层调用verilog 一个是verilog 做顶层调用VHDL VHDL调用verilog: module sync_block #( parameter INITIALISE = 2'b00 ) ( input clk, // clock to be sync'ed to input data_in, // Data to be 'synced' output data_out // synced data ); //VHD entity dcm_reset is port( ref_reset : in std_logic; -- Synchronous reset in ref_clk domain ref_clk : in std_logic; -- Reliable reference clock of known frequency (125MHz) dcm_locked : in std_logic; -- The DCM locked signal dcm_reset : out std_logic -- The reset signal which should be connected to the DCM ); end dcm_reset; component sync_block port ( clk : in std_logic; -- clock to be sync'ed to data_in : in std_logic; -- Data to be 'synced' data_out : out std_logic -- synced data ); end component; dcm_locked_sync_tx : sync_block port map( clk => ref_clk, data_in => dcm_locked, data_out => dcm_locked_sync ); verilog调用VHDL:(目标还是上述VHDL模块) module gmii_if ( …… ); dcm_reset rx_dcm_reset ( .ref_reset (tx_reset), .ref_clk (tx_clk),

基于VHDL语言的EDA实验报告(附源码)

EDA 实验报告 ——多功能电子钟 姓名:张红义 班级:10级电科五班 学号:1008101143 指导老师:贾树恒

电子钟包括:主控模块,计时模块,闹钟模块,辅控模块,显示模块,蜂鸣器模块,分频器模块。 1.主控模块: 主要功能:控制整个系统,输出现在的状态,以及按键信息。 源代码: libraryieee; use ieee.std_logic_1164.all; useieee.std_logic_arith.all; useieee.std_logic_unsigned.all; entity mc is port(functionswitch,k,set,lightkey: in std_logic; chose21,setout: out std_logic; lightswitch:bufferstd_logic; modeout,kmodeout : out std_logic_vector(1 downto 0); setcs,setcm,setch,setas,setam,setah:outstd_logic); end mc; architecture work of mc is signalmode,kmode:std_logic_vector(1 downto 0); signal light,chose21buf:std_logic; signalsetcount:std_logic_vector(5 downto 0); begin process(functionswitch,k,set,lightkey) begin iffunctionswitch'event and functionswitch='1' then mode<=mode+'1'; end if; iflightkey'event and lightkey='1' then lightswitch<=not lightswitch; end if; if mode="01" thenchose21buf<='0'; else chose21buf<='1'; end if; ifk'event and k='1' then if mode="01" or mode="11" then kmode<=kmode+'1'; end if;end if; if set='1' then if mode = "01" then ifkmode="01" then setcount<="000001"; elsifkmode="10" thensetcount<="000010"; elsifkmode="11" then setcount<="000100";

VHDL实验(完整版)

实验一 Quartus II软件使用与十进制计数器 一、实验目的 熟悉使用Quartus II软件 二、实验内容 安装Quartus II软件并成功注册、使用Quartus II软件建立工程并完成十进制计数器三、实验仪器、设备 计算机、Quartus II软件 四、实验步骤 1.打开安装文件位于…quartusII6.0\disk1\install.exe,根据提示进行下一步操作,在弹出 框中选择第一个选项,install Quartus II and Related Software。 Quartus II的安装步骤1 接下来的安装中选择下一步,到下图选择界面。只勾选安装Quartus II 6.0即可。 Quartus II的安装步骤2

2.完成安装步骤2后选择下一步至下图所示,选择完全安装complete,再继续点击下 一步至安装开始。 完全安装Quartus II软件 软件安装途中出现如下图所示情况时,选择安装文件中的…disk2\disk2\quartus,然后选择确定——OK继续安装直到结束。 安装过程中换disk2路径 Quartus II软件的安装至此结束,此安装步骤WINXP/WIN 7均有效,WIN8若有问题,请修改兼容权限。 3.软件注册。软件安装结束后打开Quartus II软件将出现下图所示情况,这是没有注册的提醒,我们必须先进行注册才能建立工程文件,若大家忽略了这个提示窗口,直接进行工程建立等工作,任何仿真图和编译功能都无法正常使用,等于白费功夫浪费时间,还要重新做,非常影响学习兴趣和情绪。 (由于软件注册是绑定MAC物理地址,所以每台机器的license 是完全不一样的,实验室的电脑已经安装好了Quartus II软件,但是没有注册,所以做实验的时候一点要先注册,不然就白做了)

基于VHDL的电子密码锁

华南师范大学课程设计实验报告 课程名称:可编程数字系统设计 课程设计题目:电子密码锁 姓名:程硕 学院:物理与电信工程学院 专业:理综一班 年级:2011 学号:

一、设计原理 用VHDL设计电子密码锁方案:作为通用电子密码锁,主要由 3 个部分组成:数字密码按键输入电路、密码锁控制电路和密码锁显示电路,作为电子密码锁的输入电路。可供选择的方案有数字机械式键盘和触摸式数字键盘等多种。 (1)密码锁输入电路包括时序产生电路、键盘检测电路、键盘消抖电路等几个小的功能电路。 (2)密码锁控制电路包括按键数据存储电路,恢复出厂密码、两次正确输入后可修改密码、密码核对,多次错误报警,清屏等几个小的功能电路。 (3)八段数码管显示电路主要将待显示数据的BCD码转换成数码器的八段显示驱动编码。 二、系统分析 本次课程设计成功地设计了一个简单的数字电子密码锁,密码为 4 位。将电子密码锁分为以下几个模块:按键消抖模块、密码锁逻辑控制模块和密码锁显示模块,实现了以下功能: (1)密码输入:KEY1按下一次,数码管上显示数字加一,相应位置输入密码加一 (2)位置选择:KEY2按下一次,数码管选择位左移一位 (3)密码确认:KEY3按下一次,比较外部输入密码与原密码,正确LED长亮,错误LED 变暗,同时显示密码置0; (4)密码修改:正确输入两次密码后,按下KEY4一次,将当前输入设为新的密码; (5)清屏:KEY5按下一次,外部输入置0; (6)恢复出厂设置:连续按下KEY5三次后恢复出厂密码“1234”; 三、程序设计 1由于程序稍显庞大,故采取分层次设计的方法,顶层采用画图法设计,底层采用VHDL语言进行设计。顶层电路图如图1所示 图1 Xiao_dou模块为按键消抖模块,main为密码锁控制模块,yima为数码管显示译码模块。Set_shuma

VHDL实验报告

专用集成电路实验报告 13050Z01 1305024237 刘德文

实验一开发平台软件安装与认知实验 实验内容 1、本实验以三线八线译码器(LS74138)为例,在Xilinx ISE 9.2软件平台上完成设计 电路的VHDL文本输入、语法检查、编译、仿真、管脚分配和编程下载等操作。下载芯片选择Xilinx公司的CoolRunner II系列XC2C256-7PQ208作为目标仿真芯片。 2、用1中所设计的的三线八线译码器(LS74138)生成一个LS74138元件,在Xilinx ISE 9.2软件原理图设计平台上完成LS74138元件的调用,用原理图的方法设计三线八线译 码器(LS74138),实现编译,仿真,管脚分配和编程下载等操作。 源程序: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM; --use UNISIM.VComponents.all; entity ls74138 is Port ( g1 : in std_logic; g2 : in std_logic; inp : in std_logic_vector(2 downto 0); y : out std_logic_vector(7 downto 0)); end ls74138; architecture Behavioral of ls74138 is begin process(g1,g2,inp) begin if((g1 and g2)='1') then case inp is when "000"=>y<="00000001"; when "001"=>y<="00000010";

程序实例1:ASK调制与解调VHDL程序及仿真

ASK调制VHDL程序及仿真 1. ASK调制VHDL程序 --文件名:PL_ASK --功能:基于VHDL硬件描述语言,对基带信号进行ASK振幅调制 --最后修改日期:2004.3.16 library ieee; use ieee.std_logic_arith.all; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity PL_ASK is port(clk :in std_logic; --系统时钟 start :in std_logic; --开始调制信号 x :in std_logic; --基带信号 y :out std_logic); --调制信号 end PL_ASK; architecture behav of PL_ASK is signal q:integer range 0 to 3; --分频计数器 signal f :std_logic; --载波信号 begin process(clk) begin if clk'event and clk='1' then if start='0' then q<=0; elsif q<=1 then f<='1';q<=q+1; --改变q后面数字的大小,就可以改变载波信号的占空比 elsif q=3 then f<='0';q<=0; --改变q后面数字的大小,就可以改变载波信号的频率 else f<='0';q<=q+1; end if; end if; end process;

y<=x and f; --对基带码进行调制 end behav; 2. ASK调制VHDL程序仿真图及注释 ASK调制VHDL程序仿真图及注释如图8.9.7所示。 (a)ASK调制仿真全图 注:a.基带码长等于载波f的6个周期。 b. 输出的调制信号y滞后于输入基带信号x一个clk时间。 (b)ASK调制仿真局部放大图 图8.9.7 ASK调制VHDL程序仿真图及注释 8.9.6 ASK解调VHDL程序及仿真 1.ASK解调VHDL程序 --文件名:PL_ASK2 --功能:基于VHDL硬件描述语言,对ASK调制信号进行解调 --最后修改日期:2004.2.12 library ieee; use ieee.std_logic_arith.all;

基于VHDL的串口通信程序

基于VHDL的串口通信程序 时间:2009-10-14 来源: 作者: 点击:1344 字体大小:【大中小】 -- 本模块的功能是验证实现和PC机进行基本的串口通信的功能。需要在 --PC机上安装一个串口调试工具来验证程序的功能。 -- 程序实现了一个收发一帧10个bit(即无奇偶校验位)的串口控 --制器,10个bit是1位起始位,8个数据位,1个结束 --位。串口的波特律由程序中定义的div_par参数决定,更改该参数可以实 --现相应的波特率。程序当前设定的div_par 的值是0x104,对应的波特率是 --9600。用一个8倍波特率的时钟将发送或接受每一位bit的周期时间 --划分为8个时隙以使通信同步. --程序的工作过程是:串口处于全双工工作状态,按动key2,CPLD向PC发送皐elcome" --字符串(串口调试工具设成按ASCII码接受方式);PC可随时向CPLD发送0-F的十六进制 --数据,CPLD接受后显示在7段数码管上。 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY UART IS PORT ( clk : IN std_logic; rst : IN std_logic; rxd : IN std_logic; --串行数据接收端 txd : OUT std_logic; --串行数据发送端 en : OUT std_logic_vector(7 downto 0); -- 数码管使能 seg_data : OUT std_logic_vector(7 DOWNTO 0); --数码管数据 key_input : IN std_logic --按键输入 ); END UART; ARCHITECTURE arch OF UART IS --//////////////////inner reg//////////////////// SIGNAL div_reg : std_logic_vector(15 DOWNTO 0);--分频计数器,分频值由波特率决定。分频后得到频率8倍波特率的时钟 SIGNAL div8_tras_reg : std_logic_vector(2 DOWNTO 0);--该寄存器的计数值对应发送时当前位于的时隙数 SIGNAL div8_rec_reg : std_logic_vector(2 DOWNTO 0); --寄存器的计数值对应接收时当前位于的时隙数 SIGNAL state_tras : std_logic_vector(3 DOWNTO 0); -- 发送状态寄存器 SIGNAL state_rec : std_logic_vector(3 DOWNTO 0); -- 接受状态寄存器 SIGNAL clkbaud_tras : std_logic; --以波特率为频率的发送使能信号 SIGNAL clkbaud_rec : std_logic; --以波特率为频率的接受使能信号

vhdl实验报告

福建农林大学计算机与信息学院 信息工程类 实验报告 2013年11 月13 日

实验项目列表

福建农林大学计算机与信息学院信息工程类实验报告 系:电子信息工程系专业:电子信息工程年级: 2010级 姓名:学号:实验课程: VHDL数字系统设计 实验室号:__ 田C407 实验设备号: 07 实验时间: 11.12 指导教师签字:成绩: 实验一数控分频器的设计 1.实验目的和要求 学习数控分频器的设计、分析和测试方法。 2.实验原理 信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例1所示。 数控分频器的仿真波形如图1所示:输入不同的CLK频率和预置值D,给出如图1的时序波形。 100.0μs200.0μs300.0μs400.0μs 图1 当给出不同输入值D时,FOUT输出不同频率(CLK周期=50ns) 3.主要仪器设备(实验用的软硬件环境) 实验的硬件环境是: 微机一台 GW48 EDA实验开发系统一套 电源线一根 十芯JTAG口线一根 USB下载线一根 USB下载器一个 示波器 实验的软件环境是: Quartus II 9.0软件

4.操作方法与实验步骤 (1)创建工程,并命名位test。 (2)打开QuartusII,建立VHDL文件,并输入设计程序。保存为DVF. (3)选择目标器件。Acex1k—EP1K100QC208-3。 (4)启动编译。 (5)建立仿真波形图。 (6)仿真测试和波形分析。 (7)引脚锁定编译。 (8)编程下载。 (9)硬件测试 5.实验内容及实验数据记录 在实验系统上硬件验证例5-20的功能。可选实验电路模式1(第一章图4);键2/键1负责输入8位预置数D(PIO7-PIO0);CLK由clock0输入,频率选65536Hz 或更高(确保分频后落在音频范围);输出FOUT接扬声器(SPKER)。编译下载后进行硬件测试:改变键2/键1的输入值,可听到不同音调的声音。 6.实验数据处理与分析 1)实验代码 【例1】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DVF IS PORT ( CLK : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); FOUT : OUT STD_LOGIC ); END; ARCHITECTURE one OF DVF IS SIGNAL FULL : STD_LOGIC; BEGIN P_REG: PROCESS(CLK) VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLK'EVENT AND CLK = '1' THEN IF CNT8 = "11111111" THEN CNT8 := D; --当CNT8计数计满时,输入数据D被同步预置给计数器CNT8 FULL <= '1'; --同时使溢出标志信号FULL输出为高电平 ELSE CNT8 := CNT8 + 1; --否则继续作加1计数 FULL <= '0'; --且输出溢出标志信号FULL为低电平 END IF; END IF; END PROCESS P_REG ; P_DIV: PROCESS(FULL) VARIABLE CNT2 : STD_LOGIC; BEGIN IF FULL'EVENT AND FULL = '1' THEN CNT2 := NOT CNT2; --如果溢出标志信号FULL为高电平,D触发器输出取反

相关主题