Quartus II 模块化设计之两位七段码显示(verilog详细步骤)

Quartus II 13.0模块化设计

新建工程

1.点击File➡️New Project Wizard…
在这里插入图片描述

2.1⃣️点击三个点找到工程文件夹📁➡️2⃣️命名工程名
在这里插入图片描述
3.下一步

4.选择芯片型号,然后直接finish
在这里插入图片描述
5.新建两个verilog HDL file 文件
在这里插入图片描述
6.新建TOP层的TOP.v文件

在这里插入图片描述

`timescale 1ns/1ps
module TOP (a,dr);
input[3:0]a;
output[6:0]dr;
assign  dr=(a==4'b0000)?7'b1000000://0
			  (a==4'b0001)?7'b1111001://1
			  (a==4'b0010)?7'b0100100://2
			  (a==4'b0011)?7'b0110000://3
			  (a==4'b0100)?7'b0011001://4		  
			  (a==4'b0101)?7'b0010010://5			  
			  (a==4'b0110)?7'b0000010://6
			  (a==4'b0111)?7'b1111000://7		  
              (a==4'b1000)?7'b0000000://8
			  (a==4'b1001)?7'b0010000://9		  
              (a==4'b1010)?7'b1111111:	dr;
endmodule	

7.新建BOT层的BOT.v文件
在这里插入图片描述

module BOT(T,close,a0,a1);
input[5:0]T;
input close;
output[3:0]a0;
output[3:0]a1;
assign a0=(close==1'b1)?4'd10:
             (T<6'd10)? T:
			 (T<6'd20)? T-6'd10:
			 (T<6'd30)? T-6'd20:
			 (T<6'd40)? T-6'd30:
			 (T<6'd50)? T-6'd40:
			 (T<6'd60)? T-6'd50:
			 (T<7'd70)? T-6'd60: a0;
assign a1=(close==1'b1)?4'd10:
             (T<6'd10)? 4'd0:
			 (T<6'd20)? 4'd1:
			 (T<6'd30)? 4'd2:
			 (T<6'd40)? 4'd3:
			 (T<6'd50)? 4'd4:
			 (T<6'd60)? 4'd5:
			 (T<7'd70)? 4'd6:a1;
endmodule

8.编译工程
在这里插入图片描述
在这里插入图片描述

9.生成元件(分别对top和bot右击)
在这里插入图片描述
10.新建Block Diagram/Schematic File
在这里插入图片描述
11.双击空白处添加元件
在这里插入图片描述
12.连接元器件(仔细看图)
在这里插入图片描述
13.给输入、输出添加引脚(所有的元件都要右击添加引脚 )
在这里插入图片描述

14.修改引脚参数
在这里插入图片描述
15.保存原理图
在这里插入图片描述

16.编译原理图,生成.V文件(仔细看图)

在这里插入图片描述
选择verilog HDL——OK
在这里插入图片描述
17.(右击E_TOP.bdf-—-移除它)在这里插入图片描述18.移除之后就编译工程(仔细看图)
在这里插入图片描述
19.添加E_TOP.V文件(右击Files)

在这里插入图片描述
(仔细看图)这里找你命名的文件名称。后缀名是.V
在这里插入图片描述
点击Add(添加),然后Apply,然后OK

在这里插入图片描述
20.设置E-TOP为顶层(仔细看图)
在这里插入图片描述
21.(再编译一次工程)–然后查看下图电路图
在这里插入图片描述
电路图
在这里插入图片描述
22.配置电路图的引脚与FPGA开发板一致

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

                Location[T]0SW[0]PIN_N25 
[T]1SW[1]PIN_N26 
[T]2SW[2]PIN_P25 
[T]3SW[3]PIN_AE14 
[T]4SW[4]PIN_AF14 
[T]5SW[5]PIN_AD13 
close↹	SW[6]PIN_AC13

在这里插入图片描述

                        Location 
                           ↨
dr0[0]HEX0[0]PIN_AF10 
dr0[1]HEX0[1]PIN_AB12 
dr0[2]HEX0[2]PIN_AC12 
dr0[3]HEX0[3]PIN_AD11 
dr0[4]HEX0[4]PIN_AE11 
dr0[5]HEX0[5]PIN_V14 
dr0[6]HEX0[6]PIN_V13 
dr1[0]HEX1[0]PIN_V20 
dr1[1]HEX1[1]PIN_V21 
dr1[2]HEX1[2]PIN_W21 
dr1[3]HEX1[3]PIN_Y22 
dr1[4]HEX1[4]PIN_AA24 
dr1[5]HEX1[5]PIN_AA23 
dr1[6]HEX1[6]PIN_AB24

1⃣️配置好引脚后保存。
2⃣️重新编译工程
3⃣️烧录工程
在这里插入图片描述
在这里插入图片描述

4⃣️看显示

工程代码下载

链接: 点击下载.

<think>好的,用户想了解在Quartus中使用七段数码管的实现方法或教程。我需要先回顾一下之前提供的引用内容,看看有没有相关的信息。引用[1]提到了数码管的译码模块初始化,用Verilog写的,主要是将输入的四位数据转换为对应的七段显示信号。这里有一个数码管的译码模块,用到了存储器来存储每个数字对应的段码。用户可能需要知道如何设计这样的译码模块。引用[2]是关于QuartusII中的七段数码管应用,用VHDL实现分频器,因为FPGA的时钟频率太高,需要分频来降低频率,以适应数码管的显示。这里涉及到分频器的设计,可能也是用户需要的内容。用户的问题集中在Quartus中如何驱动七段数码管,可能需要分步骤的指导,包括译码模块和分频模块的实现。用户可能不太清楚如何将这两个部分结合起来,或者具体的实现细节。 首先,我应该解释七段数码管的基本原理,比如共阴极和共阳极的区别,以及如何通过FPGA的IO口控制。然后,分步骤说明如何设计译码模块,将BCD码转换为段选信号,这部分引用[1]中的代码可以作为例子,但用户用的是Quartus,可能需要VHDL或Verilog的选择,但用户提供的引用既有Verilog也有VHDL,所以可能需要说明两种语言的选择。接着,需要讨论分频模块,因为直接使用高频时钟会导致显示不稳定,引用[2]中的分频器代码可以作为一个例子,说明如何将系统时钟分频到适合的频率,比如1kHz左右,这样数码管的刷新率足够高,不会有闪烁。然后,可能需要提到动态扫描显示,特别是如果用户使用的是多个数码管的情况。动态扫描需要位选信号轮流激活每个数码管,并配合段选信号显示不同的数字。这部分可能需要示例代码或步骤说明。另外,用户可能需要知道如何在Quartus中进行引脚分配,将设计好的模块映射到FPGA的实际引脚上,这涉及到硬件连接和约束文件的设置。这部分可能没有在引用中提到,但属于实现的重要步骤,需要补充。 最后,可能还需要提到测试和调试,比如通过仿真验证译码和分频是否正确,或者使用SignalTap进行实时调试。确保用户了解整个开发流程,从设计到综合再到下载测试。 相关问题部分需要考虑用户可能遇到的后续问题,比如如何优化显示效果、处理多个数码管、动态扫描的实现细节、常见错误排查等。这些相关问题可以帮助用户深入理解并解决实际应用中的问题。</think>在Quartus中实现七段数码管驱动需要结合译码模块设计、时钟分频和动态扫描技术,以下是分步骤说明: ### 一、七段数码管基础原理 1. **共阴/共阳极区别** 共阴极数码管公共端接地,段选信号高电平点亮;共阳极公共端接电源,段选信号低电平点亮[^1]。例如引用[1]的代码中,段码`9'h3F`对应共阴极数字0的显示。 2. **显示逻辑** 每个数字对应一组段码(A-G+DP),例如数字0的段码为`0111111`(假设A段为最低位)。 ### 二、Quartus实现步骤 #### 1. 译码模块设计(以Verilog为例) ```verilog module seg7_decoder( input [3:0] bcd_in, //输入BCD码(0-9) output reg [6:0] seg_out //输出段码(A-G) ); always @(*) begin case(bcd_in) 4'd0: seg_out = 7'b0111111; //数字0 4'd1: seg_out = 7'b0000110; //数字1 //...补充其他数字的段码 4'd9: seg_out = 7'b1111011; default: seg_out = 7'b0000000; endcase end endmodule ``` > 注:段码顺序需根据硬件接线调整,引用[1]的代码中使用了9位信号(含小数点DP)[^1]。 #### 2. 时钟分频模块 FPGA主频通常为50MHz,需分频至1kHz以下以避免视觉残留: ```vhdl -- VHDL分频示例(引用[2]修改) ENTITY clk_div IS PORT( clk_50M : IN STD_LOGIC; clk_1k : OUT STD_LOGIC ); END clk_div; ARCHITECTURE Behavioral OF clk_div IS SIGNAL counter : INTEGER RANGE 0 TO 25000 := 0; SIGNAL tmp_clk : STD_LOGIC := '0'; BEGIN PROCESS(clk_50M) BEGIN IF rising_edge(clk_50M) THEN IF counter = 25000 THEN tmp_clk <= NOT tmp_clk; counter <= 0; ELSE counter <= counter + 1; END IF; END IF; END PROCESS; clk_1k <= tmp_clk; END Behavioral; ``` #### 3. 动态扫描(多位数码管) ```verilog module dynamic_scan( input clk_1k, input [15:0] data_in, //4位数字组成的16位数据 output reg [3:0] sel, //位选信号 output [6:0] seg //段选信号 ); reg [1:0] cnt = 0; reg [3:0] digit; always @(posedge clk_1k) begin cnt <= cnt + 1; case(cnt) 2'b00: begin sel <= 4'b1110; digit <= data_in[3:0]; end 2'b01: begin sel <= 4'b1101; digit <= data_in[7:4]; end //...补充其他位选 endcase end seg7_decoder u_decoder(.bcd_in(digit), .seg_out(seg)); endmodule ``` ### 三、Quartus工程配置 1. **引脚分配** 在Assignment Editor中将`sel`和`seg`信号映射到FPGA的物理引脚,需参考开发板原理图。 2. **下载测试** 编译后通过Programmer将`.sof`文件下载到FPGA,观察数码管显示是否正常。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值