第一篇:合肥工业大学EDA课程总结报告
EDA课程总结报告
一、EDA技术简介 1.EDA技术的概念
EDA即Electronic Design Automation的缩写,直译为:电子设计自动化 EDA技术有狭义和广义之分,狭义EDA技术就是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术,或称为IES/ASIC自动设计技术。
2.EDA技术的目的和意义
EDA技术以规模巨大的可编程逻辑器件(PLD)作为进行电子设计的载体,硬件描述语言(HDL)作为系统逻辑描述的一种主要 表达方式,通过它来完成对系统逻辑的描述,再依托具有强大功能的计算机,通过运用与 EDA 技术相应的工具软件,完成电子系统的 自动化设计。这种技术的应用使设计人员得以 高效快速地完成设计任务,使设计所用周期时间得以缩短,减少了设计所需的投入成本。20 世纪70年代由于计算机及集成电路的急剧发展,使电子技术受到剧烈的冲击,其更新换代的周期不断缩减,而专用的集成电路却不断提升其设计难度,致使两者之间的矛盾逐渐扩大,这就使得电子技术要不断地更新,从而满足电子产品生产的需要,经过近几十年的发展,电子设计技术大致经历了三个主要的发展阶段,从初期的 CAD 阶段到 CAE 阶段再到现在的 EDA 阶段,电子设计技术取得了飞跃性的发展。EDA技术最特别之处在于它的设计流程,与传统自下而上的电子设计流程恰恰相反,EDA技术选择使用自上而下的设计流程,它从电子系统设计的整体出发,在进行设计之前就将系统中各部分之间的结构规划好,在对方框图进行划分时完成相关的仿真和纠错工作,使用 HDL 对高层次逻辑进行描述,并运用综合优化方法完成所有有关工作,然后通过使用 EDA 技术,可以帮助用户实现对系统中任意一项硬件功能进行系统描述,最后再利用现场可编程门阵列(FPGA)或复杂可编程逻辑器 件(CPLD)来实现电子系统设计的结果。这种先进的电子技术有效地解决了传统电子设计技术的弊端,减少了实际应用中出现故障的几率,从而使设计效率得以大幅度提升。
二、EDA技术发展现状
EDA 技术发展迅猛, 逐渐在教学、科研、产品设计与制造等各方面都发挥着巨大的作用。
在教学方面: 几乎所有理工科(特别是电子信息)类的高校都开设了EDA 课程。主要是让学生了解EDA 的基本原理和基本概念、掌握用VHDL 描述系统逻辑的方法、使用EDA 工具进行电子电路课程的模拟仿真实验。如实验教学、课程设计、毕业设计、设计竞赛等均可借助CPLD/ FPGA 器件, 使实验设备或设计出的电子系统具有高可靠性, 又经济、快速、容易实现、修改便利, 同时可大大提高学生的实践动手能力、创新能力和计算机应用能力。
在科研方面: 主要利用电路仿真工具进行电路设计与仿真;利用虚拟仪器进行产品调试;将CPLD/ FPGA 器件的开发应用到仪器设备中, CPLD/ FPGA 可直接应用于小批量产品的芯片或作为大批量产品的芯片前期开发。传统机电产品的升级换代和技术改造, CPLD/ FPGA 的应用可提高传统产品的性能, 缩小体积, 提高技术含量和产品的附加值。作为高等院校有关专业的学生和广大的电子工程师了解和掌握这一先进技术是势在必行, 这不仅是提高设计效率的需要, 更是时代发展的需求, 只有掌握了EDA 技术才有能力参与世界电子工业市场的竞争, 才能生存与发展。随着科技的进步, 电子产品的更新日新月异, EDA 技术作为电子产品开发研制的源动力, 已成为现代电子设计的核心。所以发展EDA 技术将是电子设计领域和电子产业界的一场重大的技术革命, 同时也对电类课程的教学和科研提出了更深更高的要求。
在产品设计与制造方面: 从高性能的微处理器、数字信号处理器一直到彩电、音响和电子玩具电路等, EDA 技术不单是应用于前期的计算机模拟仿真、产品调试, 而且也在PCB 的制作、电子设备的研制与生产、电路板的焊接、制作过程等有重要作用。可以说EDA 技术已经成为电子工业领域不可缺少的技术支持。
进入21 世纪后,电子技术全方位纳入EDA 领域,EDA使得电子领域各学科的界限更加模糊,更加互为包容,突出表现在以下几个方面: 使电子设计成果以自主知识产权的方式得以明确表达和确认成为可能;基于EDA 工具的ASIC 设计标准单元已涵盖大规模电子系统及IP 核模块;软硬件IP 核在电子行业的产业领域、技术领域和设计应用领域得到进一步确认;SOC(System-on-Chip)高效低成本设计技术的成熟。随着半导体技术、集成技术和计算机技术的迅猛发展, 电子系统的设计方法和设计手段都发生了很大的变化。
传统的固定功能集成块加连线的设计方法正逐步地退出历史舞台, 而基于芯片的设计方法正成为现代电子系统设计的主流。
三、器件的封装
常用的各种电路元器件以及IC芯片采用的封装形式:
元件名称
元件符号
封装属性
电阻 RES1-RES4 AXIAL系列 从AXIAL-0.3到AXIAL-1.0,后缀数字代表两焊盘的间距,单位为Kmil.瓷片电容 RAD0.1-RAD0.3。其中0.1-0.3指电容大小,一般用RAD0.1 电解电容: RB.1/.2-RB.4/.8 其中.1/.2-.4/.8指电容大小。一般<100uF 用RB.1/.2,100uF-470uF用RB.2/.4,>470uF用RB.3/.6 电位器 POT1和POT2 VR-1到VR-5.普通二极管 DIODE DIODE0.4和DIODE 0.7 肖特基二极管 DIODE SCHOTTKY DIODE0.4和DIODE 0.7 隧道二极管 DUIDE TUNNEL DIODE0.4和DIODE 0.7 变容二极管 DIODE VARCTOR DIODE0.4和DIODE 0.7 稳压二极管 ZENER1~3 DIODE0.4和DIODE 0.7 发光二极管 RB.1/.2 三极管 NPN,NPN1,PNP,PNP1 TO18、TO-92A(普通三极管)TO-220(大功率三极管)TO3(大功率达林顿管)
N沟道结型场效应管 JFET N TO18 P沟道结型场效应管 JFET P TO18 N沟道增强型管 MOSFET N TO18 P沟道增强型管 MOSFET P TO18 整流桥 BRIDGE1和BRIDGE2 D系列,如D-44,D-37,D-46等。单排多针插座 CON CON系列,从CON1到CON60,引脚封装形式为SIP系列,从SIP-2到SIP-20。
.双列直插元件
根据功能的不同而不同
DIP系列。
串并口类原理图 DB DB系列,引脚封装形式为DB和MD系列 电源稳压块78系列 7805,7812 TO-126和TO-126 电源稳压块79系列 7905,7912 TO-126和TO-126
四、PCB板布线
PCB板布线对电路的影响:
1.我们要注意贴片器件(电阻电容)与芯片和其余器件的最小距离芯片:一般我们定义分立器件和IC芯片的距离0.5~0.7mm,特殊的地方可能因为夹具配置的不同而改变
2.对于分立直插的器件
一般的电阻如果为分立直插的比贴片的距离略大一般在1~3mm之间。注意保持足够的间距(因为加工的麻烦,所以直插的基本不会用)
3.对于IC的去耦电容的摆放
每个IC的电源端口附近都需要摆放去耦电容,且位置尽可能靠近IC的电源口,当一个芯片有多个电源口的时候,每个口都要布置去耦电容。
4.在边沿附近的分立器件
由于一般都是用拼板来做PCB,因此在边沿附近的器件需要符合两个条件,第一就是与切割方向平行(使器件的应力均匀),第二就是在一定距离之内不能布置器件(防止板子切割的时候损坏元器件)5.如果相邻的焊盘需要相连,首先确认在外面进行连接,防止连成一团造成桥接,同时注意此时的铜线的宽度。
6.焊盘如果在铺通区域内需要考虑热焊盘(必须能够承载足够的电流),如果引线比直插器件的焊盘小的话需要加泪滴(角度小于45度),同样适用于直插连接器的引脚。
7.元件焊盘两边的引线宽度要一致,如果时间焊盘和电极大小有差距,要注意是否会出现短路的现象,最后要注意保留未使用引脚的焊盘,并且正确接地或者接电源。
8.注意通孔最好不要打在焊盘上。
9.另外就是要注意的是引线不能和板边过近,也不允许在板边铺铜(包括定位孔附近区域)
10.大电容:首先要考虑电容的环境温度是否符合要求,其次要使电容尽可能的远离发热区域
五、总结
心得感想:
在开始上这门课时,我对它有一点兴趣,因为当我用自己所学的知识做出一些东西时我觉得特别开心。通过对这门课程相关理论的学习,我掌握了EDA的一些基本的的知识,用自己学到的东西尽可能的去完成老师布置的实验。通过实验使我更加深刻的认识和理解了EDA。不过在做实验的时候带来的不仅仅只是收获,也会有很多的困难。例如,当在画实验原理图的时候需要一个元件,但是怎么找都找不到这个元件。做实验的时候我也深刻的感觉到团结的力量以及在老师的重要性,有很多的时候出现问题了不要自己硬抗着,而是应该多问问身边的人,多问问老师,因为老师的指导会使你的问题马上得以解决而且你也会理解,当下次出现同样的错误时,你会很快的解决。
对这门课程的最大收获除了学习到了知识以外,更重要的是让我明白了一个道理:只要全身心的投入到一件事中,并且要有持之以恒的决心,就一定会有收获。有的人觉得自己做不出来,就网上搜一个了事,但是,放弃一次黑暗中摸索的经历,就放弃了一次成长的机会!如果你付出了,没有收获。那只能说,是付出的还不够多。
在学习这门课的时候我觉得实验真的很重要,而且只有经过实验我们才能更好的掌握所学的理论知识,才能更好的应用它们。
第二篇:EDA实验总结报告
数字EDA实验报告--------------薛蕾0941903207
数字EDA实验 实验报告
学院: 计算机科学与工程学院 专业: 通信工程 学号: 0941903207 姓名: 薛蕾 指导老师: 钱强
数字EDA实验报告--------------薛蕾0941903207 实验一 四选一数据选择器的设计
一、实验目的
1、熟悉Quartus II软件的使用。
2、了解数据选择器的工作原理。
3、熟悉EDA开发的基本流程。
二、实验原理及内容
实验原理
数据选择器在实际中得到了广泛的应用,尤其是在通信中为了利用多路信号中的一路,可以采用数据选择器进行选择再对该路信号加以利用。从多路输入信号中选择其中一路进行输出的电路称为数据选择器。或:在地址信号控制下,从多路输入信息中选择其中的某一路信息作为输出的电路称为数据选择器。数据选择器又叫多路选择器,简称MUX。4选1数据选择器:
(1)原理框图:如右图。
D0、D1、D2、D3
:输入数据 A1、A0
:地址变量
由地址码决定从4路输入中选择哪1路输出。
(2)真值表如下图:(3)逻辑图
数据选择器的原理比较简单,首先必须设置一个选择标志信号,目的就是为了从多路信号中选择所需要的一路信号,选择标志信号的一种状态对应着一路信号。在应用中,设置一定的选择标志信号状态即可得到相应的某一路信号。这就是数据选择器的实现原理。
三.实验内容
1、分别采用原理图和VHDL语言的形式设计4选1数据选择器
2、对所涉及的电路进行编译及正确的仿真。电路图:
四、实验程序
library ieee;use ieee.std_Logic_1164.all;
ENTITY mux4 IS
PORT(a0, a1, a2, a3 :IN STD_LOGIC;
s :IN STD_LOGIC_VECTOR(1 DOWNTO 0);
y :OUT STD_LOGIC);END mux4;ARCHITECTURE archmux OF mux4 IS
BEGIN y <= a0 WHEN s = “00” else
--当s=00时,y=a0 a1 WHEN s = “01” else
--当s=01时,y=a1 a2 WHEN s = “10” else
--当s=10时,y=a2 a3;
--当s取其它值时,y=a2 END archmux;
五、运行结果
六.实验总结
真值表分析:
当js=0时,a1,a0取00,01,10,11时,分别可取d0,d1,d2,d3.实验二 血型配对器的设计
一、实验目的
1、进一步熟悉Quartus II软件的使用。
2、掌握简单组合逻辑电路的设计方法与功能仿真技巧。
3、进一步学习Quartus II中基于原理图设计的流程。
二、实验原理及内容
实验原理
人类有O、A、B、AB 4种基本血型,输血者与受血者的血型必须符合图示原则。设计一血型配对电路,用以检测输血者与受血者之间的血型关系是否符合,如果符合,输出为1,否则为0。
已知: AB血型是万能受血者,O血型是万能献血者!如果要输血给O型血,那么可以的血型是O型!如果要输血给A型血,那么可以的血型是A,O型!如果要输血给B型血,那么可以的血型是B,O型!
如果要输血给AB型血,那么可以的血型是A,B,AB,O型!
输血者
受血者
O A
O A B AB
B AB
三.实验内容
1、用VHDL语言编写程序实现血型配对器的功能 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Vxuexing IS PORT(P,Q,R,S:IN STD_LOGIC;F:OUT STD_LOGIC);END Vxuexing;ARCHITECTURE A OF Vxuexing IS BEGIN
F<=((NOT P)AND(NOT Q))OR(R AND S)OR((NOT P)AND S)OR((NOT Q)AND R);END A;
2、对所编写的电路进行编译及正确的仿真。
实验分析 真值表
PQRSF***************11111
P,Q表示输血者的血型;R,S,表示受血者的血型。当两者符合血型配合原则时,F=1,否则为0.四、运行结果
五、实验总结
本实验给出了四种不同的血型编码,PQ(1,1),RS(1,1)表示AB型血,P,Q(1,0),RS(1,0)表示B型血,PQ(0,1),RS(0,1)表示A型血,PQ(0,0),RS(0,0)表示O型血。根据真值表,并根据实验的原理图,画出电路图并进行连接。
实验三 简单数字钟的设计
一、实验目的
1、了解数字钟的工作原理。
2、进一步学习Quartus II中基于VHDL设计的流程。
3、掌握VHDL编写中的一些小技巧。
4、掌握简单时序逻辑电路的设计方法与功能仿真技巧。
二、实验原理及内容
实验原理
简单数字钟应该具有显示时-分-秒的功能。首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转
三.实验内容
1、用原理图的方式编写一个12/24进制的计数器,并创建为SYMBOL文件。
2、用VHDL的方式编写一个60进制的计数器,并创建为SYMBOL文件。
3、创建顶层文件。调用已编写的SYMBOL文件,设计简单的数字钟电路。
2、对所编写的电路进行编译及正确的仿真。
二十四进制VHDL LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT24 IS PORT(CP, EN, Rd, LD :IN STD_LOGIC;
D
:IN STD_LOGIC_VECTOR(5 DOWNTO 0);
Co
:OUT STD_LOGIC;Q
:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));END CNT24;ARCHITECTURE STR OF CNT24 IS
SIGNAL QN : STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN Co<= '1'WHEN(QN = “010111”AND EN='1')
ELSE '0';PROCESS(CP, RD)
BEGIN IF(Rd ='0')THEN
QN<= “000000”;ELSIF(CP'EVENT AND CP='1')THEN IF(LD='0')THEN QN <= D;
ELSIF(EN='1')THEN QN <= QN+1;END IF;END IF;END PROCESS;Q <= QN;END STR;
六十进制VHDL LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jsq60 IS PORT(en,rd,cp :IN STD_LOGIC;
qh:buffer STD_LOGIC_VECTOR(3 DOWNTO 0);
ql :buffer STD_LOGIC_VECTOR(3 DOWNTO 0);
Co :OUT STD_LOGIC);END jsq60;ARCHITECTURE b OF jsq60 IS BEGIN Co<='1'when(qh=“0101”and ql=“1001” and en='1')else'0';PROCESS(cp,rd)
BEGIN IF(rd='0')THEN qh<=“0000”;ql<=“0000”;ELSIF(cp'EVENT AND cp='1')THEN
IF(en='1')THEN
IF(ql=9)THEN
ql<=“0000”;
IF(qh=5)THEN
qh<=“0000”;
ELSE qh<=qh+1;
end if;
else
ql<=ql+1;
end if;
end if;
END IF;END PROCESS;END b;
原理图
四、运行结果
24进制
60进制
时钟仿真结果
五、实验总结
此设计问题可分为主控电路,计数器模块和扫描显示三大部分,计数器在之前的学习中已经非常熟悉,只要掌握60,12进制的技术规律,用同步或异步计数器都可以实现。二扫描电路我们学过两种驱动方式:BCD码驱动方式和直接驱动方式。
实验四 简单交通灯的设计
一、实验目的
1、了解交通灯的亮灭规律。
2、了解交通灯控制器的工作原理。
3、进一步熟悉VHDL语言编程,了解实际设计中的优化方案。
二、实验原理及内容
实验原理
交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车子如果只要东西和南北方向通行就很简单,而如果车子可以左右转弯的通行就比较复杂,本实验仅针对最简单的南北和东西直行的情况。
要完成本实验,首先必须了解交通路灯的亮灭规律。依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。其交通灯的亮灭规律为:初始态是两个路口的红灯全亮,之后东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。
三.实验内容
1、用VHDL的方式编写一个简单的交通控制灯电路
2、对所编写的电路进行编译及正确的仿真。
程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity traffic is port(clk,enb : in std_logic;
ared,agreen,ayellow,bred,bgreen,byellow : buffer std_logic;
acounth,acountl,bcounth,bcountl : buffer std_logic_vector(3 downto 0));end traffic;
architecture one of traffic is begin process(clk,enb)variable lightstatus : std_logic_vector(5 downto 0);begin
if(clk'event and clk='1')then lightstatus := ared&agreen&ayellow&bred&bgreen&byellow;if((acounth=“0000” and acountl=“0000”)or(bcounth=“0000” and bcountl=“0000”))then Case lightstatus is When “010100”=> lightstatus:=“001100”;acountl<=“0101”;acounth<=“0000”;bcountl<=“0101”;bcounth<=“0000”;When “001100”=> if(enb='1')then lightstatus:=“100010”;acountl<=“0000”;acounth<=“0011”;bcountl<=“0101”;bcounth<=“0010”;
else lightstatus:=“010100”;acountl<=“0101”;acounth<=“0100”;bcountl<=“0000”;bcounth<=“0101”;end if;
when “100010”=>
lightstatus:=“100001”;acountl<=“0101”;acounth<=“0000”;bcountl<=“0101”;bcounth<=“0000”;
when “100001”=>
lightstatus:=“010100”;acountl<=“0101”;acounth<=“0100”;bcountl<=“0000”;bcounth<=“0101”;
when others=> lightstatus:=“010100”;acountl<=“0101”;acounth<=“0100”;bcountl<=“0000”;bcounth<=“0101”;
end case;else if(acountl=“0000”)then acounth<=acounth-1;acountl<=“1001”;
else acountl<=acountl-1;
end if;
if(bcountl=“0000”)then bcounth<=bcounth-1;bcountl<=“1001”;
else bcountl<=bcountl-1;end if;end if;end if;
ared<=lightstatus(5);agreen<=lightstatus(4);ayellow<=lightstatus(3);
bred<=lightstatus(2);bgreen<=lightstatus(1);byellow<=lightstatus(0);end process;end one;
四、运行结果
分析:
这里a代表东西方向,b代表南北方向,acounth是表示东西方向五进制计数acountl是东西方向六进制计数,bcounth则表示南北方向五进制,bounthl则是南北方向六进制计数 东西方向为0时,东西方向红灯亮(ared=1)
东西方向在1~4之间,东西方向绿灯亮(即agreen=1)南北方向 的红灯亮起(即bred=1)
五、实验总结
此设计问题可分为主控电路,译码驱动电路和扫描显示部分。
但是,这远远不能满足实际生活的需要,还应设置倒计时秒数,因此可在此电路基础上外加一个定时模块。
实验五 流水灯的设计
一、实验目的
1、了解流水灯的工作原理。
二、实验原理及内容
实验原理
要完成本实验,首先必须了解流水灯的原理。所谓的流水灯实际上就是由多个LED发光二极管构成的电路,当发光二极管可以依次点亮时,即能呈现流水的效果。实验内容
1、设计能带8个LED发光管发光,并按照要求轮流发光,产生流水灯的流动效果。
2、应具有两种以上不同风格的流动闪亮效果。比如依次点亮或者依次熄灭。(选作)
3、有起动、停止控制键。(选作)
4、有流动闪亮效果选择设置键。(选作)
5、对所编写的电路进行编译及正确的仿真。
三、实验程序
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yiweijicun1 IS PORT(CP,R,DSR,DSL:IN STD_LOGIC;
S:STD_LOGIC_VECTOR(2 DOWNTO 0);
D:STD_LOGIC_VECTOR(7 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END yiweijicun1;ARCHITECTURE yiweijicun_arch OF yiweijicun1 IS
SIGNAL IQ: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS(CP,R,IQ)BEGIN IF(R='1')THEN IQ <=(OTHERS =>'0');ELSIF(CP'EVENT AND CP ='1')THEN CASE CONV_INTEGER(S)IS WHEN 0=>NULL;WHEN 1=> IQ <= D;WHEN 2=> IQ <= DSR & IQ(7 DOWNTO 1);WHEN 3=> IQ <=IQ(6 DOWNTO 0)& DSL;WHEN 4=> IQ <= IQ(0)& IQ(7 DOWNTO 1);WHEN 5=> IQ <=IQ(6 DOWNTO 0)& IQ(7);WHEN 6=> IQ <= IQ(7)& IQ(7 DOWNTO 1);WHEN 7=> IQ <= IQ(6 DOWNTO 0)& IQ(0);WHEN OTHERS => NULL;END CASE;END IF;Q <= IQ;END PROCESS;END yiweijicun_arch;
四、运行结果
结果分析:
d[0]~d[7]为八个输入端,s[0]和s[1]控制流水灯得输出,s=1保持,s=2实现左移功能,s=3实现右移功能,因为延迟的原因,在s=2时,需要经过一段时间才能实现循环右移的功能,流水灯的实现其实是运用了8位移位寄存器,它只是运用了其中的保持左移与右移的功能,8LO位移位寄存器还有循环右移,循环左移,算数右移,算数左移等功能。
五、实验总结
了解了移位寄存器的功能和原理
通过这次实验,加深了VHDL语言的运用能力,更进一步了解了8位移位寄存器的功能。
实验六 乘法器的设计
一、实验目的
1、了解乘法器的工作原理。
2、了解复杂时序电路的设计流程。
二、实验原理及内容
实验原理
具体设计原理参见教材188页。实验内容
1、设计一个能进行两个十进制数相乘的乘法器,乘数和被乘数均小于100。(可以参考教材231页的VHDL代码来设计)
2、对所编写的电路进行编译及正确的仿真。
三、实验程序
library IEEE;use IEEE.std_logic_1164.all;
entity one_bit_adder is port(A: in STD_LOGIC;B: in STD_LOGIC;C_in: in STD_LOGIC;S: out STD_LOGIC;C_out: out STD_LOGIC);end one_bit_adder;
architecture one_bit_adder of one_bit_adder is begin
S <= A xor B xor C_in;C_out <=(A and B)or(C_in and(A xor B));
end one_bit_adder;library IEEE;use IEEE.std_logic_1164.all;
entity sichen is port(A: in STD_LOGIC_VECTOR(3 downto 0);B: in STD_LOGIC_VECTOR(3 downto 0);data_out: out STD_LOGIC_VECTOR(6 downto 0));end sichen;
architecture multi_arch of sichen is signal A_MULT_B0: STD_LOGIC_VECTOR(2 downto 0);signal A_MULT_B1: STD_LOGIC_VECTOR(2 downto 0);signal A_MULT_B2: STD_LOGIC_VECTOR(2 downto 0);
signal S_TEMP1: STD_LOGIC_VECTOR(1 downto 0);signal S_TEMP2: STD_LOGIC_VECTOR(1 downto 0);
signal C_TEMP : STD_LOGIC_VECTOR(6 downto 0);
signal C0_out_B0, C1_out_B0, C2_out_B0 : STD_LOGIC;signal C0_out_B1, C1_out_B1, C2_out_B1 : STD_LOGIC;
signal ZERO: STD_LOGIC;
component one_bit_adder port(A: in STD_LOGIC;B: in STD_LOGIC;C_in: in STD_LOGIC;S: out STD_LOGIC;C_out: out STD_LOGIC);end component;begin U_0_0 : one_bit_adder port map(A => A_MULT_B0(1), B => A_MULT_B1(0), C_in => ZERO, S => C_TEMP(1), C_out => C0_out_B0);U_0_1 : one_bit_adder port map(A => A_MULT_B0(2), B => A_MULT_B1(1), C_in => C0_out_B0, S => S_TEMP1(0), C_out => C1_out_B0);U_0_2 : one_bit_adder port map(A => ZERO, B => A_MULT_B1(2), C_in => C1_out_B0, S => S_TEMP1(1), C_out => C2_out_B0);
U_1_0 : one_bit_adder port map(A => A_MULT_B2(0), B => S_TEMP1(0), C_in => ZERO, S => C_TEMP(2), C_out => C0_out_B1);U_1_1 : one_bit_adder port map(A => A_MULT_B2(1), B => S_TEMP1(1), C_in => C0_out_B1, S => S_TEMP2(0), C_out => C1_out_B1);U_1_2 : one_bit_adder port map(A => A_MULT_B2(2), B => C2_out_B0, C_in => C1_out_B1, S => S_TEMP2(1), C_out => C2_out_B1);
A_MULT_B0(0)<= A(0)and B(0);A_MULT_B0(1)<= A(1)and B(0);A_MULT_B0(2)<= A(2)and B(0);
A_MULT_B1(0)<= A(0)and B(1);A_MULT_B1(1)<= A(1)and B(1);A_MULT_B1(2)<= A(2)and B(1);
A_MULT_B2(0)<= A(0)and B(2);A_MULT_B2(1)<= A(1)and B(2);A_MULT_B2(2)<= A(2)and B(2);
ZERO <= '0';C_TEMP(0)<= A_MULT_B0(0);C_TEMP(4 downto 3)<= S_TEMP2(1 downto 0);C_TEMP(5)<= C2_out_B1;
C_TEMP(6)<= A(3)xor B(3);
data_out <= C_TEMP;
end multi_arch;
四、运行结果
乘法器实现A,B两数的相乘。A[0]~A[3]以及B[0]~B[3]是实现输入端的控制。由图看出,输出上产生了延迟是因为当A[3]输入1,对应了十进制的8,B[0]输入1,对应了十进制的1,两者相乘得8,即在data_out端应输出8,此处因仍存在竞争冒险。
五、实验总结
乘法器的设计的问题可以分为乘数和被乘数控制模块,寄存模块,乘法模块和扫描显示模块几个部分。
两数相乘的方法很多,可以用移位相加的方法,也可以将乘法器看成计数器,乘积的初始值为零,每一个时钟周期将被乘数的值加到积上,同时乘数减一,这样反复执行,直到乘数为零。
第三篇:EDA课程心得
EDA课程学习心得
这学期的后半期,我们开了EDA技术这门课程。EDA的中文解释是电子设计自动化,这门课程主要是用于对现代高新电子产品的设计,EDA在硬件方面融合了大规模集成电路技术,是一款综合性很强的工具。
这门课程的学习在教学中应该以实践为主,我们每周有两节课,一节是理论课学习,一节是实践课。刚开始上理论课程的时候,主要是对该软件的使用做介绍,而在实践课程上,我们应该对软件进行运用,但是,有很多的同学却没有干与课程相关的事,只有一部分的同学在练习。开始的时候,对软件很陌生,都是几个同学在一起研究,并且询问老师,才慢慢的掌握了使用方法。在后面的理论学习中,老师主要是讲解编程的一些语法,并且只讲了一些常用的,像信号量,变量,还有PROCESS语句等,这些是编程中常用的一些知识。在实践课上,主要是以实验指导书为主,根据指导书上的内容进行编程,画图仿真来对EDA技术的运用有更深入的理解。在每周一节理论课的学习情况下,很多的时间都是很珍贵的,学习理论的时间就那么一点,那么,肯定就不可能学习的很全面,老师主要是讲方法,更多的是要我们自己努力。这本教材还很不错,讲解的很详细,让初学者也能理解。然后实践课程是可以在课后也能练习,课上发现问题就能及时的询问老师,但是,课后就只能询问同学,或者是将问题留到课堂上再问老师。
这门课程学完最大的感触就是学习的时间太短了,这门课程听老师说对我们的以后工作是有很大的帮助的,但是我们却只学习了半个学期,只用了32个课时就结束了,这肯定是不够的。EDA技术可以完成各种自动设计过程,是目前最为瞩目的一项技术,它有强大的逻辑设计仿真测试技术。它的仿真测试技术只要通过计算机,就能对所设计的电子系统从各种不同层次的系统性能特点完成一系列准确的测试与仿真操作,在完成实际系统的安装后,还能对系统上的目标器件进行所谓的边界扫描测试。这一切都极大的提高了大规模的系统电子设计的自动化程度。现在的很多设计工作都需要先进行计算机仿真,如果没有错误,在运用到实际的硬件中,这不仅能提高设计速度,还能减少因为设计失误而造成的原料浪费。学好一门仿真软件对于我们本科学生是必不可少的,因为以后毕业了如果从事设计方向的工作,那必然要求我们有这样的一门技术。
以下是我在这门课程的学习过程中总结的几点建议,希望老师能够耐心的看完:
(1)、根据学生的层次,设计一种适合学生的教学方案。像我们班这样的基础不太好的班级,可能采用重实践的方法更合适一些。上课讲很多的理论知识,都不及在机房自己练习来的快。而且,老师有时候在课堂上也不知道该给我们讲些什么我们才会更好的接收,这样的话,在我们自己动手实践的过程中我们发现了问题,经过询问老师和与同学一起研究,这样,就可以克服难题,而且,经过这样的经历,我们对于该问题也会有很深的印象,在以后的应用中出现类似的问题我们也会更快的找到方法解决。
(2)、在实践课上要严抓课堂秩序。在实践课的时候,很多同学都不做与课程相关的事,要么翻纸盘,要么几个一起玩游戏,而真正在做实验的同学就只有那么少许的人。很多人都是在一开始就养成这样的坏习惯的,如果在刚开始就严抓课堂秩序,那么,很多人可能就会按照要求循规蹈矩了。在实践课上是很重要的学习机会,本来课程安排的时间就很少,不好好的利用,那么肯定是一项严重的损失。
(3)、上理论课的时候尽量的多的将一些知识点讲详细一些。我们学习的都是很基础的知识,不要求深入,但是应该尽量的将基础的东西都掌握了。在这门课程中,我们只学习了几章较为基础和重要的内容,只要掌握了这几章也就能进行简单的编程,在这样的情况下,我们就更是需要老师帮助我们,引导我们,理清这些知识点,从而掌握它们。
以上是我在这门课程的学习中的一些感触和心得,虽然这门课程的学习结束了,但是,有一些学习方法是同样可以运用到其他的课程学习中,在以后的学习中,我们还应该坚持,努力,将学习进行到底!
第四篇:EDA实验二总结报告
实验二
数字秒表设计
一、实验目的
1、理解计时器的原理与Verilog/VHDL 的编程方法;
2、掌握多模块设计及层次设计的方法。
二、实验原理
秒计时器是由计数器和译码器、显示器组成,其核心是计数器与译码器。60 秒计时器可由二个计数器分别完成:个位为十进制计数器,十位为 6 进 制计数。个位计数器的计数信号由实验开发板上主频20MHZ分频产生的1Hz 时钟信号提供, 十位计数器的计数信号由个位的进位信号提供。然后由译码器 对计数结果进行译码,送LED 数码管进行显示。Clr为清零,se t为开始。
三、实验框图
四、实验任务
1、采用层次设计的方法,设计一个包括顶层及底层模块的60 秒计时器,底 层模块用Verilog/VHDL 设计,顶层用原理图设计。
2、秒计时器应当具有系统复位功能;
3、每十秒发出提示信号及计满60 秒时发出报警信号。(选做)
五、实验步骤与要求
1、分模块设计:首先分别设计10 进制、6 进制计数器、译码器模块;
2、顶层原理图如图7-1 所示;
3、编译完成后进行波形仿真;
4、进行引脚锁定,并下载至开发系统验证。
六、分模块设计 1.十进制计数器(1)程序代码:
module CNT10(CLK,RST,EN,COUT,DOUT);
input CLK,EN,RST;
output [3:0]DOUT;
output COUT;
reg[3:0]Q1;
reg COUT;
assign DOUT=Q1;
always@(posedge CLK or negedge RST)
begin
if(!RST)Q1<=0;
else if(EN)begin
if(Q1<9)Q1<=Q1+1;
else Q1<=4'b0000;end
end
always@(Q1)
if(Q1==4'h9)COUT=1'b1;
else COUT=1'b0;endmodule
(2)仿真波形
(3)模块符号
2.六进制计数器(1)程序代码:
module CNT6(CLK,RST,EN,COUT,DOUT);
input CLK,EN,RST;
output [3:0]DOUT;
output COUT;
reg[3:0]Q2;
reg COUT;
assign DOUT=Q2;
always@(posedge CLK or negedge RST)
begin
if(!RST)Q2<=0;
else if(EN)begin
if(Q2<5)Q2<=Q2+1;
else Q2<=3'b000;end
end
always@(Q2)
if(Q2==3'h5)COUT=1'b1;
else COUT=1'b0;endmodule
(2)仿真波形
(3)模块符号
3.分频器
(1)程序代码:
module FPQ(clk0,clk1);
input clk0;
output clk1;
reg[26:0] Q1;
reg clk1;always@(posedge clk0)
if(Q1<10)Q1<=Q1+1;
else
begin Q1<=0;
clk1<=~clk1;
end endmodule(2)模块符号
七.顶层原理图:
八.仿真波形
九.结果分析
当输入端CLK,EN,RST都不为0时,首先是十进制计数器开始进行计时,直到DOUT1输出端大于9时产生进位,并且自身变为0,同时使六进制计数器也开始计时,六进制输出端DOUT2大于5时产生进位,使COUT输出为1.
第五篇:EDA课程 跑马灯设计
EDA目录
第一章 设计思路.................................................................................................................................................1 第二章 子模块......................................................................................................................................................2 2.1 分频器....................................................................................................................................................2 2.2 显示模式模块.......................................................................................................................................3 2.3 显示LED灯模块..................................................................................................................................5 第三章 调试及结果............................................................................................................................................6 3.1顶层原理图............................................................................................................................................6 第四章 体会..........................................................................................................................................................7
第一章 设计思路
在掌握常用数字电路功能和原理的基础上,根据EDA技术课程所学知识,以及平时实验的具体操作内容,利用硬件描述语言HDL,EDA软件QuartusⅡ和硬件平台cycloneⅡFPGAJ进行一个简单的电子系统设计,本次试验我所完成的内容是跑马灯的设计,下面我简单的进行一下原理的阐述。
跑马灯课程设计的要求是控制8个LED进行花样显示,设计四种显示模块:第一种显示是从左向右逐个点亮LED。第二种显示:从右向左逐个点亮LED。第三种显示:从两边向中间逐个点亮LED。第四种显示:从中间到两边逐个点亮LED。四种显示模式循环切换,并带有一位复位键控制系统的运行停止。为了完成要求的效果显示,由于要求比较简单,所以不用分为很多模块来具体控制,所以我先择利用赋值语句来完成灯的点亮,根据了解我们实验箱上的LED灯属于共阴极接法,当给于高电平时点亮,那么当我们需要点亮某位LED灯时,只需在该位上赋予高电平即可,比如:如果我们要实现8个数码灯从左到右依次点亮,那么我们就可以给这8个数码灯分别赋值10000000,经过一段时间的延时后再给其赋值01000000,再经过一段时间延时后再给其赋值00100000,依次类推,则最后一种赋值状态为00000001,这样就得到了相应的现象。同理,要实现数码灯从右向左依次点亮,从中间向两端依次点亮,从两端向中间依次点亮都可以采用这样赋值的方法。在延时的程序编写的过程中,我们采用计数时钟脉冲个数的方式来实现。结合具体程序来说就是,在每个时钟上升沿将clk_cnt变量加一,当达到499999后,就进入显示进程做下一步的赋值操作以显示相应接续的状态。为了达到四种显示模式循环切换的目的,可以将以上的所有赋值语句以顺序语句的形式置于进程中,这样在完成了一种显示方式后就会自动进入下一种设定好的显示模式,如此反复循环。当需要程序复位时,只需按下rst键即可,程序不管走都那里,执行那条语句,只要确定复位键按下时,程序立刻返回到程序执行语句的第一步,程序接着进行新的循环点亮。
第二章 子模块
系统工作流程如下图所示,在没有外界输入控制时,中央控制器将反复循环输入预先设定的编码,因此8个数码灯将在四种显示模式中循环显示。若复位端被置0,则系统被重置,无论当前处于什么状态,都重新从最开始的状态开始重新执行。
2.1 分频器
输入一个CLK信号,通过分频器模块分别输送到显示模式模块和显示LED模块 生成分频器程序:
module FPQ(rst,clk,sel,fp);input clk,rst;input [1:0]sel;output fp;reg[1:0]temp;reg fp;always@(posedge clk or negedge rst)if(!rst)begin temp<=0;fp<=0;图1 分频器模块 end else case(sel)2'b00: if(temp==2)begin fp<=1;temp<=0;end Else begin temp<=temp+1;fp<=0;end 2'b01: if(temp==3)begin fp<=1;temp<=0;end Else begin temp<=temp+1;fp<=0;end 2'b10: if(temp==1)begin fp<=1;temp<=0;end Else begin temp<=temp+1;fp<=0;end 2'b11:fp<=clk;endcase endmodule 2.2 显示模式模块
在实验箱上显示彩灯运行的模式,分别有1-4种模式生成数码管显示程序:
module moshi(state,led,rst,clk,);input [1:0] state;input rst,clk;output[7:0] led;reg [7:0]led;reg [2:0]temp;always@(posedge clk or negedge rst)if(!rst)temp<=0;else if(temp==3'b111)temp<=3'b000;else temp<=temp+1;always@(posedge clk)case(state)2'b00: begin case(temp)3'b000:led<=8'b10000000;3'b001:led<=8'b01000000;3'b010:led<=8'b00100000;3'b011:led<=8'b00010000;3'b100:led<=8'b00001000;3'b101:led<=8'b00000100;3'b110:led<=8'b00000010;3'b111:led<=8'b00000001;
图2 显示模式模块 endcase end 2'b01: begin case(temp)3'b000:led<=8'b00000001;3'b001:led<=8'b00000010;3'b010:led<=8'b00000100;3'b011:led<=8'b00001000;3'b100:led<=8'b00010000;3'b101:led<=8'b00100000;3'b110:led<=8'b01000000;3'b111:led<=8'b10000000;endcase end 2'b10: begin case(temp)3'b000:led<=8'b10000001;3'b001:led<=8'b01000010;3'b010:led<=8'b00100100;3'b011:led<=8'b00011000;3'b100:led<=8'b10000001;3'b101:led<=8'b01000010;3'b110:led<=8'b00100100;3'b111:led<=8'b00011000;endcase end 2'b11: begin case(temp)3'b000:led<=8'b00011000;3'b001:led<=8'b00100100;3'b010:led<=8'b01000010;3'b011:led<=8'b10000001;3'b100:led<=8'b00011000;3'b101:led<=8'b00100100;3'b110:led<=8'b01000010;3'b111:led<=8'b10000001;endcase end endcase endmodule 2.3 显示LED灯模块
通过8个LED灯显示4种显示模式:1模式,从左到右逐个点亮LED;2模式,从右到左逐个点亮LED;3模式,从两边到中间逐个点亮LED;4模式,从中见到两边逐个点亮LED。生成LED灯模块程序:
module SEG7(ms,clk,rst,seg7);input clk,rst;input [1:0]ms;output [6:0]seg7;reg[6:0]seg7;always@(posedge clk or negedge rst)if(!rst)seg7<=7'b0111111;else case(ms)2'b00:seg7<=7'b0000110;2'b01:seg7<=7'b1011011;2'b10:seg7<=7'b1001111;2'b11:seg7<=7'b1100110;endcase endmodule
图3 显示LED灯模块
第三章 调试及结果
3.1顶层原理图
原理图如下:
图4原理图
根据引脚锁定,完成实验箱硬件电路部分的线路连接。
再次编译,设定好编程下载方式后,将导线与相应数码管及开关谅解好就可以进行硬件下载测试了。最后,将程序下载入芯片后,观察硬件运行结果,即数码灯显示情况。经测试,所编写的程序完全达到了课程设计的要求,并得要了相应的结果。
第一种显示是从左向右逐个点亮LED。第二种显示:从右向左逐个点亮LED。第三种显示:从两边向中间逐个点亮LED。第四种显示:从中间到两边逐个点亮LED。在每个显示模式之间都有一次8位led全亮,接着全灭的显示过程,四种显示模式通过手动切换,并带有一位复位键控制系统的运行停止。当rst按键按下时,led停止显示,保持按下前的状态,如过不按rst,八位led灯四种模式通过手动控制模式显示。
第四章 心得体会
在这为期近一周的EDA课程设计过程中,自己受益匪浅,不仅对书本知识有了更全面更深刻的理解,还掌握了QuartusⅡ这款软件。在以后的工作有增加了一门新技能。在整个课设过程中遇到了很多的困难,引脚的设定,顶层文件的建立,画图中连线的区分,都是小细节,但都必须注意,否则就会影响整个设计的实验的过程使我明白了,要想避免实验中走弯路,首先程序要逻辑清晰,简洁明了,避免不必要的嵌套与条用,其次要适当地给程序加上注解文字,提高可读性,以方便之后的程序出错时进行查找,最后充分利用仿真软件提供的各项编译工具与报错消息,按图索骥,有方向的完成程序调试。网上搜集的一些资料也给予了我很大的帮助。
在这短短几天的课设中,加深了我对EDA的理解,认识。对QuartusⅡ软件的使用更加得心应手,在以后的学习和工作中又多了一门技能。
书本上的知识学会知识了解,必须在实践中才能深入的掌握所学的知识,要不就是纸上谈兵,不论说的多么华丽,只有在实践中才能体现知识的价值,也才能考研一个人的真正能力。
这次EDA课设对我受益匪浅,谢谢在设计中帮助过我的老师和同学,团结就是力量。