传统数字电路设计方法与现代数字电路设计方法比较专业: 姓名:学号:摘要:本文对7段数码管显示功能设计分别采用传统数字电路和现代数字电路fpga(verilog hdl)实现。
并对设计流程进行对比,从而得出各个方法的优劣。
关键字:7段数码管显示;传统数字电路;现代数字电路fpga1.数字系统设计方法传统的数字系统的设计方法是画出逻辑图,这个图包含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,设计参数选择:芯片选择Spartan3EXC3S1200E-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.vmodule 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];Endmodule4、7段数码管case语句实现及验证1)打开ISE10.1,新建工程hex7seg,设计参数选择:芯片选择Spartan3EXC3S1200E-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.vmodule 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;endcaseendmoduleseg7_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));endmodule4.结论对于简单点的数字电路从上面的流程可以看出,传统数字电路所有的过程都需要人工完成,试想对于一个包含上百个逻辑门的多输入变量的结构,根本无法使用人工化简卡诺图实现。
同时后续的电路调试和设计也需要很高的电路布局和布线的技巧,总而言之,这样的设计对于复杂数字系统来讲效率太低了。
我们需要进一步考虑的问题是,如何使用计算机帮助设计者简化设计过程,自动地化简卡诺图,并且在芯片内部自动实现布局布线。
要实现这些要求,就必须使用基于可编程逻辑器件的现代数字系统设计流程。
但是对于简单的数字系统,fpga 就显得过于复杂,而且有高成本的劣势。
现代数字电路优越性可以归纳为以下几点:1、可编程性。
FPGA中集成了成千上万的逻辑门,高端的FPGA还有乘累加器、RAM、锁相环等,这些资源是可以任意使用的,使用起来相当灵活。