
实验六制作的是一位七段数码管译码。虽然能通过开关控制四位小数点、数字是否显示,但其实显示地都是同一位数字。之后的实验可以复用实验六设计的模块实现4位16进制七段数码管的显示。
七段数码管显示译码器设计实验是后续实验的基础,后续实验的输出显示基本都以其为子模块。并且大程的输出显示最基础的要求便是七段数码管显示,因此务必理解实验原理。
掌握七数码管显示原理
掌握七段码显示译码设计
进一步熟悉 Xilinx ISE 环境及 SWORD 实验平台
2.1 实验内容
任务1:原理图设计实现显示译码 MyMC14495 模块
任务2:用 MyMC14495 模块实现数码管显示
2.2 实验原理
2.2.1 显示译码 MyMC14495 模块设计
七段数码管有 a-g 7个输出,再加上 ‘.’ 一个输出,所以由此考虑可以用 3-8 译码器实现这一数码管的亮灭控制

图表1 七段数码管构造示意图
注:不一定输出为 1 时灯才亮,也有可能输出为 0 灯亮。
如下图,当一端接低电平时,输入为 1 才亮;当接高电平时,输入为0,有电压差才亮

图表2 其他七段数码管示意图
具体显示方式如下图所示:

图表3 BCD七段数码管译码器对应的十六进制数
根据以上 16 个不同的显示情况,可以写出下图的真值表:

图表4 七段数码管BCD译码器真值表
由卡诺图可以简化得到如下函数:

图表5 卡诺图简化后函数
根据函数可以绘制如下逻辑电路图:

图表6 七段数码管BCD译码器逻辑电路图
2.2.2 用MyMC14495 模块实现数码管显示
自定义生成一个 MyMC14495 以后,可以用自动生成的符号绘制如下电路图:

图表7 原理图绘制数码管显示模块
导出到 SWORD 实验板上进行验证。
装有 Xilinx ISE 14.7 的计算机 1 台
SWORD 开发板 1 套
4.1.1 创建工程
新建工程,工程名称为”MyMC14495”
右键 Source 窗口空白处,新建 schematic 源文件,文件名称用 MyMC14495

图表8 新建工程和源文件
4.1.2 用原理图方式绘制电路
双击新建的 MyMC14495.sch,绘制如下电路图

