• 已绑定课时
  • 工程师可点评

实验报告 · 10 | 项目设计:数码管(1-1.0版) 课程:初级 | FPGA工程师基础启航(含板卡+证书) · 第六节 补充课程(数码管显示) 发布自课程云笔记 · FPGA 实验证据骨架 【本节要点】 数码管基础知识 【疑问/坑点】 1、区分位选位和段选位;针对本实验的数码管(备注:最左边是最高位,最右边是低位。高位---次高位----次低位----地位) 2、段选位看发光二极管的组成数量…

huangxin
86 1 1
工程师评优秀1

实验报告 · 10 | 项目设计:数码管(1-1.0版)

课程:初级 | FPGA工程师基础启航(含板卡+证书) · 第六节 补充课程(数码管显示)

发布自课程云笔记 · FPGA 实验证据骨架

数码管基础知识

1、区分位选位和段选位;针对本实验的数码管(备注:最左边是最高位,最右边是低位。高位---次高位----次低位----地位)

2、段选位看发光二极管的组成数量

3、段选位共阴高电平有效,段选位最高位是”dp信号“,最低位是”a“

输出”8“对应:seg=8'b 0   1 1 1_1 1 1 1

dp  g  f  e   d c b a

4、要认真看原理图区分是共阴还是共阳数码管,判断位选位(控制哪一个工作单元工作)和段选位(控制数目管显示的字符)极性

调试出问题,检查思路:

1、先检查代码

2、检查管脚约束文件 (pin文件)

3、对应PIN(管脚)文件去检查实际硬件连线

4、最后考虑硬件设计问题:一是硬件损坏;二是板卡元器件管脚损坏。

1、先将主板插针管脚与副板数码管进行直连,编写测试程序观察效果;

“`timescale 1ns / 1ps

/*时间单位1NS,时间精度1PS*/

module text_SMG(
input                 sysclk  ,
input                 rst_n    ,
output      [3:0]     sel    ,//四个位选
output      [7:0]     seg      //七个段选
);
//段选位
assign sel = 4'b0101       ;
//位选位
assign seg = 8'b0111_1101   ;

endmodule”(该程序经过验证修改后,目前数码管显示是“6*6 *”,对应下图3)

2、分析数码管显示效果产生的原因,对绑定的管脚进行调整;

3、预先计算显示效果,将调整后的程序下载观察显示效果。

下面分别是是调整前和调整后的效果:

调整前:

图一

调整后:

图二

图三

1、请说明共阴数码管与共阳数码管。

共阴和共阳数码管的本质区别在于内部LED公共端的接法:共阴数码管把所有发光二极管的阴极连在一起作公共端,使用时接地,段引脚给高电平点亮;共阳数码管则把所有阳极连在一起作公共端,使用时接电源正极,段引脚给低电平点亮。

2、数码管根据发光二级管的连接方式分为哪两种数码管?

数码管根据发光二极管的连接方式分为:共阴和共阳两种数码管。

3、如果上板验证时出现问题,如何去检查问题,分几步检查?

小练习

`timescale 1ns / 1ps
//数码管静态显示小练习:实现功能-->复位时,数码管显示最低位一个0;工作时,会滚动显示1~4
// 滚动显示: 最低位显示数值1,持续1s钟
// 最低两位显示数字2,持续2s
// 第三位显示数值3,持续3s
// 四位一起显示数字4,持续4s
module smg_jt(
);
endmodule
`timescale 1ns / 1ps
/*时间单位1ns,时间精度1ps*/
module FSM_SMG(
input  wire sysclk    ,
input  wire rst_n     ,
output reg  [3:0] sel ,
output reg  [7:0] seg
);
parameter delay = 26'd50_000_000  ;
parameter  IDLE =  8'b0011_1111   ;//空闲态或者复位最后一位显示“0”
parameter    S1 =  8'b0000_0110   ,//最后一位显示“1”
S2 =  8'b0101_1011    ,//最后两位显示“2”
S3 =  8'b0100_1111    ,//最后三位显示“3”
S4 =  8'b0110_0110    ;//最后四位显示“4”
reg [27:0] count                  ;
reg [7:0]  cur_state , next_state ;//声明现次态
//1秒计数器
always @(posedge sysclk)
if(!rst_n || cur_state == IDLE)
count <= 28'b0      ;
else if ((cur_state == S1 && count ==   delay - 1)    ||
(cur_state == S2 && count ==  (delay*2) - 1) ||
(cur_state == S3 && count ==  (delay*3) - 1) ||
(cur_state == S4 && count ==  (delay*4) - 1))
count <= 28'b0        ;
else
count <= count + 28'b1 ;
//第一段描述数码管状态变化
always @(posedge sysclk)
if(!rst_n)
cur_state <= IDLE ;
else
cur_state <= next_state ;
//第二段描述各个状态之间的跳转
always @(*)
begin
if(!rst_n)
next_state = IDLE ;
else
case(cur_state)
IDLE : next_state = S1 ;
S1 :
  begin
if(count == delay - 1)
next_state = S2;
else
next_state = S1;
end
S2 :
  begin
if(count == (delay*2)-1)
next_state = S3;
else
next_state = S2;
end
S3 :
  begin
if(count == (delay*3)-1)
next_state = S4;
else
next_state = S3;
end
S4 :
  begin
if(count == (delay*4)-1)
next_state = S1;
else
next_state = S4;
end
default : next_state = IDLE ;
endcase
end
//第三段描述各个状态下的动作
always @(posedge sysclk)
if(!rst_n)begin
sel <= 4'b1110;
seg <= 8'b0011_1111;
end
else
case(cur_state)
IDLE :
  begin
sel <= 4'b1110      ;
seg <= 8'b0011_1111 ;
end
S1 :
  begin
sel <= 4'b1110      ;
seg <= 8'b0000_0110 ;
end
S2 :
  begin
sel <= 4'b1100      ;
seg <= 8'b0101_1011 ;
end
S3 :
  begin
sel <= 4'b1000      ;
seg <= 8'b0100_1111 ;
end
S4 :
  begin
sel <= 4'b0000      ;
seg <= 8'b0110_0110 ;
end
default :
  begin
sel <= 4'b1110      ;
seg <= 8'b0011_1111 ;
end
endcase
endmodule

本节要验证什么?预期现象是什么?

用工具栏插入波形图、仿真界面或示波器照片

粘贴关键仿真输出或报错原文

板卡现象、按键/数码管/接口实测结果

结论、坑点与下一步修改

学习上下文

产出状态

评优秀1 位工程师
工程师已阅86 位工程师