[FPGA基础学习]加法器、三八译码器及DE2-115基本使用方法和数码管显示

软件安装:QuartusLite安装说明及驱动更新

DE2-115上电及程序烧录

1.用包装盒里的USB 电缆将PC的USB端口和DE2-115开发板的USB Blaster连接器连接 起来,为了实现主机和开发板之间的通讯,必须安装USB Blaster 驱动软件

image-20250301155951097

鼠标右击“USB-Blaster”选择“更新驱动程序(P)”

image-20250301160921180

image-20250301160940260

image-20250301161000415

image-20250301161220283

2.在将12V的适配器连接到DE2-115主板前,按下红色的ON/OFF开关确保电源断开。

3.按下DE2-115主板上红色的电源开关OFF /ON重新上电,将DE2-115开发板的拨码开关SW19由PROG拨到RUN,就可以烧写程序了

image-20250301154558200

image-20250301165944445

在烧录的时候我们直接点击 start,当右面的进程到达 100% 就说明已经烧录成功了:

image-20250301151304572

这里选择 Cyclone IV E 的 EP4CE115F29C7 芯片

image-20250301122917682

然后这里我们选择使用 ModelSim-Altera 进行仿真,然后我们直接点击下一步直接到结束即可

image-20250301122952010

image-20250301123052165

Block Diagram/Schematic File :绘制原理图需要使用的文件,后缀是 .bdf 和 .bsf

Verilog HDL File : 写 verilog 代码的文件类型,后缀是 .v

四位加法器

引脚的绑定:

image-20250301151204015

image-20250301162745118

image-20250301163052677

image-20250301165452539

image-20250301153152014

实验现象:

tem122

三八译码器及数码管显示

6e9fef3d549b1b0aa15728cd241e540a

配置引脚

DE2-115 引脚列表:【整理】DE2-115引脚列表 word版-优快云博客

使用3个SW作为输入信号,七段数码管作为输出显示

image-20250226193505504

DE2-115配有八个七段数码管。它们被分成两组,每组四个,用来作为数字显示用。七段数码管的每个引脚(共阳模式)均连接到Cyclone IV E FPGA。FPGA输 出低电压的时候,对应的字码段点亮,反之则熄灭。 每个数码管的字段都从0到6依次编号,下图给出了它们的编号次序。

Cyclone IV E FPGA和七段段数码管间连接示意图如下:

image-20250226192140414

image-20250301174024201

要实现38译码器的结果在七段数码管上显示,需要满足逻辑如下表:

数码管显示数字需要亮起来的小段对应的八位二进制数
0HEX0[0]~[5]0000_0011
1HEX0[1]~[2]1001_1111
2HEX0[0],[1],[3],[4],[6]0010_0101
3HEX0[0],[1],[2],[3],[6]0000_1101
4HEX0[1].[2].[5],[6]1001_1001
5HEX0,[0],[2],[3],[5],[6]0100_1001
6HEX0[0],[2],[3],[4],[5],[6]0100_0001
7HEX0[1]~[3]0001_1111
module decoder_3to8
(
 input wire A , //输入信号1
 input wire B , //输入信号2
 input wire C , //输入信号3
    output reg [0:7] out //输出信号 out
 );
​
 always@(*)
     case({A, B, C})
    3'b000 : out = 8'b0000_0011; 
    3'b001 : out = 8'b1001_1111;
    3'b010 : out = 8'b0010_0101;
    3'b011 : out = 8'b0000_1101; 
    3'b100 : out = 8'b1001_1001;
    3'b101 : out = 8'b0100_1001;
    3'b110 : out = 8'b0100_0001;
    3'b111 : out = 8'b0001_1111;
 endcase
 endmodule

引脚绑定图如下:

image-20250301183600430

因为38译码有八项输出,而译码器只有七个管脚,所以取out的前7项绑定为HEX0的七个管脚输出

实验现象如下:

fbdeae4b2bbab564ec0e83017d62868e_720

image-20250301191638355

image-20250301191653353