图表
2. 绘制完成以后对电路进行错误检查,点击 Process 窗口的 Design -> Check Design Rules 进行语法检查,确认无误后点击 Design Utility -> View HDL Functional Model,查看并学习电路图的 Verilog HDL 代码
4.1.3 仿真波形测试
1. 新建一个测试文件, 选择 Verilog Test Fixture,命名为 MyMC14495_Number_sim.v
2. 输入下列代码进行测试:
`timescale 1ns / 1ps
module MyMC14495_3190103044_MyMC14495_3190103044_sch_tb();
// Inputs
reg D2;
reg D1;
reg D0;
reg D3;
reg LE;
reg point;
// Output
wire p;
wire g;
wire f;
wire e;
wire d;
wire c;
wire b;
wire a;
// Bidirs
// Instantiate the UUT
MyMC14495_3190103044 UUT (
.D2(D2),
.D1(D1),
.D0(D0),
.D3(D3),
.LE(LE),
.point(point),
.p(p),
.g(g),
.f(f),
.e(e),
.d(d),
.c(c),
.b(b),
.a(a)
);
// Initialize Inputs
integer i;
initial begin
D3 = 0;
D2 = 0;
D1 = 0;
D0 = 0;
LE = 0;
point = 0;
for (i=0; i<=15;i=i+1) begin
{D3,D2,D1,D0}=i;
point = i; #50;
end
#50;
LE = 1;
end
endmodule 3. 测试完成后点击 Simulate Behavioral Model,将生成的波形图与理论进行对照,如果一致则证明电路图绘制无误;如果有错误,检查后改正或者重新绘制
4.1.4 生成逻辑符号图和 .v 文件
点击 Process 窗口下的 Design Utilities -> Create Schematic Symbol,在工程文件夹里可以找到相应的 .sym 文件。
注:自动生成的符号可以修改:可以用 Tools 菜单的 Symbol Wizard,也可以打开 .sym 文件直接修改;View HDL Function Model 会产生 MyMC14495.vf 文件,在工程文件夹里可以找到

图表6 生成逻辑符号图和 .vf 文件
4.2.1 创建工程
1. 新建工程 DispNumber_sch
2. 新建 schematic 文件 DispNumber_sch
3. 复制 MyMC14495.sym 和 .vf 到工程根目录,并将其添加到工程中
4. 创建完成后的工程如下图所示:

图表7 新建工程
4.2.2 绘制测试电路图
在 symbol 框中的第一个元件就是 MyMC14495(命名为 MyMC14495_Number),点击就可以进行绘制。绘制电路图如下:

图表8 测试电路图绘制
注:这里 a-g 的输出要与实际 SWORD 板上一致,不然最后的结果是错误的。建议 a-g 按照 0-6 的顺序,p 连接 7
4.2.3 引脚定义
新建 Implementation Constraints File 文件,命名为 K7.ucf,添加如下代码:
NET "SW[0]" LOC = AA10 | IOSTANDARD = LVCMOS15;
NET "SW[1]" LOC = AB10 | IOSTANDARD = LVCMOS15;
NET "SW[2]" LOC = AA13 | IOSTANDARD = LVCMOS15;
NET "SW[3]" LOC = AA12 | IOSTANDARD = LVCMOS15;
NET "SW[4]" LOC = Y13 | IOSTANDARD = LVCMOS15; #AN0
NET "SW[5]" LOC = Y12 | IOSTANDARD = LVCMOS15; #AN1
NET "SW[6]" LOC = AD11 | IOSTANDARD = LVCMOS15; #AN2
NET "SW[7]" LOC = AD10 | IOSTANDARD = LVCMOS15; #AN3
NET "point" LOC = AF13 | IOSTANDARD = LVCMOS15 ;#SW[14]
NET "LE" LOC = AF10 | IOSTANDARD = LVCMOS15 ;#SW[15]
NET "SEGMENT[0]" LOC = AB22 | IOSTANDARD = LVCMOS33 ;#a
NET "SEGMENT[1]" LOC = AD24 | IOSTANDARD = LVCMOS33 ;#b
NET "SEGMENT[2]" LOC = AD23 | IOSTANDARD = LVCMOS33 ;
NET "SEGMENT[3]" LOC = Y21 | IOSTANDARD = LVCMOS33 ;
NET "SEGMENT[4]" LOC = W20 | IOSTANDARD = LVCMOS33 ;
NET "SEGMENT[5]" LOC = AC24 | IOSTANDARD = LVCMOS33 ;
NET "SEGMENT[6]" LOC = AC23 | IOSTANDARD = LVCMOS33 ;#g
NET "SEGMENT[7]" LOC = AA22 | IOSTANDARD = LVCMOS33 ;#point
NET "AN[0]" LOC = AD21 | IOSTANDARD = LVCMOS33 ;
NET "AN[1]" LOC = AC21 | IOSTANDARD = LVCMOS33 ;
NET "AN[2]" LOC = AB21 | IOSTANDARD = LVCMOS33 ;
NET "AN[3]" LOC = AC22 | IOSTANDARD = LVCMOS33 ; 4.2.4 导出检验

图表9 检验逻辑功能
通过以上检测后,点击 Configure Target Device -> Manage Configuration Project,导出到 SWORD 实验板上进行验证
经过调试,最终正确的仿真波形测试的结果如下:

图表10 仿真波形
将测试结果与理论对比后发现二者一致,绘制电路图功能正常
导出到 SWORD 实验板的实验结果如下图所示,测试顺序按照实验原理的真值表:




6.1.1 原理图画板尺寸修改
Lab6 的实验原理图比较复杂,使用初始的画板尺寸很难规整地画下来,需要修改画板尺寸。
方法:双击白色背景,可以设置画板尺寸。
6.1.2 原理图纠错
技巧1:对比物理验证过程中显示有误的数字所对应的仿真图,检查数字显示有误对应的电路图模块。
技巧2:检查时选中 “branch” 进行查看,可以看到被选中的 branches 全部高亮(红色)显示,更清晰地看到它们的连接状态。在修改时则在 Option 中将选项修改为 Select Segment,便于删除、移动线段。
6.2.1 仿真测试中各项波形的对比
先将各项位置调整成与理论结果中各项位置一致,再进行比较,更容易看出错误,降低遗漏差异的概率。
6.2.2 修改原理图后再仿真
有时修改原理图后再进行仿真会不成功,点击按钮无反应或运行成功但没有进入仿真窗口。这个时候可以选择假装修改仿真代码,使其重新检测加载。若无效,可以将原有的文件 remove 后,新建一个仿真文件进行仿真。
本次实验让我深刻体会到了鼠标的重要性。实验课前一天鼠标坏了,课上用触控板绘图画的我很自闭。七段数码管BCD译码器的原理图比较复杂,连线容易出错,也可以通过 verilog 代码的形式,直接根据真值表对其进行赋值。这种方法简便很多,这里不展开。
欢迎评论区或私信讨论,感谢三连与批评指正。