笔记:FPGA与VHDL语言学习3

FPGA与VHDL语言学习3

目录

1. LPM_RAM的设置和调用方法,设计一个LPM_RAM
2. 简易正弦信号发生器(这里要使用的 data7X8 .mif 文件),要求用LPM设计一个七位计数器及对应的LPM_ROM
3. 《桶型移位寄存器设计》
4. 有符号数与无符号数比较器设计

1.参考PPT第七章第三节的LPM_RAM的设置和调用方法,参照图7-13至7-18,设计一个LPM_RAM,参照图7-19(这里要使用的 data7X8 .mif 文件, 参照图7-10,使用File→New→Memory Initalization File),进行仿真测试,并说明仿真测试结果正确的理由。
存储器初始化文件就是可配置于LPM_RAM或LPM_ROM中数据或程序代码。在设计中,通过EDA工具设计或设定的存储器中的代码文件必须由EDA软件在统一编译的时候自动调入,所以此类代码文件,即初始化文件的格式必须满足一定的要求。

1,mif文件的生成

(1)直接编译法

1.1.png

(2)专用mif生成器:Mif_maker

在这里插入图片描述

等多种方式,在本实验中,采用mif生成器生成mif正弦波文件。文件内数据如下图
1.3.png

  1. LPM_RAM的设计和调用

    用LPM设计完成RAMMD。设定RAM参数block type:auto;dual clock;设定RAM仅输入时钟控制;设定当写入时,同步读出原数据:old data;设定初始化mif文件和允许在系统编辑。

最后设计出顶层电路原理图,如下图所示
在这里插入图片描述

RAM波形图仿真结果如下,地址A是从0开始的,当写允许WREN=0时,读出RAM的数据,随着地址的递增,对应每一个时钟的上升沿,RAM中的数据被读出,他们分别是EE,EB,E7,E3等,正好与上图中mif文件的数据相符。说明初始化数据能被正常调入。

当写允许WREN=1时,地址A仍是从0开始的,数据D随着时钟上升沿,就会被写入。同时还可以观察到读出的数据EE,EB,E7,E3等,与输入的数据相符,即读出的是Old data , 与上图设置的相符合。当再次WREN=0时,由于地址再次从零开始,读出数据6D,F9,9E,35等,与写入数据相同。显然此RAM的各项功能符合要求。

2.2.png

  1. 利用时钟的双边沿控制数据读写的VHDL存储器描述程序。

3.1.png

VHDL设计的存储器描述仿真的结果与电路图顶层设计的仿真结果相同,如下图,同理也是正确的。
3.2.png
2.参考PPT第七章第四节的简易正弦信号发生器设计方法,设计一个简易正弦信号发生器(这里要使用的 data7X8 .mif 文件),要求用LPM设计一个七位计数器及对应的LPM_ROM,参照图7-25,用图形方式连接电路(因为没有硬件支持,不能加入D/A转换)。参照图7-26,对简易正弦信号发生器进行仿真测试,把简易正弦信号发生器设计图及仿真测试图(因为没有硬件支持,不能进行图7-27、7-28的仿真),并说明仿真测试结果正确的理由

制作简易的正弦信号发生器首先是调用ROM,这完全可以仿照调用RAM的流程对LPM_ROM进行定值和调用。首先,设计正弦波mif文件,如下图所示,通过MIF_maker.exe设计初始文件。

1.2.png

DATA7X8.mif文件的数据如下图所示。

1.3.png

定制调用的ROM模块的参数设置和初始化文件的配置如图,正弦波数据初始化文件用DATA7X8.mif

x3.jpg

x4.png

然后根据原理图中以定制完成的LPM_ROM设计一个建议的正弦信号发生器。

由如下三部分组成:

(1)计数器或地址信号发生器,这里根据以上ROM的参数,选择7位输出

(2)正弦信号数据存储器ROM(7位地址线,8位数据线),含有128个8位波形数据(一个正弦波形周期),即LPM_ROM:ROM78

(3)8位D/A(但在本实验中没有硬件)

x.1.png

