欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    EDA课程设计内容.docx

    • 资源ID:6312726       资源大小:353.80KB        全文页数:44页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    EDA课程设计内容.docx

    1、EDA课程设计内容1 绪论1.1 EDA 技术概论 EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大

    2、地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。1.2 硬件描述语言VHDL 1.2.1 VHDL简介VHDL全名Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。VHDL语言是一种用于电路设计的高级语言。 它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高 设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。 VHDL翻译成中文就是超高速集成电路硬件描述语言,主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在 FPGA/CPLD/EPL

    3、D的设计中。当然在一些实力较为雄厚的单位,它也被 用来设计ASIC。 1.2.2 VHDL 的流程设计从系统总体要求出发,自上而下地逐步将设计的内容细化,最后完成系统硬件的整体设计。在设计的过程中,对系统自上而下分成三个层次进行设计:第一层次是行为描述。所谓行为描述,实质上就是对整个系统的数学模型的描述。一般来说,对系统进行行为描述的目的是试图在系统设计的初始阶段,通过对系统行为描述的仿真来发现设计中存在的问题。在行为描述阶段,并不真正考虑其实际的操作和算法用何种方法来实现,而是考虑系统的结构及其工作的过程是否能到达系统设计的要求。第二层次是RTL方式描述。这一层次称为寄存器传输描述(又称数据

    4、流描述)。如前所述,用行为方式描述的系统结构的程序,其抽象程度高,是很难直接映射到具体逻辑元件结构的。要想得到硬件的具体实现,必须将行为方式描述的VHDL语言程序改写为RTL方式描述的VHDL语言程序。也就是说,系统采用RTL方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合。第三层次是逻辑综合。即利用逻辑综合工具,将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表)。此时,如果需要,可将逻辑综合的结果以逻辑原理图的方式输出。此后可对综合的结果在门电路级上进行仿真,并检查其时序关系。应用逻辑综合工具产生的门网络表,将其转换成PLD的编程码,即可利用PLD实现硬件电路的设计。由自

    5、上而下的设计过程可知,从总体行为设计开始到最终的逻辑综合,每一步都要进行仿真检查,这样有利于尽早发现设计中存在的问题,从而可以大大缩短系统的设计周期。1.3 Quartus II 软件操作流程双击桌面上Quartus II 9.0,打开Quartus软件。(1) 新建VHDL文件 ,开始编写VHDL程序。(2) 保存VHDL文件,文件取名要与程序实体名要一致。(3) 创建新工程按下“保存”按纽后会出现如下提示。提示是否为此文件建立一个工程,这很重要。然后点击“是”,出现以下窗口,点“Next ”。图1.1 新建工程提示 (4)器件的选择继续点“Next ”。然后选择FPGA或CPLD的有关参数

    6、,这些参数都是根据目标芯片来选择的,如下图所示。图1.2 芯片选择 (5)编译编译:选择processing菜单中的start compilation命令。编译完成的提示如下,点击确定即可。 (6)仿真 这时可以进行仿真,首先要建立波形文件,点“File选项中New”,出现如下窗口:图1.3 建立波形文件 选择 “Vector waveform File”点“OK”。出现以下窗口。 图1.4 建立波形文件后出现窗口 双击左边的空白处,设定输入输出信号。设定好波形后,保存波形。之后点进行仿真。(7)锁定引脚引脚锁定,如下图操作:引脚的锁定是根据不同的电路和不同功能来确定的,不是一层不变的。选择A

    7、ssignments菜单下的Pins命令,出现以下窗口,图1.5 引脚分配图如果是下载到实验箱上则需连续按“模式选择”按钮选择模式5,再按“系统复位”按钮。进行引脚锁定,查阅附表,分别点“location”选择引脚号。引脚锁定后再编译。如同此前进行过的。编译成功后点确定。(8)下载选择Tools菜单下的Programmer命令,然后在Program/Configure下打上钩选中,点“start”按钮开始下载,“Progress”进度条显示下载进度。成功下载后如图所示:图1.6 下载到实验箱界面下载完后就可以在实验箱查看结果。 通过上面的步骤分别下载到实验箱中和FPGA中,验证了在仿真中的结果

    8、是正确的。2 课题设计2.1 出租车计费器设计内容 (1)能实现计程与计费功能,计费标准为:按行驶里程收费,分为白天与黑夜。白天收费标准:起步价为6.00元,超过1公里按1元/公里计算,超过3公里多收10块钱的空车返回费用。黑夜收费标准:起步价为8.00元,超过1公里按2元/公里计算,超过3公里多收10块钱的空车返回费用。 (2) 能够有对路程清零与对计费停止功能。当无乘客不需要计费时,对路程清零及对价格清零。 (3) 实够实现按键控制显示路程、价格及当前车速,当车速超过4Km/h时发出警报。2.2 出租车计费器设计方框图 出租车计费器是由输入信号、分频器(供蜂鸣器发生警报提供不同的频率)、路

    9、程计数模块、计费模块、控制模块(控制输出显示路程、价格或当前车速)、及译码显示模块(八个七段数码管)。其总体方框图如下所示:图2.1 总体设计方框图2.3 出租车计费器系统各功能模块及模块程序 2.3.1 计程与计费模块 计程与计费模块由一个时钟输入端 clk 与使能端en及复位端rst端与位选端SL2.0及显示输出端led6.0构成。其en 端为1时允许计数,rst为1时计数清零。图2.2 计程与计费模块图其仿真图如下所示:图2.3 计程与计费模块仿真图其程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arit

    10、h.all;use ieee.std_logic_unsigned.all;entity taxi is port( Clk : in std_logic; daytime : in std_logic; Rst : in std_logic; en : in std_logic; Motor : in std_logic; Display : out std_logic_vector(6 downto 0); SEG_SEL: buffer std_logic_vector(2 downto 0) ); end taxi;architecture one of taxi is signal

    11、Disp_Temp : integer range 0 to 15; signal Disp_Decode: std_logic_vector(6 downto 0); signal Meter1,Meter10,Meter100,Meter1K : integer range 0 to 9; signal Money1,Money10,Money100 : integer range 0 to 9; signal Old_Money1 : integer range 0 to 9; begin process(Motor) begin if(Rst=0) then Meter1=0; Met

    12、er10=0; Meter100=0; Meter1K=0; elsif(Motorevent and Motor=1) then if(Meter1=9) then Meter1=0; if(Meter10=9) then Meter10=0; if(Meter100=9) then Meter100=0; if(Meter1K=9) then Meter1K=0; else Meter1K=Meter1K+1; end if; else Meter100=Meter100+1; end if; else Meter10=Meter10+1; end if; else Meter1=Mete

    13、r1+1; end if; end if; end process; process(Clk) begin if en=0 then null; elsif(Rst=0) then Money1=0; Money10=0; Money100=0; elsif(Clkevent and Clk=1) then if daytime =0 then -bai tian if(Meter1K1) then Money100=0; Money10=6; Money1=0; Old_Money1=0; else Money1=Meter100; Old_Money1=Money1; if(Old_Mon

    14、ey1=9 and Money1=0) then if(Money10=9) then Money10=0; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10=Money10+1; end if; end if; if (Meter1K=3) then Money100=1; Money10=8; Money1=0; Old_Money12 )then Money1=Meter100; Old_Money1=Money1; if(Old_Money1=9 and Money1=0) th

    15、en if(Money10=9) then Money10=0; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10=Money10+1; end if; end if; end if ; end if; end if; else -hei ye if(Meter1K1) then Money100=0; Money10=8; Money1=0; Old_Money1=0; else Money1=Meter100; Old_Money1=Money1; if(Old_Money1=9 a

    16、nd Money1=0) then if(Money10=9) then Money10=0; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10=Money10+1; end if; end if; end if; if (Meter1K=3) then Money100=2; Money10=2; Money1=0; Old_Money12) then Money1=Meter100; Old_Money1=Money1; if(Old_Money1=9 and Money1=0) t

    17、hen if(Money10=9) then Money10=0; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10Disp_TempDisp_TempDisp_TempDisp_TempDisp_TempDisp_TempDisp_TempDisp_Temp=Money1; end case; end process; process(Clk) begin if(Clkevent and Clk=1) then SEG_SEL=SEG_SEL+1; if (SEG_SEL=9) the

    18、n SEG_SEL=000; else DisplayDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_Decode=0000000; end case; end process; end one; 2.3.2测速模块 测速模块输入端由Clk及Motor端组成,Clk提供计数脉冲,通过计Motor 6秒转的圈数然后乘以10作为一分种出租车的车速,其输出端变由SEL2.0及lout76.0组成,前

    19、者用于扫描数码管的驱动,后者用于显示转速。图2.4 测速模块其仿真图如下所示:图2.5 测速模块仿真图其程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity teltcl is port( Clk : in std_logic; Motor : in std_logic; SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); lout7:out std_logic_vector(6 downto 0)

    20、;end teltcl;architecture one of teltcl is signal clk1hz :std_logic;-1HZ时钟信号; signal count : std_logic_vector(2 downto 0); signal clr1 :std_logic ; signal ena1 :std_logic; signal load1 :std_logic; signal CQ1,CQ2,CQ3,CQ4 : std_logic_vector(3 downto 0); SIGNAL CQA :std_logic_vector(15 DOWNTO 0); SIGNAL

    21、 DOUT : STD_LOGIC_VECTOR(15 DOWNTO 0); signal s:std_logic_vector(2 downto 0); signal lout4:std_logic_vector(3 downto 0); SIGNAL in3,in2,in1,in0:std_logic_vector(3 downto 0); begin process(clk) variable cnttemp : INTEGER RANGE 0 TO 999999; begin IF clk=1 AND clkevent THEN IF cnttemp=999999 THEN cntte

    22、mp:=0; ELSE IF cnttemp500000 THEN clk1hz=1; ELSE clk1hz=0; END IF; cnttemp:=cnttemp+1; END IF; end if; end process; process(Clk1hz) begin if(Clk1hzevent and Clk1hz=1) then count=count+1; if count6 then ena1=1;load1=0;clr1=0; elsif count=6 then load1=1;ena1=0;clr1=0; elsif count=7 then ena1=0;load1=0

    23、;clr1=1; end if; end if; end process;PROCESS(CLK,ENA1) ISBEGIN IF CLR1= 1 THEN CQ1= 0000; elsif(Motorevent and Motor=1) then IF ENA1= 1 THEN if(CQ1=1001) then CQ1=0000; if(CQ2=9) then CQ2=0000; if(CQ3=1001) then CQ3=0000; if(CQ4=1001) then CQ4=0000; else CQ4=CQ4+1; end if; else CQ3=CQ3+1; end if; el

    24、se CQ2=CQ2+1; end if; else CQ1=CQ1+1; end if; end if; END IF ; CQA=(CQ4&CQ3&CQ2&CQ1); end process; PROCESS ( LOAD1,CQA) ISBEGIN IF LOAD1 EVENT AND LOAD1= 1 THEN DOUT=CQA; END IF;END PROCESS;process (clk)begin IN3=DOUT(15 DOWNTO 12); IN2=DOUT(11 DOWNTO 8); IN1=DOUT(7 DOWNTO 4); IN0=DOUT(3 DOWNTO 0);i

    25、f (clkevent and clk=1)then if (s=111) then s=000; else s=s+1; end if;end if;sellout4lout4lout4lout4lout4lout4lout4lout4lout4lout7lout7lout7lout7lout7lout7lout7lout7lout7lout7lout7lout7lout7=XXXXXXX; end case;end process;end one; 2.3.3报警模块 报警模块输入端由Clk构成,其主要用途在于为蜂呜器提供不同频率,其输出端由spk端构成,其是一个蜂鸣器用于报警。图2.6 蜂鸣器模块其仿真图如下:图2.7 蜂鸣器模块仿真图其程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity teltcl is


    注意事项

    本文(EDA课程设计内容.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开