笔记:FPGA与VHDL语言学习1

FPGA与VHDL语言学习1

目录

1.EDA,fpga,asic
2.CPLD与FPGA
3.设计一个三选一FPGA程序
4.使用由半加器与全加器程序生成一个f_adder全加器图形模块。试用4个f_adder模块组成一个4位全加器。
5.4~16译码器
6.设计乘法器

1.EDA技术与ASIC设计和FPGA开发有什么关系?
什么是综合?有哪些类型?综合在电子设计自动化中的地位是什么?

答:EDA是一门专业学科技术,ASIC是EDA中要实现电路,而FPGA是器件。综合:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
综合的分类:
1)自然语言综合
2)行为综合
3)逻辑综合
4)版图综合或结构综合

综合在电子设计自动化中的地位:
综合在电子设计自动化中是核心地位。综合器具有更复杂的工作环境,综合器在接受VHDL程序并准备对其综合前,必须获得与最终实现设计电路硬件特征相关的工艺库信息,以及获得优化综合的诸多约束条件信息;根据工艺库和约束条件信息,将VHDL程序转化成电路实现的相关信息。

1、CPLD与FPGA在内部硬件结构原理上有那些不同?
2、CPLD与FPGA芯片在实践应用中的选择有那些区别?

(1)内部硬件结构原理上:
FPGA:由LAB单元、可编程连线和IO控制块组成。一个LAB单元包含若干个LE模块。FPGA基于小单元(LE模块)。查找表是FPGA的基本逻辑单元。(每次输入信号查找对应结果,然后输出)。集成度高,内部触发器多。
CPLD:由宏单元、可编程连线、IO控制块组成。基于大单元。宏单元模块是CPLD的逻辑功能实现单元。输出可以选择D触发器,也可以通过其他路线。CPLD适合实现组合逻辑,在配合后面的触发器,也能实现一定的逻辑时序。
本质:CPLD是由组成电路构成,而FPGA像是一个巨大的查找表。
不同点:

1) CPLD的逻辑阵列更适合可重复编程的EEPROM或Flash技术来实现。而FPGA显然是利用SRAM技术更合适。
2) 由于是EEPROM或者Flash工艺决定了CPLD是有一定的擦写次数限制的。而FPGA在实际使用中几乎可以说是无配置次数限制。
3) CPLD由于采用的是EEPROM或者Flash工艺所以配置掉电后不丢失,也就不需要外挂配置芯片。而FPGA采用的是SRAM工艺,配置在掉电后就没有了,因此需要一个外部配置芯片。
4) CPLD由于不需要上电重新配置,所以上电后可以马上工作。而FPGA上电后需要配置时间,逻辑量的大小配置方式的区别也会影响配置时间的长短。
5) 由于CPLD的连续式布线结构,决定了它的时序延时是均匀和固定的。而FPGA采用的分段式布线结构造成了延时不固定。
6) 同样由于结构的差异,CPLD更适合完成的是复杂的组合逻辑,如编、译码的工作。而FPGA更适合做复杂的时序逻辑。换句话说就是FPGA更适合触发器丰富的逻辑结构,CPLD适合于触发器有限但是乘积项丰富的逻辑结构。
7)CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。
8)CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。

(2)实践应用上的不同点:
1) 由于工艺难度的差异,CPLD一般集成度较低,大多为几千门或几万门的芯片规模,做到几十万门已经很困难。而FPGA基于SRAM工艺,集成度更高,可以轻松做到几十万门甚至几百万门的芯片规模,最新的FPGA产品已经接近千万门的规模。

2) 也是由于工艺的原因,一般CPLD会比FPGA的功耗高

3) CPLD的安全性更高。由于配置芯片的存在,FPGA的保密性就会比CPLD略差。逻辑数据有可能被读取。(当然FPGA芯片会有一定的加密措施)

4)在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。

5)CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。

6)fpga 的寄存器空间大于cpld可以实现的功能更多。

1、下载一个Quartus ii 13 版软件,在电脑上安装并破解,测试软件是否安装成功。
2、在quartus ii 软件安装成功后,参照学堂在线上的二选一FPGA程序的设计及波形图仿真结果,试设计一个三选一FPGA程序并进行波形图仿真。
3、将程序设计到完成仿真的操作过程的步骤(10个左右)整理成文本及仿真波形图结果截图。

