传统数字电路设计方法与现代数字电路设计方法比较
- 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)表示。
门电路来实现各段的最小表达式。
TTL)使用相应的
4.
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;
'hb : a_to_g=7'b1100000;
'hC : a_to_g=7'b0110001;
'hd : a_to_g=7'b1000010;
'hE : a_to_g=7'b0110000;
'hF : a_to_g=7'b0111000;
default: a_to_g=7'b0000001;
endcase
endmodule
文件seg7_top.vhd module hex7seg_top(
input wire [3:0] sw,
output wire [6:0] a_to_g,
output wire [3:0] an,
output wire dp
);
assign an=4'b0000;
assign dp=1;
hex7seg D4(.x(sw), .a_to_g(a_to_g));
endmodule
4.结论
对于简单点的数字电路从上面的流程可以看出,传统数字电路所有的过程都需要人工完成,试想对于一个包含上百个逻辑门的多输入变量的结构,根本无法使用人工化简卡诺图实现。
同时后续的电路调试和设计也需要很高的电路布局和布线的技巧,总而言之,这样的设计对于复杂数字系统来讲效率太低了。
我们需要进一步考虑的问题是,如何使用计算机帮助设计者简化设计过程,自动地化简卡诺图,并且在芯片内部自动实现布局布线。
要实现这些要求,就必须使用基于可编程逻辑器件的现代数字系统设计流程。
但是对于简单的数字系统,fpga就显得过于复杂,而且有高成本的劣势。
现代数字电路优越性可以归纳为以下几点:
1、可编程性。
FPGA中集成了成千上万的逻辑门,高端的FPGA还有乘累加器、RAM、锁相环等,这些资源是可以任意使用的,使用起来相当灵活。
而且FPGA中的逻辑门并不是像传统的数字电路具有固定的功能,拿Altera的Stratix系列器件来说,每个寄存器(D触发器)都具有同步复位、置位、异步复位、置位和时钟使能,而且这些控制端都是根据用户的设计输入由开发软件自动适配完成的。
2、设计平台的完善。
在现有开发平台上可以实现对设计的最初设计和验证,然后可以与FPGA
进行联机调试,反复修改设计,最终实现设计任务。
当前FPGA的发展方向是高密度、大容IC.量和高速,是专门为了实现极其复杂的逻辑控制、高强度的运算而设计的通用可编程。