当前位置: 首页 > news >正文

初识FPGA

DE2-115实现四位全加器与3-8译码器

  • 一、FPGA与Verilog的关系
    • 1、FPGA的核心特性与应用
    • 2、Verilog的核心作用
  • 二、简单四位全加器实现
    • 1、实现步骤
    • 2、效果
  • 二、3-8译码器
    • 1、效果图
  • 三、总计

一、FPGA与Verilog的关系

FPGA(现场可编程门阵列)是一种可通过编程配置的集成电路,其核心特性在于硬件逻辑的灵活重构能力。它由可配置逻辑块(CLB)、互连资源和I/O接口组成,支持用户根据需求自定义数字电路功能,兼具高性能和并行处理优势。而Verilog作为一种硬件描述语言(HDL),则是实现FPGA开发的核心工具,两者关系密切且相辅相成。

1、FPGA的核心特性与应用

硬件可编程性​
FPGA通过编程改变内部逻辑电路结构,无需流片即可实现不同功能。其灵活性体现在可重复配置特性上,例如在通信协议实现、实时信号处理等领域,用户可通过修改代码快速适应新需求。

​并行处理能力​
与顺序执行的CPU不同,FPGA的硬件结构允许同时处理多路数据流。例如在视频编解码或金融高频交易场景中,FPGA的并行计算效率可达传统处理器的数十倍。

​应用场景​
​原型验证:在芯片流片前用FPGA模拟ASIC功能,降低研发成本
​加速计算:微软等企业利用FPGA加速深度神经网络推理
​工业控制:交通灯控制器等实时系统通过FPGA实现毫秒级响应

2、Verilog的核心作用

硬件逻辑描述​
Verilog通过模块化语法(如module定义、wire/reg数据类型)精确描述电路结构。例如用always @(posedge clk)块可构建同步时序逻辑,直接映射到FPGA的触发器资源。

​设计流程支撑​
​仿真验证:通过Testbench模拟输入信号,验证逻辑正确性
​综合优化:将行为级代码转换为门级网表,优化资源占用(如LUT利用率)
​时序分析:约束文件(SDC)定义时钟频率,确保满足建立/保持时间

​高级设计范式​
​有限状态机(FSM)​:用case语句实现状态转移,常见于通信协议控制器
​IP核复用:封装已验证模块(如FFT算法),通过参数化设计提升开发效率

二、简单四位全加器实现

本次实验使用到的工具有:DE2-115开发板,Quartus 18.0,ModelSim - Intel FPGA Starter Edition 10.5b (Quartus Prime 18.0),deepseek

1、实现步骤

1、点击Quartus ,点击New Project
1
2、点击Next
2
3、选择项目存放位置,并为项目取名
3
4、选择empty
4
5、直接点next直到这个界面
5
注意最下面available devices一定要点并且选择与你芯片对应型号
点击后会变蓝色
6
6、然后一直点击next,最后finish,在finish之前注意核对芯片信息
7
7、进入EDA后,点击FIle,新建Verilo file
8
8、输入Verilog代码
点击暂停的符号,开始编译,然后会弹出来需要你保存此文件,你可以为这个文件任意取名,但是代码名就是module后面的名字必须与
第3步也就是图中左面的名一样,不然编译会报错
99、点击Pin planner,就会弹出引脚配置界面
在这里插入图片描述
在此界面中你可以看见对应引脚的是输入还是输出状态,然后根据引脚配置表选择你自己要用到的引脚
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置完成后又需要编译一遍。
10、下载烧录,点击Program,弹出烧录界面
在这里插入图片描述
选择烧录工具,这里选择的是USB烧录,若没有这个驱动,可以自行搜索如何安装USB-Blaster驱动,然后点击start,烧录是否成功会显示在progress处。

2、效果

用LEDR0-LEDR3作为四位输出,SW0-SW7作为输入 ,LEDR17作为进位输出
在这里插入图片描述
可以看出0011+0011=0110,符合2进制加法
在这里插入图片描述
当输入为1111+1111时,输出为1110与一位进位输出

二、3-8译码器

实现步骤与上述一样
下面给出实现代码

module decoder38(
    input [2:0] sw,
    output reg [7:0] led,
    output reg [6:0] hex0
);
always @(*) begin
    case(sw)
        3'b000: begin led = 8'b00000001; hex0 = 7'b1000000; end  // 0显示
        3'b001: begin led = 8'b00000010; hex0 = 7'b1111001; end  // 1显示
        3'b010: begin led = 8'b00000100; hex0 = 7'b0100100; end  // 2显示
        3'b011: begin led = 8'b00001000; hex0 = 7'b0110000; end  // 3显示
        3'b100: begin led = 8'b00010000; hex0 = 7'b0011001; end  // 4显示
        3'b101: begin led = 8'b00100000; hex0 = 7'b0010010; end  // 5显示
        3'b110: begin led = 8'b01000000; hex0 = 7'b0000010; end  // 6显示
        3'b111: begin led = 8'b10000000; hex0 = 7'b1111000; end  // 7显示
        default: begin led = 8'b00000000; hex0 = 7'b1111111; end // 灭灯
    endcase
end
endmodule
3'b000: begin led = 8'b00000001;//这段代码是显示在LED灯上
 hex0 = 7'b1000000; //这段代码是显示对应数字在数码管上面

1、效果图

在这里插入图片描述
当输入为000时,输出为10000000,数码管输出为0,根据3-8译码器的真值表可以看出这个结果是正确的,图中这个是低电平有效,我输出是为高电平有效
在这里插入图片描述
当输入为100时
在这里插入图片描述

三、总计

此次实验让我初步了解到FPGA。由于博主也是第一次接触,所以实验过程以及相关叙述可能不会很准确,希望各位加以指正。

相关文章:

  • 【前端跨域】CORS:跨域资源共享的机制与实现
  • python力扣3:无重复字符的最长子串
  • 通往 AI 之路:Python 机器学习入门-线性代数
  • ThreadLocal解析
  • 面试150,数组 / 字符串
  • PixelShuffle与Sub-pixel卷积详解
  • error Mixed spaces and tabs no-mixed-spaces-and-tabs
  • EtherNet/IP转Modbus解析基于网关模块的罗克韦尔PLC与Modbus上位机协议转换通讯案例
  • build gcc
  • 61. Three.js案例-彩色旋转立方体创建与材质应用
  • GPU/CUDA 发展编年史:从 3D 渲染到 AI 大模型时代(上)
  • wgcloud-server端部署说明
  • RK3568平台(网络篇)RTL8111网卡
  • 基于SpringBoot的“扶贫助农系统”的设计与实现(源码+数据库+文档+PPT)
  • 测试用例总结
  • C语言的数据类型(整形int、字符型char、浮点型float、double)
  • Linux匿名信号量详细介绍
  • 千里科技亮相吉利AI智能科技发布会,共启“AI+车”新纪元
  • JavaWeb后端基础(4)
  • 牙齿缺陷分割数据集labelme格式2495张4类别
  • 美国纽约网站建设费用/理发培训专业学校
  • 如何做网站压力测试/长春网站排名提升
  • 企业网站建设规划书/济南seo优化公司助力网站腾飞
  • 丹阳疫情最新消息今天新增/宝鸡seo外包公司
  • 江宁城乡建设局网站/88个seo网站优化基础知识点
  • 网站论坛建设方案/苏州网络推广seo服务