上图所示的信号发生器结构图中,顶层文件是原理图工程ROMM,它包含两个部分:ROM地址信号发生器,由七位计数器担任;正弦数据ROM,由名为SIN_GNT的LPM_ROM模块构成。

地址发生器的时钟CLK的输入频率f0与每周期的波形点数(在此选择128点),以及D/A输出的频率关系是,f=f0/128。

注:下图是正弦信号发生器的顶层设计原理图,图中包含作为ROM地址信号发生器的七位计数器,和名为SIN_GNT的LPM_ROM模块构成。

x.2.png
上图是仿真结果,由波形可见,随着每一个时钟上升沿的到来,输出端口将正弦波数据一次输出,输出的数据与初始化mif中输入的数据相符。

3.参考FPGA与VHDL语言实验指导书(在海大学习通的资料文件夹中)中 的实验一《桶型移位寄存器设计》,输入程序代码,对代码进行编译,试用Assignments→Assignment Editor进行I/O引脚锁定,重新编译。这里因为没有硬件电路板支持,只是学习如何进行引脚锁定及软件与硬件的关系。对项目进行波形图仿真,把程序与引脚锁定图及仿真结果图,说明仿真结果正确的理由。
实验一、桶形移位寄存器设计

1.在 QuartusⅡ中创建项目,并完成相关设备配置。

2.新建 VHDL 文档,输入代码并编译通过。

  1. 原理:桶形移位寄存器即循环移位寄存器,在浮点加减运算、压缩/解压缩和图像处理算法中有应用,常用的是组合逻辑实现的桶形移位寄存器。8位桶形移位器是有8个数据输入位,8个数据输出位和3个控制输入位的组合逻辑电路,其输出字等于输入字的循环移位,循环移位的次数由控制输入位指定。比如,如果输入字等于ABCDEFGH(每个字母表示一位),且输入控制位为101(5),则输出字为FGHABCDE。

1.1.png

3.手动完成引脚分配,重新编译项目。

【注意:使用 SW[7]需要修改配置】 引脚分配:inp -> SW[7:0]; outp -> LEDR[7:0]; shift -> SW[17:15]

1.2.png

1.3.png

4.新建波形文件,分别进行功能仿真与时序仿真。

A.功能仿真:如第一格子中,shift=001,即将input中的数据1000 1111向左移位1位,并将右侧的空位用零补上,即Output=0001 1110。

第二个格子中,shift=101,即将input中的数据1011 0001向左移位5位,并将右侧的空位用零补上,即Output=0010 0000。仿真正确

1.4.png

B. 时序仿真:

1.5.png

  1. Netlist Viewers下的RTL结构

1.6.png
4. 参考FPGA与VHDL语言实验指导书中 的实验二《有符号数与无符号数比较器设计》,输入程序代码,对代码进行编译,试用Assignments→Assignment Editor进行I/O引脚锁定,重新编译。这里因为没有硬件电路板支持,只是学习如何进行引脚锁定及软件与硬件的关系。对项目进行波形图仿真,把程序与引脚锁定图及仿真结果图上交,说明仿真结果正确的理由。
实验二、有符号数与无符号数比较器设计

  1. 有符号数比较器:

1.在 QuartusⅡ中创建项目,并完成相关设备配置。

2.新建 VHDL 文档,输入代码并编译通过。

  1. 原理:其中 a 与 b 分别代表两个有符号数;x1 表示 a > b ,x2 表示 a = b ,x3 表示 a < b
    2.1.1.png

4.新建波形文件,分别进行功能仿真与时序仿真。有符号数比较器

A.功能仿真:如第一个格子,当 a 为127=0111 1111(B),b = 0; a > b,则x1 = 1,x2 = x3 = 0。

如第二个格子,当 a 为128=1000 0000(B) -0的表示方法,b = 0; a < b,则x3 = 1,x2 = x1 = 0。

如第三个格子,当 a 为255=1111 1111(B) -127的表示方法,b = 0; a < b,则x3 = 1,x2 = x1 = 0。

