传统数字电路设计方案方法与现代数字电路设计方法比较.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
传统数字电路设计方法与现代数字电路设计方法比较
专业: 姓名:学号:
摘要:本文对7段数码管显示功能设计分别采用传统数字电路和现代数字电路fpga(verilog hdl)实现。并对设计流程进行对比,从而得出各个方法的优劣。
关键字:7段数码管显示;传统数字电路;现代数字电路fpga
1.数字系统设计方法
传统的数字系统的设计方法是画出逻辑图,这个图包含SSI的门和MSI的逻辑功能,然后人工通过真值表和通过卡诺图进行化简,得到最小的表达式,然后在基于TTL的LSI芯片上实现数字逻辑的功能。
现代的数字系统设计是使用硬件描述语言(Hardware Description Language, HDL)来设计数字系统。最广泛使用的HDL语言是VHDL和Verilog HDL。这些语言允许设计人员通过写程序描述逻辑电路的行为来设计数字系统。程序能用来仿真电路的操作和在CPLD、FPGA 或者专用集成电路ASIC上综合出一个真正的实现
2.传统数字系统设计。
1.1 设计流程
传统的数字系统设计基于传统的“人工”方式完成,当设计目标给定后,给出设计目标的真
值表描述,然后使用卡诺图对真值表进行化简,得到最小的表达式,然后使用TTL的LSI
电路实现最小的表达式,最后使用调试工具和仪器,对系统进行调试。
1.2 功能实现
1)设计目标:在一个共阳极的7段数码管上显示相对应的0-F的值。
2)设计目标的真值表描述:图1.2首先给出了七段数码管的符号表示,当其是共阳极时,只有相应的段给低电平‘0’时,该段亮,否则灭。
3)使用卡诺图对真值表进行化简,7段数码管e段的卡诺图化简过程如图。
得到e段的最简单的逻辑表达式:
e=~x3& x0 | ~x3&x2&~x1 | ~x2&~x1&x0。
按照步骤3的过程分别得到a,b,c,d,f,g的最简逻辑表达式,这些最简表达式使用积之和(Sum of Product, SOP)和和之积(Product of Sum, POS)表示。
4)使用相应的TTL门电路来实现各段的最小表达式。
5)将这些门电路连接到7段数码管的各段,并进行调试。
3. 现代数字系统设计
2.1 设计流程
在FPGA系统设计完成前,有2个不同的阶段:设计阶段、调试和检验阶段,如图所示,设计阶段的主要任务是输入、仿真和实现;调试和检验阶段的主要任务是检验设计,校正发现的错误。
2.2功能实现
1、设计目标
在一个共阳极的7段数码管上显示相对应的0-F的值。
2、设计输入
7段数码管亮灭控制的最基本原理就是当有电流流过7段数码管a,b,c,d,e,f,g的某一段时,该段就发光。
假设输入的数表示为:input wire[3:0] x,输出的数表示为output wire[6:0] a_to_g。
3、7段数码管逻辑门实现及验证
1)打开ISE10.1,新建工程hex7seg_le,设计参数选择:芯片选择Spartan3E
XC3S1200E-4FG320,顶层设计选择HDL,仿真器选项选择ISE Simulator。
2)新建名字为hex7seg_le,类型为Verilog Module的设计文件。按照7段数码管的门级电路描述,完成设计代码输入。
3)在处理窗口中,选择并点击Synthesis,工程进行语言检查和综合,确认设计正确。4)建立一个名字为test.tbw,类型为testbench waveform的文件。并将工程管理窗口的search for指向Behavioral Simulation。在处理窗口中,选择并展开ISE Simulator,点击Simulate Behavioral Model。
附:7段数码管逻辑门描述代码hex7seg_le.v
module hex7seg_le(
input wire[3:0] x,
output wire[6:0] a_to_g
);
assign a_to_g[6]= ~x[3] & ~x[2] & ~x[1] & x[0] //a
| ~x[3] & x[2] & ~x[1] & ~x[0]
|x[3] & x[2] & ~x[1] & x[0]
|x[3] & ~x[2] & x[1] & x[0];
assign a_to_g[5]= x[2] & x[1] & ~x[0] //b
| x[3] & x[1] & x[0]
|~x[3] & x[2] & ~x[1] & x[0]
| x[3] & x[2] & ~x[1] & ~x[0];
assign a_to_g[4]= ~x[3] & ~x[2] & x[1] & ~x[0] //c
|x[3] & x[2] & x[1]
|x[3] & x[2] & ~x[0];
assign a_to_g[3]= ~x[3] & ~x[2] & ~x[1] & x[0] //d
| ~x[3] & x[2] & ~x[1] & ~x[0]
|x[3] & ~x[2] & x[1] & ~x[0]
|x[2] & x[1] & x[0];
assign a_to_g[2]= ~x[3] & x[0] //e
|~x[3] & x[2] & ~x[1]
|~x[2] & ~x[1] & x[0];
assign a_to_g[1]= ~x[3] & ~x[2] & x[0] //f
| ~x[3] & ~x[2] & x[1]
|~x[3] & x[1] & x[0]
|x[3] & x[2] & ~x[1] & x[0];
assign a_to_g[0]= ~x[3] & ~x[2] & ~x[1] //g
|x[3] & x[2] & ~x[1] & ~x[0]
|~x[3] & x[2] & x[1] & x[0];
Endmodule
4、7段数码管case语句实现及验证
1)打开ISE10.1,新建工程hex7seg,设计参数选择:芯片选择Spartan3E
XC3S1200E-4FG320,顶层设计选择HDL,仿真器选项选择ISE Simulator。
2)新建名字为hex7seg,类型为Verilog Module的设计文件,并完成设计代码输入。3)新建名字为seg7_top,类型为Verilog module的设计文件,完成设计代码输入。4)新建文件名seg7_top,类型为Implementation Constraints File用户约束文件
seg7_top.ucf。使用Nexys2板卡上的SW(0:3)开关作为sw的输入,an(0:3)和a_to_g(0:6)输出作为7段数码管片选AN0-AN1和CA-CG的输入信号,按照板子设计在seg7_top.ucf 文件完成引脚位置约束,保存并关闭该文件。
5)在管理窗口中双击Implement Design选项,完成设计实现;
6)在管理窗口中右键点击Generate Programming File,选择属性Properities,在Startup Option标签栏中的FPGA Startup Clock选择JTAG。
7)在管理窗口中双击Generate Programming File,生成比特流文件;
8)在管理窗口中双击Configure Target Device,出现配置界面,选择配置文件并下载到芯片中,确认下载成功。
9)对设计进行调试和验证。
附:7段数码管的行为级描述代码hex7seg.v
module hex7seg(
input wire [3:0] x,
output reg [6:0] a_to_g
);
always @(*)
case(x)
0 : a_to_g=7'b0000001;
1 : a_to_g=7'b1001111;
2 : a_to_g=7'b0010010;
3 : a_to_g=7'b0000110;
4 : a_to_g=7'b1001100;
5 : a_to_g=7'b0100100;
6 : a_to_g=7'b0100000;
7 : a_to_g=7'b0001111;
8 : a_to_g=7'b0000000;
9 : a_to_g=7'b0000100;
'hA : a_to_g=7'b0001000;