1.要编写VHDL程序,首先建立一个工程
2.因为我们要做一个三选一电路选择器,将文件命名为MUX_3_1。
3.然后进行器件选择,在这里我们选择cyclone3型中的EP3C25F324C8器件。
4.最终成功建立了一个名为MUX_3_1的工程。
新建一个VHDL file以便我们一会儿编写三选一的代码。
5.当我们编写代码要注意:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
(这里是设计库和标准程序包)
ENTITY MUX_3_ IS
PORT(A,B,C,S0,S1 : IN STD_LOGIC;
Y : OUT STD_LOGIC);
END ENTITY MUX_3_1;
(这里是定义实体,实体的名字叫MUX_3_1,,名字应当与工程名字一致)
ARCHITECTURE BHV OF MUX_3_1 IS
SIGNAL S :STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
S <= S1 & S0;
PROCESS(S1,S0) BEGIN
  CASE (S) IS
 WHEN "00" => Y<=A ;
 WHEN "01" => Y<=B ;
 WHEN "11" => Y<=C ;
 WHEN OTHERS => NULL ;
  END CASE;
 END PROCESS;
END BHV ;
(这里是定义结构体表达,规定了程序的功能,
例如:当s0&s1为00时,将A的值赋给Y)

6.接下来我们对VHDL文件进行保存和编译
编译成功,没有错误,虽然有warning,但是我们可以先验证一下它是否能实现我们想要的功能。
7.如果不能实现就来重点看警告。让我们再对文件进行组建,成功之后为了验证我们的代码,我们新建一个波形文件
8.点击左侧空白处添加节点,选择node finder
9.点击LIST将需要的节点导入仿真波形的对话框中。
左侧是我们编程中的各个节点,右侧是它的波形。

10.我们再来设置一下输入的数据,选择方波,时长长短不一,其中时间应在10ns~100ns中选择

设置仿真器的模式为Quartus2 Simuliation
14.png
11.最终运行一下,输出波形Y就会随着输入的变化而变化,
15.png
12.让我们来仔细观察一下,当s1&s0为01时,Y与B路的电平相同都为低电平,因此,这个代码编写的没有错误。验证成功。

1、参考PPT第三章第四节,使用由半加器与全加器程序生成一个f_adder全加器图形模块。
2、试用4个f_adder模块组成一个4位全加器。对4位全加器仿真测试。把4位全加器设计图及仿真测试图通过作业系统上交,并说明仿真测试结果正确的理由。

在这里插入图片描述
例如,在15ns-20ns之间,加数A=1101B=13,加数B=0001B=1,低位进位为0,因此结果S=1110B=14
在这里插入图片描述

在20ns-25ns之间,加数A=1110B=14,加数B=0001B=1,低位进位为1,结果为16,溢出,因此S=0000B,且进位位Cout=1

Cout为Cin,A,B按位加法之后的进位位,因此,结果正确。

1、参考PPT第三章第五节的3~8译码器程序。试设计一个4~16译码器。把4~16译码器程序及仿真测试图通过作业系统上交,并说明仿真测试结果正确的理由。
我的答案:9分
1.jpg

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY decoder4to16 IS

   PORT(din : IN STD_LOGIC_VECTOR (3 DOWNTO 0);

  dout : OUT BIT_VECTOR (15 DOWNTO 0));

END decoder4to16;

ARCHITECTURE behave OF decoder4to16 IS

BEGIN 
  dout<="0000000000000001" SLL CONV_INTEGER(din);

END behave;

在设计程序时:

1.首先定义设计库和标准程序包,为是用类型转换函数要打开程序包IEEE.STD_LOGIC_UNSIGNED.ALL

2.实体:定义din为四元素标准逻辑向量,din(0~3)都为标准逻辑位类型STD_LOGIC,dout同理位16元素标准逻辑向量

3.结构体:SLL是移位操作符,将位矢量左移,右面跟进的位补零。 第12句的意思是:将dout位矢量左移, 其中被位移部分要求是常数。(因此将din转换为整数类型CONV_INTEGER)从而实现4-16译码功能。

4OC@XZNY{517__6)`BX01R7.png
在仿真波形中:

(1)验证功能时,看din第一个数据为0111=7,对应的dout为0000 0000 1000 0000,也就是dout[7]=1其他位为0,符合译码器功能。

(2)再看第二个数据验证,din第二个数据为1000=8,对应的dout为0000 0001 0000 0000,也就是dout[8]=1其他位为0,符合译码器功能。验证通过。

1、参考PPT第三章第五节的不同方法的乘法器程序,选择一个乘法器程序进行仿真测试。把乘法器程序及仿真测试图通过作业系统上交,并说明仿真测试结果正确的理由。
(1)sub.vhd是无符号乘法器

3.15CODEWU.png

它使用了程序包STD_LOGIC_UNSIGNED故在程序中的所有数据都做无符号处理, 在仿真的波形图可以看出它的运算结果都是无符号数。

3.15WU.png

在如上的仿真图中,当输入C=0101=5,D=1001=9时,RA=C+D=E=14,RM=2D (H)=45 (O)=5*9,因此第一组正确;

当输入C=1100=12,D=1001=9时,RA=C+D=5 => (12+9-16)=5,RM=6C (H)=108(O)=12*9,因此第二组正确,验证完毕。

(2)COMP.vhd是有符号乘法器

3,17YOU.png

它与(1)不同的是,(2)用了另一种方式来定义符号类型。它的程序包含有STD_LOGIC_ARITH,

并将端口信号定义为SIGNED类型,因此,在仿真的波形图可以看出它的运算结果都是有符号数。

3.17YOUFUHAO.png

在如上的仿真图中,

当输入C=0001=1,D=1001(补码)=-7时,C>D(C是正数大于负数),R=1,RA=C+D=-6=1010(补码)=A,RM=F9(H)=1111 1001(补码)=>=-7(O) ,第一组正确;

当输入C=0011=3,D=1001(补码)=-7时,C>D(C是正数大于负数),R=1,RA=C+D=-4=1100(补码)=C,RM=EB(H)=1110 1011(补码)=-21(O) ,因此第二组正确,验证完毕。

(3)移位相加型加法器

这个乘法器仅仅通过改变其中的参数S,即能增加乘法器的位数。 并且这个参数S的数值可以从外部,即顶层设计中传送进入,从而能在顶层设计中通过例化语句轻易改变此乘法器的尺寸。

BB@H0TJDB`HVTM.png