image-20250301191716459

image-20250301191735752

image-20250301191754930

image-20250301191821546

### 基于DE2-115开发板的数码管显示功能实现 #### 1. 硬件资源概述 DE2-115开发板是一款基于Altera Cyclone IV系列FPGA的多功能开发平台[^2]。其丰富的外设接口使得其实现数码管显示等功能变得非常便捷。具体来说,该开发板提供了多个七段数码管作为输出设备。 #### 2. 功能需求分析 为了在DE2-115开发板上通过数码管显示特定内容(如时间、密码或其他数据),通常需要以下几个核心模块: - **时钟信号源**:用于驱动整个系统的定时逻辑。 - **译码器模块**:将二进制编码转换为七段数码管可识别的形式。 - **扫描控制器**:由于大多数开发板采用动态扫描方式来减少引脚数,因此需要设计一个多路复用机制。 - **输入/输出管理模块**:负责接收外部输入(如按键)并更新显示内容。 以下是分别使用VHDLVerilog两种硬件描述语言的具体实现方法--- #### 3. 使用VHDL实现数码管显示 下面是一个简单的例子,展示如何让五个七段数码管循环显示字符串“HELLO”。 ```vhdl library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity SevenSegmentDisplay is Port ( clk : in STD_LOGIC; -- 主时钟 reset : in STD_LOGIC; --信号 anodes : out STD_LOGIC_VECTOR (4 downto 0); -- 数码管阳极择线 segments : out STD_LOGIC_VECTOR (6 downto 0)); --信号 end SevenSegmentDisplay; architecture Behavioral of SevenSegmentDisplay is type display_array is array (0 to 4) of std_logic_vector(6 downto 0); constant letters : display_array := ( "0000001", -- H "1001111", -- E "0000110", -- L "0000110", -- L "0001000");-- O begin process(clk, reset) variable counter : integer range 0 to 4 := 0; begin if rising_edge(clk) then if reset = '1' then counter := 0; else counter := (counter + 1) mod 5; end if; anodes <= (others => '1'); -- 关闭其他数码管 anodes(counter) <= '0'; -- 打开当前数码管 segments <= letters(counter); -- 设置对应的字符 end if; end process; end Behavioral; ``` 此代码实现了基本的轮询机制,在不同的时刻点亮不同置上的数码管,并加载相应的字母图案[^1]。 --- #### 4. 使用Verilog实现数码管显示 对于更复杂的场景比如制作一个数字钟,则推荐使用Verilog编写程序。这里给出一段简化版的时间显示电路片段: ```verilog module DigitalClock( input wire clk, input wire rst_n, output reg [3:0] digit_sel, output reg [6:0] seg_out); parameter CLK_FREQ = 50_000_000; // FPGA工作频率假设为50MHz reg [23:0] count_reg = 0; always @(posedge clk or negedge rst_n) begin if (!rst_n) count_reg <= 0; else count_reg <= count_reg + 1'b1; end // 定义十进制计数器变量... wire [3:0] hour_tens, hour_units, minute_tens, minute_units; assign {hour_tens,hour_units} = count_reg[23:16]; assign {minute_tens,minute_units}=count_reg[15:8]; localparam DISPLAY_DELAY = CLK_FREQ / 1000; // 调节刷新速度 integer i=0,j=0,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z; always @(*) case(digit_sel) 4'd0:seg_out<=~{1'b1,hour_tens}; ... else seg_out<=7'hXX;//默认状态关闭所有LEDs. endcase endmodule ``` 上述代码仅展示了部分框架结构,完整的项目还需要加入更多细节处理,例如增加对实际物理按键的支持以及考虑边界条件等问题[^3]。 --- #### 5. 输入与交互扩展 如果希望进一步增强用户体验,还可以引入额外的功能模块,例如设置闹铃提醒或者允许用户自定义显示内容。此时可以参考电子密码锁的设计思路[^4],利用键盘矩阵捕获用户的操作指令并将结果反映到屏幕上。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值