范文一:eda课程设计
前言
伴随着科技时代的步伐, 现代电子产品正在以前所未有的革新速度, 向着功 能多样化、 体积最小化、 功耗最低化的方向迅速发展。 以大规模可编程逻辑器件 为基础,并且广泛运用现代化计算机技术的一门最新技术 —— EDA ,应运而生。 他的诞生, 大大提高了电子设计自动化的程度, 并且缩短了产品开发的周期, 提 高了产品的竞争力,进而引发了现代电子产品设计领域里的一场革命。
他的应用前景更是让人喜出望外。首先, EDA 技术,将广泛应用于高校电 类专业的实践教学工作中。对于电子技术课程设计,特别是数字系统性的课题, 在 EDA 实验室不许添加任何心的东西,即可设计出各种比较复杂的数字系统, 并且借助于实验开发系统可以方便地进行硬件验证, 如设计频率计、 交通控制灯、 秒表等。其次, EDA 技术也将在科研工作和新产品的开发中应用。由于可编程 逻辑器件性能价格比的不断提高,开发软件功能的不断完善, EDA 技术具有软 件的方式设计硬件,可用有关软件进行各种仿真,系统可现场编程、在线升级, 整个系统可集成在一个芯片上等特点, 这将使其广泛应用于科研工作和新产品的 开发工作中。再次, EDA 技术也将在专用集成电路的开发另约发挥举足轻重的 作用。 可编程期间制作厂家可按照一定的规格以通用器件形式大量生产, 用户可 按通用器件从市场上选购,然后按自己的要求通过编程实现专用集成电路的功 能。 因此, 对于集成电路制造技术与世界先进的集成电路制造技术尚有一定产距 的我国, 开发具有自主知识产权的专用集成电路, 已成为相关专业人员的重要任 务。最后, EDA 技术也将为传统几点设备的升级换代和技术改造带来全新的空 气。利用 EDA 技术进行传统机电设备的电气控制系统的重新设计或技术改造, 可以大大缩短周期, 降低设计成本, 并且能够提高产品或设备的性能, 缩小产品 体积,提高产品的技术含量。提高产品的附加值。
目录
1. 课程设计目的 ……………………………………………………………………… 1
2. 课程设计要求 ……………………………………………………………………… 1
3. 实验原理 …………………………………………………………………………… 1
一 . 控制模块……………………………………………………………………… 2
二 . 计数模块……………………………………………………………………… 2
三 、 寄存器 REG32B 的设计……………………………………………………… 2
4. VHDL 源程序 ……………………………………………………………………… 3
5. 引 脚 分 配 …………………………………………………………………… 7
6. 总结 ………………………………………………………………………………… 8 参考文献 …………………………………………………………………………… 9
1.课程设计目的
(1)学习使用 EDA 集成设计软件 Maxplus Ⅱ,了解电路描述、综合、模拟过程
(2)学习 VHDL 程序中数据对象、数据类型、顺序语句、并行语句的综合使用 了解 VHDL 程序的基本结构。
(3)掌握使用 EDA 工具设计数字系统的设计思路和设计方法。学习 VHDL 基本 逻辑电路的综合设计应用。
(4) 进一步了解 EDA 语言功能
(5) 了解 EDA 在高频工作下的优势,这是单片机无法比拟的
2.课程设计要求
(1)根据设计题目要求完成设计输入、综合、模拟仿真验证
(2)提供设计报告,报告要求包括以下内容:设计思路、设计输入文件、设计 与调试过程、模拟仿真结果和设计结论。
3、实验原理:
总设计设计思路
八位十进制数字频率计的电路逻辑图如下,它由一个测频控制信号发生器 TESTCTL , 8个优时钟使能的十进制计数器 CNT10、 一个 32位锁存器 REG32B 组成。
图 3.1 频率计总框图
采用一个标准的基准时钟,在单位时间如(1s )里对被测信号的脉冲数进行计数,即为 信号的频率。
8位数字频率计的顶层框图(endfreq.gdf )如图 7.1所示,整个系统可分为四个模块:控制模块、计数测量模块、锁存器模块和显示模块。
一、控制模块(testctl.vhd ) :
控制模块的作用是产生测频所需要的各种控制信号。控制信号的标准输入时钟为 1HZ , 每两个时钟周期进行一次频率测量。 该模块产生的 3个控制信号, 分别为 teten , load , clr_cnt。 Clr_cnt信号用于在每次测量开始时,对计数器进行复位,以清除上次测量的结果,该复位 信号高电平有效, 持续半个时钟周期的时间。 Teten 为计数允许信号, 在 teten 信号的上升沿 时刻计数模块开始对输入信号的频率进行测量, 测量时间恰为一个时钟周期 (正好为单位时 间 1s ) ,在此时间里对被测信号的脉冲数进行计数,即为信号的频率。然后将值锁存,并送 到数码管显示出来。 设置锁存器的好处是使显示的数据稳定, 不会由于周期性的清零信号而 不断闪烁。在每一次测量开始时,都必须重新对计数器清 0。
..
图 7.1 8位数字频率计的原理框图
控制模块的几个控制信号的时序关系如图 7.2所示。 从图中可看出, 计数使能信号 tsten 在 1s 的高电平后,利用其反相值的上跳沿产生一个锁存信号 load ,随后产生清 0信号上跳 沿 clr_cnt。
clk teten load
clr_cnt
图 7.2 控制信号时序关系
二、计数模块(count10.vhd ) :
计数器模块是由 8个带有异步清零端,进位信号输出的模为 10的计数模块级连而成
三 、 寄存器 REG32B 的设计
锁存器模块也是必不可少的,测频模块测量完成后,在 load 信号的上升沿 时刻将测量值锁存到寄存器中,然后输出到显示模块。
4.VHDL 源程序
--带清零和进位输出的十进制同步计数器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity count10 is
port( cp: in std_logic; --系统时钟输入 (12M) clr: in std_logic; --清零信号输入 db: out std_logic_vector( 3 downto 0); --计数信号输出 a: in std_logic; --计数脉冲输入 s: out std_logic; --微分信号输出 CY: out std_logic --进位信号输出 );
end count10;
architecture beha of count10 is
signal q: std_logic_vector( 3 downto 0);
signal q1,q2: std_logic;
signal EC: std_logic;
begin
process(cp,clr)
begin
IF CLR='1' THEN
q<= (="" others="">'0'); -- 计数器清零
elsif (cp'event and cp='1') then
q2<=q1;>=q1;><=a; --="" 延时="" 2个系统时钟周期="" if="" ec='1'>=a;>
if q<9 then="" --="">9>
q<>
else
q<=( others="">'0'); --等于 9计数器清零
end if;
end if;
end if;
end process;
EC<=not q2="" and="" q1;="">=not>
cy<='1' when="" q="9" and="" ec='1' else="">='1'>
'0';
db<=q;>=q;>
s<=ec;>=ec;>
end beha;
波形仿真图 1.1
--频率计 (测量范围 1Hz~6M)
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity endfreq is
port ( clk: in std_logic; -- 系统时钟 (12M)输入 f2: in std_logic; -- 待测信号输入 sel: out std_logic_vector(2 downto 0); -- 显示位选信号输出 outa: out std_logic_vector( 6 downto 0) -- 显示数据输出 );
end endfreq;
architecture behave of endfreq is
component count10 -- 十进制同步计数器组件
port ( cp: in std_logic;
clr: in std_logic;
a: in std_logic;
s: out std_logic;
db: out std_logic_vector(3 downto 0);
cy: out std_logic
);
end component;
signal hex: std_logic_vector( 3 downto 0);
signal data: std_logic_vector(31 downto 0);
signal data1: std_logic_vector(31 downto 0);
signal clr1: std_logic;
signal c0,c1,c2,c3,c4,c5,c6:std_logic;
signal cy1: std_logic;
signal count: std_logic_vector( 2 downto 0);
signal ms: std_logic;
signal sec: std_logic;
begin
free_count: block -- 产生 400Hz 时钟信号
signal q: std_logic_vector( 14 downto 0);
signal rst1,dly: std_logic;
begin
process( clk)
begin
if rst1='1' then
q<=( others="">'0');
elsif ( clk'event and clk='1') then
q<=q+1;>=q+1;><=q(14); end="" if;="" end="">=q(14);>
rst1<='1' when="" q="30000" else="">='1'>
ms<= dly="" and="" not="" q(14);="" end="" block="" free_count;="" process(="">=>
begin
if( ms'event and ms='1') then
count<=count+1; end="">=count+1;>
end process;
波形仿真 1.2
--8选 1数据选择器
hex <= data1(3="" downto="" 0)="" when="" count="0">=>
data1(7 downto 4) when count=1 else data1( 11 downto 8) when count=2 else data1(15 downto 12) when count=3 else data1(19 downto 16) when count=4 else data1( 23 downto 20) when count=5 else data1(27 downto 24 ) when count=6 else data1(31 downto 28) when count=7 else
sel<=count; --显示位选信号输出="" process(="" hex)="" --="" 七段译码器="">=count;>
case hex is -- 7 segment encoder
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when others => outa<>
end case;
end process;
second: block -- 产生 1 Hz 时钟信号
signal qq: std_logic_vector(23 downto 0);
signal rst2,dly: std_logic;
begin
process( clk)
begin
if rst2='1' then
qq<=(others=>'0');
elsif ( clk'event and clk='1') then
qq<>
dly<>
end if;
end process;
rst2<='1' when="" qq="12000000">='1'>
'0';
sec<=dly and="" not="">=dly>
end block second;
process( sec)
begin
if( sec'event and sec='1') then —秒信号上升沿时刻读计数值,并存储 data1<>
end if;
end process;
clr1<= sec;="" --秒信号高电平时,清除全部计数器="" end="">=>
波形仿真
1.3
波形仿真 1.4 5. 引脚分配(ACEX EP1K30TC144-3) :
out0-P144、 out1-P8、 out2-P9、 out3-P10 、 out4-P12、 out5-P13、 out6-P17 sel0-P101、 sel1-P102、 sel2-P117、 clk-P125、 f2-P88
管脚标号 dout0到 dout6分别接到 LED 的 8位段码中的 7位上; sel0到 sel2接到实验箱中 74ls138的输入端; clk1HZ 为 1HZ 标准时钟输入 , 接到频率源上的 clk5; sysclk 为 LED 显示时钟输入 , 接到频率源上的 clk1; freq 接入待测信号。 管脚标号对应的 I/O如下所示:
User
Assignments Node Name Clk1@125 CLK1HZ endfreq@144 DOUT0 endfreq@8 DOUT1 endfreq@9 DOUT2 endfreq@10 DOUT3 endfreq@12 DOUT4 endfreq@13 DOUT5 endfreq@17 DOUT6 endfreq@88 FREQ endfreq@101 SEL0 endfreq@102 SEL1
endfreq@117 SEL2
sysclk@119 SYSCLK
6. 总结
课程设计是培养学生综合运用所学知识 , 发现 , 提出 , 分析和解决实际问题 , 锻 炼实践能力的重要环节 , 是对学生实际工作能力的具体训练和考察过程 . 随着科学 技术发展的日新日异, EDA 已经成为当今计算机应用中空前活跃的领域, 在生 活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握 EDA 的开发技 术是十分重要的。
回顾起此次 EDA 课程设计, 我仍感慨颇多, 的确, 从选题到定稿, 从理论到 实践, 在接近一星期的日子里, 可以说得是苦多于甜, 但是可以学到很多很多的 的东西, 同时不仅可以巩固了以前所学过的知识, 而且学到了很多在书本上所没 有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的, 只有理论知识是远远不够的, 只有把所学的理论知识与实践相结合起来, 从理论 中得出结论, 才能真正为社会服务, 从而提高自己的实际动手能力和独立思考的 能力。 在设计的过程中遇到问题, 可以说得是困难重重,这毕竟第一次做的, 难 免会遇到过各种各样的问题, 同时在设计的过程中发现了自己的不足之处, 对以 前所学过的知识理解得不够深刻, 掌握得不够牢固, 比如说不懂一些元器件的使 用方法,对 EDA 汇编语言掌握得不好 …… 通过这次课程设计之后,一定把以前 所学过的知识重新温故。
这次课程设计终于顺利完成了, 在设计中遇到了很多编程问题, 最后在李静, 李 川香老师,段丽娜老师的辛勤指导下,终于游逆而解。同时,在李静,李川香老 师, 段丽娜老师那里我学得到很多实用的知识, 在次我表示感谢! 同时, 对给过 我帮助的所有同学和各位指导老师再次表示忠心的感谢!
参考文献
[1] 侯伯享 .VHDL 硬件描述语言与数字逻辑电路设计 . 西安 :西安电子科技 大学出版 ,1997
[2] 潘松 .EDA 技术实用教程 . 成都 :电子科技大学出版社 ,2000
[3] 李玉山 . 电子系统集成设计技术 . 北京:电子工业出版社, 2001.6. [4] 李国丽 .EDA 与数字系统设计 . 北京 :机械工业出版社 ,2004
[5] 周彩宝 .VHDL 语言及其应用 . 上海 :华东计算机技术研究所 ,1998 [6] 谭会生 .EDA 技术中和应用实例与分析 . 西安 :西安电子科技大学出版 社 ,2004
[7] 符意德 . 嵌入式 系统设计 原理及 应用 . 北 京:清 华大学出 版社, 2005.7.
[8] 吴伟陵 . 移动通信中的关键技术 . 北京:北京邮电大学出版社, 2001.6. [9] 胡乾斌 . 李光斌 . 李玲 . 喻红 . 单片微型计算机原理与应用 . 武汉:华中 科技大学出版社, 2006.2.
[10] 于海生 . 微型计算机控制技术 . 北京:清华大学出版社, 2006.8 [11] 林红 . 周鑫霞 . 数字电路与逻辑设计 . 北京:清华大学出版社, 2004.8 [12] 谭会生 . 张 昌凡 . EDA技术 及应用 . 西安 : 西安 电子 科技大 学出版 社 ,2001
[13] 朱定华 . 陈林 . 电子电路测试与实验 . 北京:清华大学出版社, 2005.7 [14] 刘皖 . 谭明 . FPGA设计与应用 . 北京 : 清华大学出版社 ,2006.6
[15] 黄智伟 . FPGA系统设计与实践 . 北京 : 电子工业出版社 ,2005.1 [16] 王志鹏 . 何丽琴 . 可编程逻辑器件开发技术 MAX+plusⅡ . 北京 : 国防 工业出版社 ,2005.3
课程设计成绩 :
注 :教师按学生实际成绩(平时成绩和业务考核成绩)登记并录入教务 MIS 系统,由系统自 动转化为“优秀(90~100分)、良好(80~89分)、中等(70~79分)、及格(60~69分) 和不及格(60分以下)”五等。
指导教师评语 :
指导教师(签名) : 20 年 月 日
范文二:eda课程设计
EDA 设 计 报 告
课程名称 在系统编程技术
任课教师 某某某
设计题目
班级 06电子一班
姓名 某某某
学号
日期 2008年 11月 29日
目录
1.题目分析 ..................................................................................................................................... 3 1. 1要求分析 . ......................................................................................................................... 3 1. 2整体框图 . ......................................................................................................................... 3
1. 3技术指标和功能要求 . ..................................................................................................... 3
2.方案选择 ..................................................................................................................................... 4 2. 1密码锁的输入平台 . ......................................................................................................... 4 2. 2核心模块 . ......................................................................................................................... 4
2. 3主控模块 . ......................................................................................................................... 5
3.细化框图 ..................................................................................................................................... 5
4.编写应用程序并进行仿真 . ........................................................................................................ 7
5.结论 ............................................................................................................................................ 9
6.课程总结 ................................................................................................................................... 10
7.参考文献目录 . .......................................................................................................................... 11
8.附录(原程序) . ...................................................................................................................... 11 8. 1编码器 ............................................................................................................................ 11 8. 2主控 . ............................................................................................................................... 12 8. 3选择器一 . ....................................................................................................................... 14 8. 4选择器二 . ....................................................................................................................... 14 8. 5计数器一 . ....................................................................................................................... 15 8. 6计数器二 . ....................................................................................................................... 16
1.题目分析 :
1. 1要求分析 :
在日常的生活和工作中 , 住宅与部门的安全防范、单位的文件档案、财务报 表以及一些个人资料的保存多以加锁的办法来解决。 若使用传统的机械式钥匙开 锁,人们常需携带多把钥匙 , 使用极不方便 , 且钥匙丢失后安全性即大打折扣。 随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。 为满足人们对锁的使用要求,增加其安全性,用密 码代替钥匙的密码锁应运而 生。密码锁具有安全性高、成本低、功耗低、易操作等优点。
我的这个课程设计是采用先进的 EDA(电子设计自动化 ) 技术,利用 Quartus Ⅱ 6.0工作平台和 VHDL(超高速集成电路硬件描述语言 ) ,设计了一种简易但实 用的电子密码锁。用 CPLD 芯片实现。由于充分利用了 CPLD 芯片密度大、功 耗低、 可重复编程和具有嵌入式阵列块的结构特点, 因而该密码锁体积小、 功耗 低、价格低、安全可靠、具有、维护和升级方便。由于采用 VHDL 进行设计, 用软件实现硬件电路, 具有良好的可移植性, 可随时在线更改逻辑设计及有关数, 充分体现 CPLD 的优越性,具有一定的实用性。
1. 2整体框图 :
1.
3技术指标和功能要求 :
(1)
设计的总体要求 :
用自顶向下的设计思路设计一个简易的数字密码锁,该锁应在收到 3
位与规定码相符的十进制数码时打开,使相应的指示灯点亮;若收到的代 码与规定的不符或者开锁程序有误,表示错误的只是灯点亮。由于我所设 计的这个密码锁密码位数较少, 所以必须给输密者严格的次数限制 (两次) , 若两次之类没有输对则表示输密者不是该锁的使用者。 此时报警铃长响 (只 有锁的使用者才能关闭) 。
(2)系统功能描述 :
(2.1)系统接通电源后,首先按动 START 键后方投入运行。运行时标志开门的 指示灯和报警灯、铃皆不工作,系统处于安锁状态。
(2.2)开锁代码是 3位十进制数, 可以通过系统预先设定。 开锁时输入代码不 足三位或超过三位均不能开锁。
(2.3) 开锁程序由设计者确定, 用户必须严格执行所规定的程序, 方可开锁。 (2.4)开锁代码和程序正确,表示数字锁打开的指示灯亮。
(2.5) 允许用户在开锁过程中有 1次错误(输入代码错误或开锁程序错误) , 只要出错, 表示错误的指示灯必定点亮。 如果有 2次错误, 则报警器——喇叭名 叫,以示情况异常。
(3)操作的具体步骤:
Step1:按启动键(start )启动开锁程序 , 此时系统内部分处于初始状态。 Step2:依次键入十进制码。
Step3:按开门键(open )准备开门。
若按上述程序执行且拨号正确,则开门并且绿灯亮;若密码输入 错误或未按上述程序执行,则按动开门键(open )后报警灯亮 -——红灯亮。
Step4:开锁事务处理完毕后,应将门关上,按 set 键,使系统重新进入安锁 状态。
Step5:若第一次红灯亮时, 应按下 start 键重新输入密码, 输入完毕后再次按 下 open1键。
Step6:若又输错了,则红灯亮并且报警器响。 (若在报警,按 set 或 start 均 不起作用,应另用一内部的 I_setup键才能使系统进入安锁状态) 。
注:若按错号码,可在按 open1键之前按 setup 键重新使密码锁复位。 若还要开锁重新执行上面的步骤。
2.方案选择 :
2. 1密码锁的输入平台 :
对一般的密码锁而言, 一个正规的密码输入系统是该密码锁能够正常使用的 有力保证。对本文所设计的密码锁而言,密码输入按键上会定义 0~9这十个键。 如果要保证在按上某个键的同时会有相应的信号输入, 初步计划使用 0~9的编码 器来实现。
对编码器的要求有,按键不置锁即琴键(按下是有效,松手时复原) 。每输 入一个数字时送给核心模块的是一个单位脉冲。
2. 2核心模块 :
核心模块的功能是对所输入的密码有一个识别的作用。 这是任何一个密码锁 必须具备的功能。 因为器件对密码的识别分为两个部分, 一是判断密码输入是否 正确;二是判断密码的位数是否与系统内部所设置的一样。
如果想实现密码识别的第一个部分就需要一个数字比较器, 对每输入的一个 脉冲进行判别。而对于第二个部分,则需要一个三进制的计数器(0~2)当输入 的三个密码全部正确时,进位端口就会输出一个一。 (注:这里所说的选择器与 计数器都是自己用 VHDL 语言定义的, 可能与实际存在的某些逻辑器件功能不太 相同 )
2. 3主控模块 :
主控模块用于对密码锁各种功能的扩展。在本文的密码锁设置中,主控模块 包括开门 启动键(START ) ,开门键(OPEN ) ,复位键(SETUP ) ,内部复位键(I_SETUP) 。 除了这些手动按键外, 还有两个时钟脉冲输入接口。 (CLK ) 时状态变化信号 (后面会有说明) , (CLK512) 是所接报警器声音的频率, 当你选择多少频率的输入脉冲时, 扬声器就会产生多 大频率的声音效果。
由于主控模块中包括各种各样的状态和情况, 而各种状态与状态之间又是因为按上某键 触发而成的。 所以对于这个主控部分的设计, 可初步定为使用状态机的设计思路。 一旦使用 状态机的设计方法,就需要一个状态转换脉冲(“ CLK ”就是起着状态转换的作用) 。
3.细化框图 :
主控模块和密码输入平台可以直接用一个单一的 vhdl 语言描述器件来制作, 主控模块是一自定义的状态机,输入平台是一个自定义的编码器。
核心模块又分为四个小模块:两个计数器,两个选择器。这四个器件均用 vhdl 自定义其功能。
顶层文件:(用逻辑图连接)
各个器件在逻辑原理图当中的符号和作用:
编码器(bmq ) :s0~s9为十个信号输入端 , 为用户提供输入端平台。
主控器件(icontrol ) :对密码锁有一个全局的控制,是对其功能的 扩展。
选择器一(mbjq ) :判定所输入的密码的正确性,它与计数器二
(cnt3)搭配使用。
选择器二(yc ) :用来消除编码器与选择器一直坚信号传递的延迟。
计数器一(cnt31) :用来确定所输入的正确密码的个数,当三个密
码输入全部正确的时候, co 端给主控返回 1。
计数器二(cnt3) :当在输入端每输入一个数字的时候,计数加一
并以此来改变选择器一对所输入的数字的选择。总体来说,它是
与两个选择器搭配来使用的。
注:具体的源程序见文章最后的附录。
4.编写应用程序并进行仿真 :
把编写好的各个程序再 quartus6.0的环境下进行编译, 并对各个模块的结果 进行仿真看其是否是自己想要的器件。 当确定是自己需要的器件时, 对该器件进 行封装以便好被顶层文件调用。
当各个模块的器件完成编译仿真时, 按照框图制作顶层文件。 为了看上去能 够一目了然, 本次设计的顶层文件采用逻辑图连接的方式进行制作 (“细化框图” 里已经给出) 。
顶层文件制作完毕后,需要进行软件上的仿真,具体的方针结果如下:
(1)密码第一次输对的情况:(密码是:416)
(2)密码第一次输错的情况:
(3)密码第一次输错但第二次输对的情况:
(4) 密码两次都输错的情况:
(5) 密码两次都输错之后需要复位的情况:
5.结论 :
在进行过仿真之后,需要对其在硬件上进行实现。
由于 gw48(模式 3)试验平台上按键的限制,并基于所给 cpld 的型号为 EP1C3T144C8。本次设计在硬件上的引脚接入方式为:
4—〉 pin1
1—〉 pin2
6—〉 pin3 clk —〉 pin93 (16hz) 2—〉 pin4 clk —〉 pin16 (1mhz) Setup —〉 pin5 red —〉 pin11
I_setup—〉 pin6 gree —〉 pin32
Start —〉 pin7 kaimen —〉 pin33
Open1—〉 pin10 jbao —〉 pin129
硬件测试过程:
(1)按 start 后直接输入 416,并按 open1键。绿灯亮,开门亮。
(2) 按 start 后输入 412,并按 open1键。红灯亮。
(3) 按 start 后输入 412,并按 open1键。红灯亮。在按下 start 键,红灯灭。 再输入 416并按 open1键,绿灯亮,开门亮。
(4) 按 start 后输入 412,并按 open1键。红灯亮。在按下 start 键,红灯灭。 再输入 614并按 open1键,红灯亮,警报响 1mhz 的声音。
(5)在 (4)的情况下按其它键均没有效果,只有按 i_setup键才会使警报解除。
(6)无意输错一个号码,在按下 open1前,按 setup 键,并执行 (1)过程。绿灯 亮,开门亮。
密码锁的大体总结:
就通过软件仿真和硬件测试的结果来看,完全符合了设计前的想法。 因此该密码锁的设计也就算基本完成了。
但就市场需求而言,该密码锁的设计还是缺乏某些面向客户的功能。 在我看来,他的主要缺陷有以下几点:
(1)没有外观的密码设置功能。对于该锁的设计,密码设置是在程序里 面,而对使用的客户而言修改锁内的程序是不太可能的。
(2)密码较短。如果密码较短的话,会增加按中密码的概率,这样一来 会对锁的安全性造成一定的影响。
(3)显示功能。如果没有显示功能的话,会导致用户在设置密码时存在 一定的盲目性。
6.课程总结 :
经过了六周的理论课讲解和七周的实验课实践, eda 这门课程于本周结束 了。 纵观这门课程它的主要目的是通过本课程的学习 , 使我们了解 EDA 技术的发 展概况;能正确运用 quartus 6.0软件绘制电原理图;能借助于 quartus 6.0软件 对电子电路进行模拟仿真; 使我们具备能够看懂简单数字系统的能力以及培养我 们自学能力、分析问题能力和解决问题能力。
对我而言让我受益最大的无非是对 vhdl 语言有了一个大致的了解, 结合上 个学年的数电课程,我才发现数字电路的奥妙所在。 VHDL 是一种用形式化方法 描述数字电路和系统的硬件描述语言。利用 VHDL ,可以完成数字电路系统的描 述、仿真验证。总体来说 VHDL 具有以下的几个特点:
(1)VHDL具有更强的行为描述能力 ;
(2)VHDL丰富的仿真语句和库函数,使得在设计的早期就能查验设计系统的 功能可行性,随时可对设计进行仿真模拟 ;
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分 解和已有设计的再利用功能 ;
(4)对于用 VHDL 完成的一个确定的设计, 可以利用 EDA 工具进行逻辑综合和 优化,并自动的把 VHDL 描述设计转变成门级网表
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不 必管理最终设计实现的目标器件是什么,而进行独立的设计 。
当然, 对于这门课程的学习我也有很多的不足之处。 这主要都集中于前面六 周的理论课程。现在我会做的只是对 vhdl 语言的简单应用,而有关 cpld/fpga的有关结构和基本构造则不是十分的了解。 除此之外, 数字电路的有关知识的缺 乏在这门课程的学习中体现得比较明显。 这些不足之处我只有在这门课结束之后 进行单方面的自补,这样做也是为我们的后续专业课做好准备。
7.参考文献目录 :
《 EDA 技术实用教程》 潘松 黄继业 编著 《 VHDL 与数字电路设计》 卢毅 编著 《数字电路与逻辑设计基础》 曹汉方 编著
8.附录(原程序) :
8. 1编码器 :
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity bmq is
port(en,s0,s1,s2,s3,s4,s5,s6,s7,s8,s9:in std_logic; sor:out std_logic;
d0:out std_logic_vector(3 downto 0));
end;
architecture bmqx of bmq is
signal d:std_logic_vector(3 downto 0);
begin
process(en,s0,s1,s2,s3,s4,s5,s6,s7,s8,s9)
begin
if en='1' then
if s0='1' then
d<>
elsif s1='1' then
d<>
elsif s2='1' then
d<>
elsif s3='1' then
d<>
elsif s4='1' then
d<>
elsif s5='1' then
d<>
elsif s6='1' then
d<>
elsif s7='1' then
d<>
elsif s8='1' then
d<>
elsif s9='1' then
d<>
else d<>
end if;
end if;
end process;
d0<>
end bmqx;
8. 2主控 :
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity icontrol is
port(i_setup,setup,start,open1,result,clk512,clk:in std_logic; en,gree,red,jbao,kaimen: out std_logic);
end icontrol;
architecture mmtrol1 of icontrol is
type stats is(s0,s1,s2,s3,s4,s5,s6);
signal current_state, next_state:stats;
begin
reg:process(clk)
begin
if(clk'event and clk='1') then
current_state<>
end if;
end process reg;
com:process(current_state,result,open1,setup,start,i_setup) begin
case current_state is
when s0=>en<><><><><='0'; if="" start='1' then="">='0';><>
else next_state<>
end if;
when s1=>en<><><><><='0'; if="" setup='1' then="">='0';><>
elsif result='1' then next_state<>
elsif open1='1' then next_state<>
else next_state<>
end if;
when s2=>en<><><><><='0'; if="" setup='1' then="">='0';><>
elsif open1='1' then next_state<>
else next_state<>
end if;
when s3=>en<><><><><='1'; if="" setup='1' then="">='1';><>
else next_state<>
end if;
when s4=>en<><><><><='0'; if="" start='1' then="">='0';><>
else next_state<>
end if;
when s6=>en<><><><><='0'; if="" result='1' then="">='0';><>
elsif result='0' and open1='1' then next_state<=s5; else="">=s5;><>
end if;
when s5=> en<><><><>
jbao<>
if i_setup='1' then next_state<>
else next_state<>
end if;
end case;
end process com;
end mmtrol1;
8. 3选择器一 :
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity mbjq is
port( d:in std_logic_vector(3 downto 0); sel:in std_logic_vector(1 downto 0); result :out std_logic);
end mbjq;
architecture behav of mbjq is
begin
process(sel)
begin
if(sel=
result<>
elsif(sel=
result<>
elsif(sel=
result<>
else
result<>
end if;
end process;
end behav;
8. 4选择器二 :
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity yc is
port(d0:in std_logic_vector(3 downto 0); sel :in std_logic_vector(1 downto 0);
result :out std_logic_vector(3 downto 0)); end yc;
architecture behav of yc is
begin
process(sel)
begin
if (sel=
end if;
end process;
end behav;
8. 5计数器一 :
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt31 is
port(clk,en :in std_logic;
co:out std_logic;
q:buffer std_logic_vector(1 downto 0)); end cnt31;
architecture behav of cnt31 is
begin
process(en,clk)
begin
if(en='0')then
q<>
elsif (clk'event and clk='1') then
if q=
ELSE
q<><>
end if;
end if;
end process;
end behav;
8. 6计数器二 :
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt3 is
port(clk,en :in std_logic;
q:buffer std_logic_vector(1 downto 0)); end cnt3;
architecture behav of cnt3 is
begin
process(en,clk)
begin
if (clk'event and clk='1') then
if(en='1')then
if q=
ELSE
q<>
end if;
end if;
end if;
end process;
end behav;
注:将各个模块连接起来的顶层文件在“细化框图”中已给出。
范文三:eda课程设计
基于 CPLD 的信号发生器设计
摘 要 :本文给出了一种采用 CPLD 作为主控器的信号发生器设计方案。由于采用 EDA 技术进行设计,该方案具有工作 速度快,硬件体积小,可靠性高等优点。
关键词 :信号发生器; VHDL ; EDA ; CPLD
1 引言
随着社会的发展,人们对生活的要求也逐步提高,也越来越希望在各个方面都有很大的提高,尤 其是在信号方面,信号发生器作为提供测试用电信号的仪器必不可少。传统信号发生器要用模拟器件 来实现,后来出现了用数字电路来设计的方案,例如采用单片机等。 EDA 技术的出现与可编程器件的 应用改变了数字电路的设计方法。采用可编程器件进行项目开发具有费用低、开发时间短的特点 , 有利 于新产品占领市场。本文给出了一种采用 CPLD 作为主控部件的信号发生器设计方案,在设计输入时采 用 VHDL 进行描述,再连入外围电路与 CPLD 构建起整个系统。
2 系统设计
2.1 设计要求
信号发生器能够产生正弦波、方波、三角波,并可通过开关选择输出波形。
2.2 设计思路
根据设计要求,智能信号发生器由 4部分组成,既电源模块、时钟信号发生器、主控器、 D/A转 换模块,系统结构如图 1所示。晶体振荡器产生稳定度很高的时钟信号,在时钟信号的作用下,主控 器产生频率可变的波形数据信号,经数 /摸转换电路最终输出所需要的波形。
图 1 系统结构框图
2.3 模块设计
2.3.1 主控器设计
在主控器内部也共有四个模块,既三角波模块,正弦波模块,方波模块和一个控制模块,通过编 程可以分别设计这四个模块。
图 3 CPLD内部控制原理图
2.3.1.1 三角波模块
三角波模块是在设计时置一变量作为工作状态标志,在此变量全为 0时,当检测到时钟的上升沿 时进行加同一个数操作,全为 0时,进行减同一个数操作。由于 A/D转换采用 12位的 ADC7545芯片, 且设 64个时钟为一个三角波周期,输出每次加 /减 8。设计程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY delta IS
PORT(clk,reset:IN STD_LOGIC;
q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END delta ;
ARCHITECTURE behave OF delta IS
BEGIN
PROCESS(clk,reset)
VARIABLE tmp: STD_LOGIC_VECTOR(7 DOWNTO 0);
VARIABLE a: STD_LOGIC;
BEGIN
IF reset=’ 0’ THEN
tmp:=” 00000000” ;
ELSIF clk’ EVENT AND clk=’ 1’ THEN
IF a=’ 0’ THEN
IF tmp=” 11111110” THEN
tmp:=” 11111111” ;
a:=’ 1’ ;
ELSE
tmp:=tmp+1; -------- 递增运算 END IF;
ELSE
IF tmp=” 00000001” THEN
tmp:=” 00000000” ;
a:=’ 0’ ;
ELSE
tmp:=tmp-1; ---------递减运算 END IF;
END IF;
END IF;
q<>
END PROCESS;
END behave;
2.3.1.2 正弦波模块
正弦波模块是对一个正弦波周期分为 64个采样点,然后量化为 8位 2进制数据,最大值为 255, 最小值为 0,由此得到正弦波表,经 D/A转换得到波形。设计程序为:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY sin IS
PORT(clk,clr:IN STD_LOGIC;
d: OUT INTEGER RANGE 0 TO 255);
END sin;
ARCHITECTURE behave OF sin IS
BEGIN
PROCESS(clk,clr)
VARIABLE tmp: INTEGER RANGE 0 TO 63;
BEGIN
IF clr=’ 0’ THEN
D<>
ELSIF clk’ EVENT AND clk=’ 1’ THEN
IF tmp=63 THEN ---------一个周期取 64点
tmp:=0;
ELSE
tmp:=tmp+1;
END IF;
CASE tmp IS ----查表输出
WHEN 00=>d<=255; when="" 01="">d<>
WHEN 02=>d<=252; when="" 03="">d<>
WHEN 04=>d<=245; when="" 05="">d<>
WHEN 06=>d<=233; when="" 07="">d<>
WHEN 08=>d<=217; when="" 09="">d<>
WHEN 10=>d<=197; when="" 11="">d<>
WHEN 12=>d<=174; when="" 13="">d<>
WHEN 14=>d<=150; when="" 15="">d<>
WHEN 16=>d<=124; when="" 17="">d<>
WHEN 18=>d<=99; when="" 19="">d<>
WHEN 20=>d<=75; when="" 21="">d<>
WHEN 22=>d<=53; when="" 23="">d<>
WHEN 24=>d<=34; when="" 25="">d<>
WHEN 26=>d<=19; when="" 27="">d<>
WHEN 28=>d<=8; when="" 29="">d<>
WHEN 30=>d<=1; when="" 31="">d<>
WHEN 32=>d<=0; when="" 33="">d<>
WHEN 34=>d<=4; when="" 35="">d<>
WHEN 36=>d<=13; when="" 37="">d<>
WHEN 38=>d<=26; when="" 39="">d<>
WHEN 40=>d<=43; when="" 41="">d<>
WHEN 42=>d<=64; when="" 43="">d<>
WHEN 44=>d<=87; when="" 45="">d<>
WHEN 46=>d<=112; when="" 47="">d<>
WHEN 48=>d<=137; when="" 49="">d<>
WHEN 50=>d<=162; when="" 51="">d<>
WHEN 52=>d<=186; when="" 53="">d<>
WHEN 54=>d<=207; when="" 55="">d<>
WHEN 56=>d<=225; when="" 57="">d<>
WHEN 58=>d<=239; when="" 59="">d<>
WHEN 60=>d<=249; when="" 61="">d<>
WHEN 62=>d<=254; when="" 63="">d<>
END CASE;
END IF;
END PROCESS;
END behave;
2.3.1.3方波模块
方波模块设计是交替送出全 0和全 1,并以 32个延时实现, 64个时钟为一个周期。设计程序为: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY square IS
PORT(clk,clr:IN STD_LOGIC;
q: OUT INTEGER RANGE 0 TO 255);
END square;
ARCHITECTURE behave OF square IS
SIGNAL a:BIT;
BEGIN
PROCESS(clk,clr)
VARIABLE cnt: INTEGER ;
BEGIN
IF clr=’ 0’ THEN
a<=’ 0’="">=’>
ELSIF clk’ EVENT AND clk=’ 1’ THEN
IF cnt<63>63>
cnt:=cnt+1;
ELSE
Cnt:=0;
a<=not a="">=not>
END IF;
END IF;
END PROCESS;
PROCESS(clk,a)
BEGIN
IF clk’ EVENT AND clk=’ 1’ THEN
IF a=’ 1’ THEN
q<>
ELSE
q <>
END IF;
END IF;
END PROCESS;
END behave;
2.3.1.4 控制模块
控制模块是通过 SEL0和 SEL1来选择波形,并且用 reset 作为清零开关结束上一次的波形选择。 通过 q0— q7输出。设计程序为:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ch61a IS
PORT(sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
d0,d1,d2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END ch61a;
ARCHITECTURE behave OF ch61a IS
PROCESS(sel)
BEGIN
CASE sel IS
WHEN “ 00” =>q<=d0; -----------三角波形出="" when="" “="" 01”="">q<=d1; ------------正弦波输出="" when="" “="" 10”="">q<=d2; -----------方波形输出="" when="" others="">NULL;
END CASE;
END PROCESS;
END behave;
2.3.2 D/A转换模块
图 4 D/A转换电路
电路中, AD7545将波形数据转换为模拟信号; LF353进行信号滤波和整形。
2.3.3 晶振电路模块
图 5 晶振电路
在此电路中,通过 12M 的石英晶体和电容及 74LS04来产生 12MHz 的频率电路。
2.3.4 电源模块
图 6 电源原理图
在此电路中, 220V 电压经变压器到整流桥能产生直流电压,再通过电容滤波,通过 7805和 7905来产生稳定的 +5V和 -5V 电压。
2.4 设计验证
图 7 三角波仿真图
图 8 正弦波仿真
图 9 方波仿真图 2.5 印制电路板设计
图 10 系统原理图
11
图 11 PCB
板图
图 12 3D图
3 结束语
本文介绍了一种基于 CPLD 的信号器的设计方案,用 VHDL 语言来设计主控器部分,并用 D/A转换 将数字信号转换成模拟信号用示波器显示出波形。主控器部分采用 MAX+PLUS II进行仿真,仿真结果 验证了设计的正确性。
致 谢
在作者设计的过程中,指导老师陈卫兵给予了大力支持,陈老师认真负责的工作态度,严谨的治 学精神和深厚的理论水平使作者受益匪浅。在此表示感谢!
参考文献
[1] 李国洪,沈明山 . 可编程器件 EDA 技术与实践 [M]. 北京:机械工业出版社, 2004
[2] 王金明 .Verilog HDL程序设计教程 [M]. 北京:人民邮电出版社, 2004
[3] 潘松、黄继业 .EDA 技术实用教程 [M]. 北京:科学出版社, 2002
[4] 徐惠民 , 安德宁 . 数字逻辑设计与 VHDL 描述 [M]. 北京 : 机械工业出版社 , 2002
[5] 杜建国 . Verilog HDL 硬件描述语言 [M]. 北京 :国防工业出版社 , 2004.1
[6] 廖裕平,陆瑞强 . 数字电路设计—使用 MAX+plus II[M]. 北京:清华大学出版社, 2001
Signal Generator Design Based on CPLD
Name: Liu Zhiyi Student Number:200440602115
Advisor: Chen Weibing
Abstract: This article gives a signal generator design using CPLD as the main controller. As a result of using EDA technique, the design proposal has many advantages such as of fast working speed, small size in hardware, high reliability. Keywords:Signal Generator; VHDL; EDA; CPLD
12
范文四:eda课程设计
第一章 设计原理
UART 协议是数据通信及控制系统中广泛使用的一种全双工串行数据传输协议,在实际 工业生产中有时并不使用 UART 的全部功能。只需将其核心功能集成即可。波特率发生器、 接收器和发送器是 UART 的三个核心功能模块,利用 Verilog-HDL 语言对这三个功能模块进 行描述并加以整合 UART (即 Universal Asynchronous Receiver Transmitter通用异步收发器) 是广泛使用的串行数据传输协议。随着 FPGA/CPLD的飞速发展与其在现代电子设计中的广 泛应用, FPGA/CPLD功能强大、开发过程投资小、周期短、可反复编程、保密性好等特点也 越来越明显。因此可以充分利用其资源,在芯片上集成 UART 功能模块,从而简化了电路、 缩小了体积、提高了可靠性,而且设计时的灵活性更大,周期更短。
1.1 UART基本特点
基本的 UART 通信只需要两条信号线(RXD 、 TXD )就可以完成数据的相互通信,接收 与发送是全双工形式。 TXD 是 UART 发送端,为输出; RXD 是 UART 接收端,为输入。
UART 的基本特点是:
(1)在信号线上共有两种状态,可分别用逻辑 1(高电平)和逻辑 0(低电平)来区分。 在发送器空闲时,数据线应该保持在逻辑高电平状态。
(2)起始位(Start Bit) :发送器是通过发送起始位而开始一个字符传送,起始位使数据 线处于逻辑 0状态,提示接受器数据传输即将开始。
(3)数据位(Data Bits) :起始位之后就是传送数据位。数据位一般为 8位一个字节的数 据(也有 6位、 7位的情况) ,低位(LSB )在前,高位(MSB )在后。
(4)校验位(parity Bit) :可以认为是一个特殊的数据位。校验位一般用来判断接收的数 据位有无错误,一般是奇偶校验。在使用中,该位常常取消。
(5)停止位:停止位在最后,用以标志一个字符传送的结束,它对应于逻辑 1状态。
(6)位时间:即每个位的时间宽度。起始位、数据位、校验位的位宽度是一致的,停止 位有 0.5位、 1位、 1.5位格式,一般为 1位。
(7)帧:从起始位开始到停止位结束的时间间隔称之为一帧。
(8)波特率:UART 的传送速率,用于说明数据传送的快慢。在串行通信中,数据是按 位进行传送的,因此传送速率用每秒钟传送数据位的数目来表示,称之为波特率。如波特率 9600=9600bps(位 /秒) 。
1.2 UART结构组成
本设计以 FPGA 为基础来实现异步通信,而 UART 模块就为本设计关键所在,如图 1所示, 该模块主要有串行发送器、接收器以及波特率发生器三个模块组成。
波特率发生器模块:在异步通信中,发送方和接受方必须保持相同的波特率才能实现正确的 数据传送。在本设计中,由于 RS-232C 传输必定是工作在某种波特率下,为了便于和 RS-232C 总线进行同步,需要产生符合 RS-232C 传输波特率的时钟。
图 1 UART 模块图
波特率发生器实际上就是一个分频器。可以根据给定的系统时钟频率(晶振时钟)和要 求的波特率算出波特率分频因子,算出的波特率分频因子作为分频器的分频数。波特率分频 因子可以根据不同的应用需要更改。由于串行数据帧和接收时钟是异步的,由逻辑 1转为逻 辑 0可以被视为一个数据帧的起始位。然而,为了避免毛刺影响,能够得到正确的起始位信 号,必须要求接收到的起始位在波特率时钟采样的过程中至少有一半都是属于逻辑 0才可认 定接收到的是起始位。由于内部采样时钟 bclk 周期(由波特率发生器产生)是发送或接收波 特率时钟频率的 16倍,所以起始位需要至少 8个连续 bclk 周期的逻辑 0被接收到,才认为 起始位接收到,接着数据位和奇偶校验位将每隔 16个 bclk 周期被采样一次(即每一个波特 率时钟被采样一次) 。发送器只要每隔 16个 bclk 周期输出 1个数据即可,次序遵循第 1位是 起始位,最后一位是停止位。在本设计中没有校验位,但只要改变 Generic 参数 FrameLen , 也可以加入校验位,停止位是固定的 1.5位格式。
第二章 UART设计内容
2.1波特率发生器
波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表 示,其单位是波特(Baud ) 。波特率与比特率的关系是比特率 =波特率 X 单个调制状态对应的 二进制位数。
模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量。如果数据不压缩, 波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常 大于调制速率,使得交换使用波特和比特 /秒偶尔会产生错误。
UART 的接收和发送是按照相同的波特率进行收发的。波特率发生器产生的时钟频率不是 波特率时钟频率,而是波特率时钟频率的 16倍,目的是为在接收时进行精确地采样,以提出
异步的串行数据。
2.2发送模块设计
串行发送数据时每秒钟发送的比特个数称之为波特率, 常用串行口波特率有 9600、 19200、 115200等多种。
UART 的数据帧的形式分组发送数据,以 8位数据位、 1位起始位和 1.5位停止位的帧格 式为例,每一个数据帧由 10位数据构成,首先是一个低电平起始位来标志帧开始,随后由低 至高发送 8位数据,最后是 1.5位高电平的停止位。
在逻辑结构上,每秒 9600次的发送节拍由波特率发生器产生,它是一个参数化、分频比 的整数分频器。这里使用边沿逻辑,对于分频时钟的占空比并没有要求,所以直接用模 n 计 算器进行分频。 9600Hz 的时钟信号驱动 10bit 的一位计数器,将数据总线上载入的 8bit 数据 加上起始位和停止位后由低到高依次移除。发送模块设计流程图如图 2所示。
发送过程:当要发送数据出去时, 先把要发送的 CPU 内部数据存储到数据 I/O缓存器, 传送 到数据寄存器, 然后进行串并转换。 UART 模块内部会重置波特率发生器控制逻辑控制移位寄存 器进入 RS-232C 串行发送的协议模式,并且使移位寄存器工作在波特率模式下,于是移位寄存 器便在波特率时钟的驱动下依次将数据寄存器的数据一位一位发送到 RS-232C 的发送端 TXD , 这样就产生了 RS-232C 的数据发送时序。
图 2 发送模块流程图
2.3接收模块设计
UART 是异步传输接口,没有时钟信号同步。所以接收端需要进行过采样来保证数据的 接收, RS232标准规定的过采样率是以发送波特率的 16倍时钟对数据进行检测。
UART 接收逻辑通过检测 TXD 上起始位的下降沿作为帧同步标准, 这样就相当于把每个 位分成了 16份,为了避免干扰取 16份中位于中部的 6、 7、 8三个采样进行判别,以它们中 两个或两个以上相同的值作为采样结果。接收模块设计流程图如图 3所示。
接收过程:当 UART 模块检测到有新数据(RS-232C 总线传输线的起始位)就会触发接收流 程。首先 UART 模块内部会重置波特率发生器和移位寄存器,控制逻辑使移位寄存器的工作模 式为波特率模式,以准备数据接收,其次移位寄存器在波特率时钟的驱动下工作,不断的读取 RS-232C 串行总线上的输入数据,一位一位的接收,并且将数据保存到内部的数据寄存器内。然 后在进行串并转换,在通过 CPU 内部数据总线传送到数据 I/O缓存器,最后被 CPU 内部采用。
图 3 接收模块流程图
第三章 运行输出结果
3.1分频器仿真及分析 假设数据的波特率为 p ,则所需时钟的频率为 16*p 。以波特率 p 为 9600
为例,系统时钟 为 1MHz ,则分频系数为 1000000/(16*9600) = 6.5。对程序进行仿真,加入输入输出信号, 设置系统时钟信号 clk 的周期为 20ns 。仿真图如图 4所示。
图 4 分频器仿真图
3.2
发送模块仿真及分析
UART 发送模块的功能:接收到发送指令后,把数据按 UART 协议输出,先输出一个低 电平的起始位,然后从低到高输出 8个数据位,接着是可选的奇偶校验位,最后是高电平的 停止位。
用 Quartus II软件建立工程机顶层文件,编译输入各个参数数据,并进行波形仿真。如图 5所示。
图 5 发送模块仿真图
对图,当发送命令 wrsig 的上升沿有效时,启动发送数据。串行数据的波形与发送数据 d ataout 相一致, UART 的发送模块得到正确验证。
3.3接收模块仿真及分析
UART 接收模块的功能:时时检测线路,当线路产生下降沿时,即认为线路有数据 传输,启动接收数据进程进行接收,按从低位到高位接收数据。
用 Quartus II 软件建立工程机顶层文件,编译输入各个参数数据,并进行波形仿真。 如图 6所示。
图 6 接收模块仿真图
对图分析看出, UART 接收模块接收到的数据与 UART 发送模块发送的数据相一至,每 接收到一个数据都有一个读取数据指示 rdisg , UART 接收模块得到正确验证。
第四章 总结
本文设计的模块工作在应用比较普遍的方式 , 实现全双工的通信。还可以通过设置波特 率发生器的寄存器设置工作的波特率 , 以适应各种不同的场合。本文介绍了用软件方式构建 UART 的一种方法 , 本设计完全采用 Verilog-HDL 语言进行描述。 实现了 UART 设置的系统时 钟输入,复位输入 , 数据接收,数据发送,波特率发生器 。
这次 EDA 课程设计历时一个多星期, 在这段日子里, 可以说是苦多于甜, 但是可以学的 到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有 学到过的知识。 通过这次设计, 进一步加深了对 EDA 的了解, 让我对它有了更加浓厚的兴趣。 知识是无穷无尽的,知识的获取需要一颗上进的心,老师将我们领进了门,下面的路就应该 我们自己出去去走,即使充满荆棘,也要努力奋斗向前冲。
总的来说,这次设计的结果还是比较成功的,在设计中遇到了很多问题,最后在华老师 的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的 价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使 自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。
参考文献
[1]郑亚民 , 董晓舟 .VHDL 与 VerilogHDL 比较学习及建模指导 . 北京:国防工业出版社, 2008.6 [2]夏宇闻 , Verilog 数字系统设计教程(第 2版) [M] ,北京航空航天大学出版社, 2008 [3]基聂涛,许世宏 《现代电子技术》 2006年第二期总第 217期
[4]程耀林 .FPGA 的系统设计方法解析 [J].现代电子技术 , 2005
[5]吴继华,王诚 . 设计与验证 Verilog HDL[M].北京:人民邮电出版社, 2006
范文五:eda课程设计总结
班级:电信 0703
姓名:邬芳 陈楚碧 付蕾
学号:3070503062
3070503063
3070503064
EDA
这次EDA课程设计历时八天,可以说是苦多于甜,但是可以学到很多很多的东西,不
仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设
计,进一步加深了对EDA的了解,让我们对它有了更加浓厚的兴趣。特别是当每一个子模块
编写调试成功时,心里特别的开心。但是在编写顶层文件的程序时,遇到了不少问题,特别
是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和
警告,排除困难后,程序编译就通过了,心里终于舒了一口气。在波形仿真时,也遇到了一
点困难,想要的结果不能在波形上得到正确的显示:在设定输入的时钟信号以及楼层请求信号后,但是始终看不到所要到达的楼层。后来,在数十次的调试之后,才发现是因为输入的
信号对于器件的延迟时间控制得不对。经过屡次调试,终于找到了比较合适的输入数值,得
到了完整的仿真结果。
其次,在连接各个模块的时候一定要注意各个输入、输出引脚的线宽,因为每个线宽是
不一样的,只要让各个线宽互相匹配,才能得出正确的结果,否则,出现任何一点小的误差
就会导致整个文件系统的编译出现错误提示,在器件的选择上也有一定的技巧,只有选择了
合适当前电路所适合的器件,编译才能得到完满成功。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不
够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,
从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困
难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自
己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
总的来说,这次设计的脉搏器、交通灯控制器、电梯还是比较成功的,在设计中遇到了
很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时
所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且
锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。
最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
=d2;>=d1;>=d0;>=254;>=249;>=239;>=225;>=207;>=186;>=162;>=137;>=112;>=87;>=64;>=43;>=26;>=13;>=4;>=0;>=1;>=8;>=19;>=34;>=53;>=75;>=99;>=124;>=150;>=174;>=197;>=217;>=233;>=245;>=252;>=255;>=(others=>=(>=(>=>