如第四个格子,当 a =b = 0; 则 x2 = 1,x1 = x2 = 0。验证成功。
2.1.2.png

B.时序仿真:

2.1.3.png

  1. Netlist Viewers下有符号数比较器的RTL结构

2.1.4.png

6.手动完成引脚分配,重新编译项目。

引脚分配:a -> SW[17:10]; b -> SW[7:0]; x1 -> LEDR[17]; x2 -> LEDR[8]; x3 -> LEDR[0]

2.1.5.png

2.1.6.png

  1. 无符号数比较器 a:

1.在 QuartusⅡ中创建项目,并完成相关设备配置。新建VHDL 文档,输入代码并编译通过。

2.2.1.png

2.新建波形文件,分别进行功能仿真与时序仿真。无符号数比较器

A.功能仿真:如第一个格子,当 a 为127=0111 1111(B),b = 0; a > b,则x1 = 1,x2 = x3 = 0。

如第二个格子,当 a 为128=1000 0000(B),b = 0; a > b,则x1 = 1,x2 = x3 = 0。

如第三个格子,当 a 为255=1111 1111(B),b = 0; a > b,则x1 = 1,x2 = x3 = 0。

如第四个格子,当 a =b = 0; 则 x2 = 1,x1 = x2 = 0。

在第450ns-500ns之间时,a = 1,b = 2; a < b,则x3 = 1,x1 = x2 = 0。验证成功。

2.2.2.png

B.时序仿真:2.2.3.png
3. Netlist Viewers下无符号数比较器a的RTL结构
2.2.4.png

  1. 无符号数比较器 b:

1.无符号数比较器b的仿真波形图同a。

2.3.1.png

  1. Netlist Viewers下无符号数比较器b的RTL结构

2.3.2.png

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
LPM_ROM和LPM_RAM设计 一 实验目的 掌握FPGA中LPM_ROM的设置: 1 作为只读寄存器ROM的工作特性和配置方法; 2 学习将程序代码或数据以MIF格式文件加载于LPM_ROM中; 掌握lpm_ram_dp的参数设置和使用方法: 1 掌握lpm_ram_dp作为随即存储器RAM的设置; 2 掌握lpm_ram_dp的工作特性和读写方法; 3 掌握lpm_ram_dp的仿真测试方法。 二 实验要求 1 LPM_ROM定制和测试 LPM_ROM的参数设置: LPM_ROM中数据的写入,即初始化文件的编写; LPM_ROM的实际应用,在GW48实验台上用N0.0电路模式测试。 2 LPM_RAM定制和测试 LPM_RAM的参数设置; LPM_RAM的实际应用,在GW48实验台上用N0.0电路模式测试。 三 实验原理 用户可编程硬件FPGA芯片设计,有许多可调用参数化库模块LPM(Library Parameterized Modules),课直接调用设置,利用嵌入式阵列块EAB(Embed Array Block)构成lpm_ROM,lpm_RAM等各种存储器结构。 Lpm_ROM有5组信号: 地执信号address[]; 数据信号q[]; 时钟信号inclock、outclock; 允许信号memenable. 其参数是可以设定的。由于ROM是只读寄存器,它的数据口试单向的输出端口,数据是在对FPGA现场配置时,通过配置文件一起写入存储单元的。 Lpm_ram_dq的输入/输出信号如下: 地址信号 address[]; RAM_dqo的存储单元地址; 数据输入信号DATA[] RAM_dqo的数据输入端; 数据输出信号Q[]; RAM_dqo的数据输出端; 时钟信号CLK; 读/写时钟脉冲信号; 读写信号W/R 读/写控制信号端 数据从总线端口DATA[]输入。丹输入数据和地址准备好以后,由于在inclock上的信号是地址锁存时钟,当信号上升沿到来时,地址被锁存,于是数据被写入存储单元。数据的读出控制是从A[]输入存储单元地址,在CLK信号上升沿到来时,该单元数据从Q[]输出。W/R为读/写控制端,低电平时进行读操作,高电平时进行写操作; 四 实验步骤
### 回答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、付费专栏及课程。

余额充值