初识FPGA

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

一、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

2、点击Next

3、选择项目存放位置,并为项目取名

4、选择empty

5、直接点next直到这个界面

注意最下面available devices一定要点并且选择与你芯片对应型号

点击后会变蓝色

6、然后一直点击next,最后finish,在finish之前注意核对芯片信息

7、进入EDA后,点击FIle,新建Verilo file

8、输入Verilog代码

点击暂停的符号,开始编译,然后会弹出来需要你保存此文件,你可以为这个文件任意取名,但是代码名就是module后面的名字必须与

第3步也就是图中左面的名一样,不然编译会报错
9、点击Pin planner,就会弹出引脚配置界面

在此界面中你可以看见对应引脚的是输入还是输出状态,然后根据引脚配置表选择你自己要用到的引脚


配置完成后又需要编译一遍。

10、下载烧录,点击Program,弹出烧录界面

选择烧录工具,这里选择的是USB烧录,若没有这个驱动,可以自行搜索如何安装USB-Blaster驱动,然后点击start,烧录是否成功会显示在progress处。

2、效果

用LEDR0-LEDR3作为四位输出,SW0-SW7作为输入 ,LEDR17作为进位输出

可以看出0011+0011=0110,符合2进制加法

当输入为1111+1111时,输出为1110与一位进位输出

二、3-8译码器

实现步骤与上述一样

下面给出实现代码

bash 复制代码
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
bash 复制代码
3'b000: begin led = 8'b00000001;//这段代码是显示在LED灯上
 hex0 = 7'b1000000; //这段代码是显示对应数字在数码管上面

1、效果图

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

当输入为100时

三、总计

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

相关推荐
贝塔实验室5 分钟前
FPGA 动态部分重配置技术的实现
fpga开发
贝塔实验室6 小时前
Virtex-II 系列FPGA 的配置数据处理流程
fpga开发
toonyhe7 小时前
FPGA 高速接口Aurora8B/10B 协议详解与仿真
fpga开发·aurora 8b/10b·高速串行接口
FakeOccupational8 小时前
【电路笔记 TMS320C6***DSP】外部存储器接口 A EMIFA向FPGA(作为异步存储器)写入数据的示例
笔记·fpga开发
sz66cm8 小时前
FPGA基础 -- Verilog常用关键字
fpga开发
LeeConstantine18 小时前
FPGA开发,使用Deepseek V3还是R1(5):temperature设置
fpga开发
贝塔实验室19 小时前
FPGA 配置原理
经验分享·笔记·其他·fpga开发·硬件架构·硬件工程·fpga
乌恩大侠1 天前
【USRP】NVIDIA Sionna:用于 6G 物理层研究的开源库
python·fpga开发·开源·usrp
LeeConstantine1 天前
FPGA开发,使用Deepseek V3还是R1(1):应用场景
fpga开发