它的仿真图同无符号乘法器。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《FPGA自学笔记——设计与验证》是一本关于FPGA设计和验证的入门教材。本书以VHDL和Verilog两种HDL语言为主要工具,通过实例讲解FPGA的基本概念、设计流程和验证方法。同时,本书还通过实例演示了如何使用Xilinx ISE和ModelSim这两个主流软件工具进行FPGA设计和验证。 本书的内容分为五个部分,分别是FPGA基础知识、FPGA设计流程、FPGA验证方法、FPGA性能优化以及FPGA应用实例。其中,FPGA基础知识部分介绍了FPGA的基本构成、组成部件以及通用数字电路设计知识;FPGA设计流程部分从设计输入、RTL设计、布局布线、实现生成等方面详细介绍了FPGA设计流程;FPGA验证方法部分主要介绍了功能验证和时序验证这两个方面的知识;FPGA性能优化部分介绍了FPGA的几种性能指标以及如何通过一定的优化方法提高FPGA性能;FPGA应用实例部分通过几个实例演示了如何应用FPGA进行数字电路设计。 本书的难度适中,适合初学者学习和参考,同时也可以作为FPGA初学者的参考书籍。本书涉及的知识点较为全面,可以为初学者提供一个全面的FPGA设计和验证入门指南。其内容易于理解,实例讲解深入浅出,对于想要学习FPGA设计和验证的人群来说是一本很好的参考书。 ### 回答2: 《FPGA自学笔记——设计与验证》PDF是一本很好的自学FPGA的书籍。这本书包含了FPGA基本概念、设计流程、Verilog HDL语言开发工具、测试方法等多个主题,非常详尽地介绍了FPGA的基本知识和开发技巧。这本书可以帮助我们更好地理解FPGA的原理和功能,从而更加熟练地掌握FPGA的设计和验证。 此外,这本书还提供了很多实例来帮助我们更好地理解FPGA的设计和验证。这些实例包含多种应用场景,例如数字逻辑、时序控制、通信等,能够帮助我们从不同角度学习FPGA的相关知识。而且,这本书还提供了实验指导,通过做实验来让我们更深入地理解FPGA的各种知识和技能。 总之,这本书《FPGA自学笔记——设计与验证》PDF是一本非常好的FPGA自学指南,通过阅这本书,我们可以掌握FPGA基本知识和开发技能,更好地应用FPGA进行各种应用开发。我相信,完这本书,你一定能够对FPGA有更深刻的认识,并且能够灵活运用FPGA进行各种应用开发。 ### 回答3: 《FPGA自学笔记——设计与验证》是一本以FPGA为研究对象的书籍。它详细介绍了FPGA的诸多特性和应用。该书主要分为两部分,第一部分介绍了FPGA的基本概念,并讲解了Verilog的语法和使用方法。第二部分是实践性较强的部分,通过编写案例代码进行实际操作。 该书着重强调了FPGA设计流程,通过案例演示了FPGA设计的全过程。该书还提供了大量的练习题和案例代码,者可以通过反复练习和实际操作,逐渐掌握FPGA的设计和验证技能。 总体来说,《FPGA自学笔记——设计与验证》是一本非常实用的FPGA入门教材。它从基础知识入手,循序渐进地讲解了FPGA的各个方面。并且,该书重点讲解了如何运用Verilog语言进行FPGA设计,这对FPGA初学者来说是一个非常实用的指南。 如果你对FPGA领域感兴趣,且希望通过自学来掌握FPGA的基本操作和设计方法,那么《FPGA自学笔记——设计与验证》是一本非常值得推荐的书籍。  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sr_shirui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值