EDA课程设计出租车计价器

课程设计

学生姓名: 专业班级: 指导教师: 工作单位: 题 目: 出租车计价器的设计

初始条件:

本设计利用QuartusⅡ软件编写VHDL代码,运用EDA实验箱上的FPGA、数码管、LED灯、拨码开关、3/8译码器、系统20MHz时钟等硬件资源,实现简易的出租车计价器的相关功能。

要求完成的主要任务: (包括课程设计工作量及技术要求,以及说明书撰写等具体要求)

1、课程设计工作量:2周。

2、技术要求:

① 设计一个出租车计价器。要求显示行驶里程、停车时间和计费值。

②出租车的起步价为3元,当里程行驶到1km后,费用为4元;当里程行驶到

1.5km后,费用为5元;,当里程行驶到2km后,费用为6元;当里程行驶到2.5km后,费用为7元;当里程行驶到3km后,费用为8元;此后每公里计费

为0.7元。当计费达到20元后,每公里加收50%的车费。停车每达3分钟,增

加0.7元。

3、查阅至少5篇参考文献。按《武汉理工大学课程设计工作规范》要求撰写设计

报告书。全文用A4纸打印,图纸应符合绘图规范。

时间安排: 1. 年月日集中,作课设具体实施计划与课程设计报告格式的要求说明。

2. 年月日,查阅相关资料,学习电路的工作原理。

3. 年月日 至 年 月日,方案选择和程序设计设计。

4. 年月日 至 年 月日,电路调试和设计说明书撰写。

5. 年月日上交课程设计成果及报告,同时进行答辩。

课设答疑地点:鉴主13楼电子科学与技术实验室。

指导教师签名: 年 月 日

系主任(或责任教师)签名: 年 月 日

摘 要

本文介绍了一种采用单片FPGA芯片进行出租车计费器的设计方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法,利用FPGA的可编程性,简洁而又多变的设计方法,缩短了研发周期,同时使出租车计费器体积更小功能更强大。本设计实现了出租车计费器所需的一些基本功能,计费包括起步价、行车里程计费、等待时间计费,同时考虑到出租车行业的一些特殊性,更注重了把一些新的思路加入到设计中。主要包括采用了FPGA芯片,使用VHDL语言进行编程,使其具有了更强的移植性,更加利于产品升级。

关键词:VHDL;计费器;QuartusⅡ;FPGA

Abstract

This paper describes the use of a single chip FPGA for the design of accounting-fee machine, mainly on how to use the emerging EDA electronic devices designed to replace traditional methods, using the programmable FPGA, concise and changing the design Ways to shorten the development cycle, so that taxi accounting-fee machine in a smaller more powerful. The design and implementation of the taxi accounting-fee machine for some basic functions, including billing starting price, driving metered, the waiting time billing, taking into account the special nature of some of the taxi industry, to pay more attention to a number of new Ideas into the design. Mainly including the use of the FPGA chip, the use of VHDL programming, so as to make it a stronger transplanted, and more conducive to product upgrades.

Key words: VHDL, accounting-fee machine , Quartus Ⅱ, FPGA

目 录

摘 要 ............................................................................................................................................... 2 Abstract ........................................................................................................................................... 3 目 录 ............................................................................................................................................... 4

1.绪论 .............................................................................................................................................. 5

2.设计内容及要求 .......................................................................................................................... 6

2.1.设计的目的及主要任务 .................................................................................................... 6

2.2.设计思想 ............................................................................................................................ 6 3. 设计原理 .................................................................................................................................... 7

3.1.设计原理及方法 ................................................................................................................ 7

3.2.单元模块设计 .................................................................................................................... 8 4. 代码仿真结果 ...........................................................................................................................10

4.1.有限次数脉冲发生模块仿真结果 ...................................................................................10

4.2.计数器模块仿真结果 ....................................................................................................... 11

4.3.七段数码管模块仿真结果 ............................................................................................... 11

4.4.分频器模块仿真结果 .......................................................................................................12 5. 硬件调试 ...................................................................................................................................13 6. 心得体会 ...................................................................................................................................14 7. 参考文献 ...................................................................................................................................15 8. 附录 ...........................................................................................................................................16

8.1.程序源代码 .......................................................................................................................16

8.2.综合网络图 .......................................................................................................................30

1. 绪论

人类社会已经进入信息化时代,信息社会的发展离不开电子产品的进步。现代电子产品在性能提高、复杂度降低的同时,价格却一直呈下降趋势,而且产品更新换代的步伐也越来越快,实现这种进步的主要原因就是生产制造技术和电子设计技术的发展。前者以微细加工技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数万个晶体管;后者的核心就是EDA技术[1]。没有EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的,反过来,生产制造技术的不断进步又必须对EDA技术提出新要求。EDA代表了当今电子设计技术的最新发展方向,它的基本特征是:设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(VHDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件[2]。

可编程逻辑器件自20世纪70年代以来,经历了PAL、GAL、CPLD、FPGA几个发展阶段,其中CPLD、FPGA属高密度可编程逻辑器件,目前集成度以高达200万门/片,它将掩膜ASIC集成度高的优点和可编程逻辑器件设计生产方便的特点结合在一起,特别适合于样品研制和小批量产品开发,使产品能以最快的速度上市,而当市场扩大时,它可以和容易地转由ASIC实现,因此开发风险也大为降低。CPLD/FPGA器件已成为现代高层次电子设计方法的实现载体[3]。

VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为3种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成[4]。另外,VHDL还有以下优点:VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心转移到了系统功能的实现和调试上,只需要花较少的精力用于物理实现;VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用;VHDL的设计不依赖于特定的器件,方便了工艺的转换。VHDL是一个标准语言,为众多的EDA场上支持,因此移植性好[5]。

2. 设计内容及要求

2.1. 设计的目的及主要任务

2.1.1. 设计的目的

①学会在QuartusⅡ环境中运用VHDL语言设计方法构建具有一定逻辑功能的模块,并能运用图形设计方法完成顶层原理图的设计。

②掌握出租车自动计费器的主要功能与在FPGA中的实现方法。

2.1.2. 设计任务及主要技术指标

① 设计一个出租车计价器。要求显示行驶里程、停车时间和计费值:

出租车的起步价为3元,当里程行驶到1km后,费用为4元;当里程行驶到1.5km

后,费用为5元;,当里程行驶到2km后,费用为6元;当里程行驶到2.5km后,费用为7元;当里程行驶到3km后,费用为8元;此后每公里计费为0.7元/0.5km。停车每到3分钟,增加0.7元。

通过开关读入停车信号,在停车时进行计时,显示格式为时分秒XX-XX-XX,每

3分钟,计价0.7元;按照轮胎转动1圈为1m计算,计算并显示行驶的里程结果

(单位:Km),格式为:“000.0”。能显示乘车费用(单位:元),格式为:“000.0”。

② 运用QuartusⅡ软件中的仿真功能对所设计的出租车自动计费器的各个模块及顶层

电路的功能进行仿真分析。

③ 将所设计的整个系统写入FPGA器件中,加上需要的外围电路在实验箱上实现整

个系统的硬件搭建。

2.2. 设计思想

本次设计首先在QuartusⅡ环境中对出租车自动计费器的各个部分利用VHDL这一硬件描述语言予以设计,生成模块。主要有:运算控制模块、分频器、显示模块这三大部分组成。由顶层模块协调控制完成设计任务。

3. 设计原理

3.1. 设计原理及方法

本设计包含运算控制模块、分频器、显示模块这三大部分。

图1 出租车自动计费器系统框图

运算控制器模块将其他两个进行连接,是本次设计的核心。它包含计程器、计时器、计价器,同时还有读取外部的拨码开关控制信号,提供当前显示信号与显示位选信号,从而周期性交替显示计价/计时信息、等时信息。

计程器在非停车状态完成计程功能并产生里程计价信号,计时器在停车状态完成计时功能并产生等时计价信号。计价器是设计的核心与难点,涉及到多种时钟信号,并有多种计费标准。拟使用有限次高速脉冲发生器向一组级联的十进制计数器提供不同费率的计价脉冲,根据里程计价信号、等时计价信号、停车开关状态、当前计费结果等信号,综合考虑,挑选适合次数的计价脉冲,从而实现不同条件的不同计费。

计程器、计时器、计价器根据位选信号,输出相应数据的当前选中数字,由顶层模块根据显示数据类型变换信号进行选择,传输给显示模块。

实验箱的时钟信号为20MHz方波,由分频器分为10Hz的计时信号(一个周期代表现实中的1s)、10Hz的计程信号(一个周期代表现实中的10m)、500Hz的数码管扫描信号(扫

描频率62.5Hz)、0.2Hz的显示数据类型变换信号(变化周期5s)。

显示模块由实验箱上的3/8译码器、五个LED灯构成状态的指示灯、程序编写的一个七段数码管译码器(因显示需要,原有字形“E”征用改为“—”,字形"F"改为“ ”)组成。

本次设计首先在QuartusⅡ环境中对出租车自动计费器的各个部分利用VHDL这一硬件描述语言予以设计,进行仿真,然后编写顶层模块将各个模块连接,并对相互之间的信号进行必要处理,从而实现整机功能,最后在实验箱上进行物理测试,寻找漏洞、调整参数,最终确定设计。

3.2. 单元模块设计

3.2.1. 分频器TAXI_FP模块设计

本设计中分频器模块使用了一个通用的分频器元件例化fp。该模块从外部读入系统时钟方波信号clk,向外输出计时信号clk_time,计程信号clk_mil,数码管扫描信号clk_scan,显示数据类型变换信号clk_v。具体程序代码详见附录。

3.2.2. 计程器MIL模块设计

计程器的核心为一个4位十进制数计数单元cnt10,它由四个十进制计数器级联构成。在得到停车信号时,计程信号不输入计数单元,在没有停车信号stop时,每有10个脉冲clk(100m)才进行计数1次。每当成功计数5次,即500m,产生一个里程计费信号p_mil。在得到复位信号rst时,计程器内部所有计数器和计数信号清零复位,里程计费信号输出'0'。根据读入的位选信号wx决定当前输出的数值datain。具体程序代码详见附录。

3.2.3. 计时器TIM模块设计

计时器有一个24进制cnt24、两个60进制的计数器cnt60级联构成计时单元。当停车信号stop为'1',进行计时。计时器中还有一个3进制计数器cnt3,每当代表分钟的60进制计数器计数3次,产生一个等时计费信号p_up。当有复位信号rst时,所有计数单元清零,等时计数信号输出'0'。根据读入的位选信号wx决定当前输出的数值datain。具体程序

代码详见附录。

3.2.4. 计价器PRICE模块设计

因为在计费过程中存在1.05元的计费情况,故计价精度精确到分,共有五个计数器。因此计价器的计数单元有四个10进制计数器cnt10,一个10进制计数器cnt10_d。前者复位值为0;后者复位值为3,为价格的第三位计数。它的内部还有一个指定个数脉冲产生器price_s。根据停车信号stop的选择里程计费信号p_mil或p_t,当计费信号为'1'时,输入适当个脉冲,当计费信号为'0',脉冲发生器price_s复位。当计费开关switch或复位信号rst为'1',计价器所有模块复位。根据读入的位选信号wx决定当前输出的数值datain。具体程序代码详见附录。

3.2.5. 显示模块设计

显示模块包含一个8进制计数器cnt8,七段数码管译码器decl7s,实验箱上的3/8译码器。还有五个状态显示灯,分别为停车状态指示stop_s,计费状态指示switch_s,3个当前显示内容标志灯sta(2..0)。当系统复位时,数码管一起显示相同的任意数,五个状态显示灯一起被点亮。正常显示时,等时信息与计价/计程信号以5s为周期交替显示。具体程序代码详见附录。

3.2.6. 运算控制模块TAXI设计

运算控制模块将以上各模块进行连接,综合,构成出租车计价器。其输入端有系统时钟输入端clk、系统复位信号输入端rst、停车信号输入端stop、计费开关switch。输出端有数码管字形输入端segout、point、位选信号输出端wx、状态灯控制端stop_s、switch_s、sta。具体程序代码详见附录。

4. 代码仿真结果

上文中提到的六个模块中还运用了一些更小的例化模块。这些小模块被上面的设计多次调用,它们虽然小,功能简单、单一,但是它们功能的正确是调用模块乃至整个设计功能的保证,它们是整个设计的基石,因此在此着重对小模块的逻辑功能与仿真结果进行了说明。仿真结果分为功能仿真与逻辑仿真两幅图进行呈现。我们会发现时序仿真与功能仿真的波形有差异,这是因为在实际门电路的运行中,电平的处理过程造成了信号的延时。

4.1. 有限次数脉冲发生模块仿真结果

该模块的任务是当使能信号rst为'1'时产生规定个方波信号,之后输出结果为'0'。此处产生两个脉冲。

图2.有限次数脉冲发生模块功能仿真图

图3.有限次数脉冲发生模块时序仿真图

4.2. 计数器模块仿真结果

该模块的任务是当输入脉冲时,进行计数,当有复位信号时,计数器复位。当计数器计满后,产生进位信号。此处设定计数器的模制为10,复位初始值为0.

图4.计数器模块功能仿真图

图5计数器模块时序仿真图

4.3. 七段数码管模块仿真结果

该模块的任务是根据输入的十六进制信号,输出数码管显示其字形的电平信号。

图6.七段数码管模块功能仿真图

图7.七段数码管模块时序仿真图

4.4. 分频器模块仿真结果

该模块的任务是将输入的时钟信号,进行偶数次分频,此处选为4分频进行仿真。

图8.分频器模块功能仿真图

图9.分频器模块时序仿真图

5. 硬件调试

在完成程序综合后,进行硬件调试之前,先要对芯片进行定义。具体操作如下: 首先点击Assignments—Device,选择实验箱所用芯片型号EP1C3T144C8。点选Device and Pin Options。在这里选择Unused Pins选项卡,将Reserve all unused pins选为As input tri-stated。

然后开始进行管脚设定,根据实验箱的资源配置设置如下:

表1.芯片管脚分配表

再次进行综合,正确后就可将文件下载到芯片中。连接下载线,调整实验箱的跳线后,打开电源,经QuartusⅡ中的“PROGRAMMER”菜单,调出编程器窗口。按下编程器窗口中的“START”按钮,设计的内容就开始下载到FPGA芯片中。

进行多组功能组合测试,显示结果符合设计要求,证明设计成功。

6. 心得体会

本次课程设计至此已经接近尾声,两周的时间虽然很短暂,但在这两个星期的设计过程中收获颇丰。设计的核心内容就是QuartusⅡ环境中,利用VHDL语言设计出基于FPGA的出租车计费器。整个设计过程中首先对EDA(电子设计自动化)这门课程有了更深的了解,因为课程设计本身要求将以前所学的理论知识运用到实际的电路设计当中去,在电路的设计过程中,无形中便加深了对VHDL语言的了解及运用能力,对课本以及以前学过的知识有了一个更好的总结与理解;以前的EDA实验只是针对某一个小的功能设计,而此次得EDA课程设计对我们的总体电路的设计的要求更严格,需要通过翻阅复习以前学过的知识确立了实验总体设计方案,然后逐步细化进行各模块的设计;其次,在电路仿真的过程中总会出现一些问题,需要我们细心解决,所以这两周下来,我对电路故障的排查能力有了很大的提高;再次,通过此次课程设计,我对设计所用到的软件有了更加深刻地了解,这对我们以后的工作和学习的帮助都很有用处。

感谢学校给我们这次机会,锻炼了我们的动手能力。通过这次课设让我明白了理论和实际操作之间差距,而且也让我很明确得意识到自己在VHDL语言的语法理解上有很多的知识漏洞,以后应该多钻研一下。同时也感谢指导老师在设计过程中的辅导以及同学的帮助。

7. 参考文献

[1]潘松,黄继业.EDA技术与VHDL.北京:清华大学出版社,2007.1. [2]宋嘉玉,孙丽霞.EDA实用技术.北京:人民邮电出版社,2006.12. [3]齐洪喜,陆颖.VHDL电路设计实用技术.北京:清华大学出版社,2004.5. [4]刘艳萍,高振斌,李志军.EDA实用技术及应用.北京:国防工业出版社,2006.1. [5]章彬宏.EDA应用技术.北京:北京理工大学出版社,2007.7.

8. 附录

8.1. 程序源代码

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

--------------------------------------------------------------------------------------------------------------------- ENTITY TAXI IS --顶层文件 PORT( clk,rst,stop,switch :IN STD_LOGIC; --时钟;复位、停车、计费开关 point,stop_s,switch_s :OUT STD_LOGIC; --小数点、停车、计费状态 segout :OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --数码管输出端 wx :OUT STD_LOGIC_VECTOR(2 DOWNTO 0); --位选端 sta :OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); --显示状态 END ENTITY TAXI;

ARCHITECTURE one OF TAXI IS --调用例化元件 COMPONENT TAXI_FP IS --系统分频器 PORT( clk :IN STD_LOGIC; --系统时钟 clk_time,clk_mil, --计时时钟、计程时钟 clk_scan,clk_v :OUT STD_LOGIC); --扫描时钟、显示切换时钟 END COMPONENT; COMPONENT MIL IS --计程器 PORT( clk,rst,stop :IN STD_LOGIC; --计程时钟、复位、停车信号 wx :IN STD_LOGIC_VECTOR(2 DOWNTO 0); --位选信号 p_mil :OUT STD_LOGIC; --里程计费信号 datain :OUT STD_LOGIC_VECTOR(3 DOWNTO 0));--输出里程数据 END COMPONENT; COMPONENT PRICE IS --计价器 PORT(clk_sys,p_t,p_mil :IN STD_LOGIC; --系统时钟、等时计费、里程计费信号 rst,stop:IN STD_LOGIC; --复位、停车信号 wx :IN STD_LOGIC_VECTOR(2 DOWNTO 0); --位选信号 datain :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --输出计价数据 END COMPONENT; COMPONENT TIM IS --计时器 PORT( clk_time,rst,stop :IN STD_LOGIC; --计时时钟、复位、停车信号

wx :IN STD_LOGIC_VECTOR(2 DOWNTO 0); --位选信号 p_up :OUT STD_LOGIC; --等时计费信号 datain :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --输出等时数据 END COMPONENT; COMPONENT decl7s IS --七段数码管译码器 PORT(data :IN STD_LOGIC_VECTOR(3 DOWNTO 0); --输出数据 led7s:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); --输出电平信号 END COMPONENT; COMPONENT cnt8 IS --8进制计数器 PORT (clk :IN STD_LOGIC; --扫描时钟 q :OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); --输出结果 END COMPONENT; --信号定义 SIGNAL clk_time,clk_mil, --计时时钟、计程时钟 clk_scan,clk_v :STD_LOGIC; --扫描时钟、显示切换时钟 SIGNAL p_mil,p_t,rst_s :STD_LOGIC; --里程等时计费信号、复位信号 SIGNAL datain,datain_mil,datain_time, --输出数据相关信号 datain_price :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL wx_signal :STD_LOGIC_VECTOR(2 DOWNTO 0); --位选信号 BEGIN --例化元件连线定义 u1 :TAXI_FP PORT MAP(clk,clk_time,clk_mil,clk_scan,clk_v); u2 :MIL PORT MAP(clk_mil,rst_s,stop,wx_signal,p_mil,datain_mil); u3 :PRICE PORT MAP(clk,p_t,p_mil,rst_s,stop,wx_signal,datain_price); u4 :TIM PORT MAP(clk_time,rst_s,stop,wx_signal,p_t,datain_time); u5 :decl7s PORT MAP(datain,segout); u6 :cnt8 PORT MAP(clk_scan,wx_signal); --信号赋值 rst_s

IF wx_signal>3 THEN datain datain

END ARCHITECTURE;

--------------------------------------------------------------------------------------------------------------------- ENTITY cnt3 IS --三进制计数器 PORT (clk,rst:IN STD_LOGIC; q :out STD_LOGIC); END ENTITY;

ARCHITECTURE bhv OF cnt3 IS BEGIN PROCESS(clk) VARIABLE cnter :STD_LOGIC_VECTOR (1 DOWNTO 0); BEGIN IF (rst='1') THEN cnter:="00"; q

--------------------------------------------------------------------------------------------------------------------- ENTITY cnt8 IS --八进制计数器

PORT (clk :IN STD_LOGIC; q :out STD_LOGIC_VECTOR(2 DOWNTO 0)); END ENTITY;

ARCHITECTURE bhv OF cnt8 IS BEGIN PROCESS(clk) VARIABLE cnter :STD_LOGIC_VECTOR (2 DOWNTO 0); BEGIN IF rising_edge(clk) THEN if cnter="111" then cnter :="000"; else cnter:=cnter+1; END IF; end if; q

--------------------------------------------------------------------------------------------------------------------- ENTITY cnt10 IS --十进制计数器 PORT(clk,rst:IN STD_LOGIC; co :OUT STD_LOGIC; q :buffer STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY;

ARCHITECTURE bhv OF cnt10 IS SIGNAL cnter :STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN PROCESS(clk,rst) BEGIN IF (rst='1') THEN cnter

---------------------------------------------------------------------------------------------------------------------

ENTITY cnt10_d IS --初值为“3”的十进制计数器 PORT(clk,rst:IN STD_LOGIC; co :OUT STD_LOGIC; q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY;

ARCHITECTURE bhv OF cnt10_d IS SIGNAL cnter :STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN PROCESS(clk,rst) BEGIN IF (rst='1') THEN cnter

--------------------------------------------------------------------------------------------------------------------- ENTITY cnt24 IS --24进制计数器 PORT (clk,rst :IN STD_LOGIC; c1,c0 :BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY;

ARCHITECTURE bhv OF cnt24 IS BEGIN PROCESS(clk,rst) VARIABLE cnter :INTEGER:=0 ; BEGIN IF (rst='1') THEN c1

IF c1="0010" THEN c1

--------------------------------------------------------------------------------------------------------------------- ENTITY cnt60 IS --60进制计数器 PORT (clk,rst :IN STD_LOGIC; co :OUT STD_LOGIC; c1,c0 :BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY;

ARCHITECTURE bhv OF cnt60 IS BEGIN PROCESS(clk,rst) VARIABLE cnter :INTEGER:=0 ; BEGIN IF (rst='1') THEN c1

c0

ENTITY decl7s IS --七段数码管译码器 PORT( data :IN STD_LOGIC_VECTOR(3 DOWNTO 0); led7s :OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END;

ARCHITECTURE one OF decl7s IS BEGIN PROCESS(data) BEGIN CASE data IS WHEN "0000" => led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s NULL; END CASE; END PROCESS; END one;

--------------------------------------------------------------------------------------------------------------------- ENTITY fp IS --通用分频器 GENERIC (N:integer); PORT ( clk :IN STD_LOGIC; fpq :BUFFER STD_LOGIC); END ENTITY;

ARCHITECTURE bhv OF fp IS BEGIN PROCESS(clk) VARIABLE cnter :INTEGER:=0; BEGIN IF rising_edge(clk) THEN IF cnter=N-1 then cnter :=0;fpq

--------------------------------------------------------------------------------------------------------------------- ENTITY MIL IS --计程器 PORT( clk,rst,stop :IN STD_LOGIC; wx :IN STD_LOGIC_VECTOR(2 DOWNTO 0); p_mil :OUT STD_LOGIC; datain :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY MIL;

ARCHITECTURE one OF MIL IS COMPONENT fp IS GENERIC (N :integer); PORT (clk:IN STD_LOGIC; fpq :out STD_LOGIC); END COMPONENT; COMPONENT cnt10 IS PORT(clk,rst:IN STD_LOGIC; co :OUT STD_LOGIC; q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT; SIGNAL clk_mil,rst_s,clk_s :STD_LOGIC; SIGNAL ci_0,ci_1,ci_2,ci_3 :STD_LOGIC; SIGNAL p_5 :STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL mil3,mil2,mil1,mil0 :STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN c1 :fp GENERIC MAP(N=>5) PORT MAP(clk,clk_mil); u0 :cnt10 PORT MAP(clk_s,rst_s,ci_0,mil0); u1 :cnt10 PORT MAP(ci_0,rst_s,ci_1,mil1); u2 :cnt10 PORT MAP(ci_1,rst_s,ci_2,mil2);

u3 :cnt10 PORT MAP(ci_2,rst_s,ci_3,mil3); clk_s datain datain datain datain datain

END ARCHITECTURE;

--------------------------------------------------------------------------------------------------------------------- ENTITY PRICE IS --计费器 PORT( clk_sys,p_t,p_mil,rst,switch,stop :IN STD_LOGIC; wx :IN STD_LOGIC_VECTOR(2 DOWNTO 0); datain :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY PRICE;

ARCHITECTURE one OF PRICE IS COMPONENT fp IS GENERIC (N :integer); PORT (clk:IN STD_LOGIC;

fpq :out STD_LOGIC); END COMPONENT; COMPONENT price_s IS GENERIC (M:integer); PORT ( clk,rst :IN STD_LOGIC; fpq :BUFFER STD_LOGIC); END COMPONENT; COMPONENT cnt10 IS PORT(clk,rst:IN STD_LOGIC; co :OUT STD_LOGIC; q :buffer STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT; COMPONENT cnt10_d IS PORT(clk,rst:IN STD_LOGIC; co :OUT STD_LOGIC; q :buffer STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT; SIGNAL clk_p,clk_d,ci_0,ci_1,ci_2,ci_3,ci_4 :STD_LOGIC; SIGNAL s_m0,s_m1,s_m2,s_m3,s_m4,s_t0,s_t1:STD_LOGIC; SIGNAL c_mil:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL price3,price2,price1,price0:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN uz :cnt10 PORT MAP(clk_p,rst,ci_0); u0 :cnt10 PORT MAP(ci_0,rst,ci_1,price0); u1 :cnt10_d PORT MAP(ci_1,rst,ci_2,price1); u2 :cnt10 PORT MAP(ci_2,rst,ci_3,price2); u3 :cnt10 PORT MAP(ci_3,rst,ci_4,price3); sm0 :price_s GENERIC MAP(M=>300) PORT MAP(clk_sys,p_mil,s_m0); sm1 :price_s GENERIC MAP(M=>100) PORT MAP(clk_sys,p_mil,s_m1); sm2 :price_s GENERIC MAP(M=>70) PORT MAP(clk_sys,p_mil,s_m2); sm3 :price_s GENERIC MAP(M=>135) PORT MAP(clk_sys,p_mil,s_m3); sm4 :price_s GENERIC MAP(M=>150) PORT MAP(clk_sys,p_mil,s_m4); st0 :price_s GENERIC MAP(M=>70) PORT MAP(clk_sys,p_t,s_t0); st1 :price_s GENERIC MAP(M=>135) PORT MAP(clk_sys,p_t,s_t1); clk_d

BEGIN if(rising_edge(clk_sys)) then if (stop='1') then if(price2 clk_p clk_p clk_p clk_p clk_p clk_p clk_p clk_p null; end case; else case c_mil IS when "000" => clk_p clk_p clk_p clk_p clk_p clk_p clk_p clk_p null; end case; end if; end if; end if;

END PROCESS;

PROCESS(p_mil,rst) BEGIN IF (rst='1') THEN c_mil

PROCESS(wx)

BEGIN CASE wx IS WHEN "100" => datain datain datain datain datain

END ARCHITECTURE;

--------------------------------------------------------------------------------------------------------------------- ENTITY price_s IS --计费脉冲产生器 GENERIC (M:integer); PORT ( clk,rst :IN STD_LOGIC; fpq:BUFFER STD_LOGIC); END ENTITY;

ARCHITECTURE bhv OF price_s IS signal cnter:INTEGER:=0; BEGIN PROCESS(clk) BEGIN IF rising_edge(clk) THEN IF rst='1' THEN IF cnter

--------------------------------------------------------------------------------------------------------------------- ENTITY TAXI_FP IS --系统分频器 PORT( clk :IN STD_LOGIC; clk_time,clk_mil, clk_scan,clk_v :OUT STD_LOGIC); END ENTITY TAXI_FP;

ARCHITECTURE one OF TAXI_FP IS COMPONENT fp IS

GENERIC (N :integer); PORT (clk:IN STD_LOGIC; fpq :out STD_LOGIC); END COMPONENT; SIGNAL clk_time1,clk_mil1:STD_LOGIC;

BEGIN c1 :fp GENERIC MAP(N=>1000000) PORT MAP(clk,clk_time1); c2 :fp GENERIC MAP(N=>1000000) PORT MAP(clk,clk_mil1); c3 :fp GENERIC MAP(N=>20000) PORT MAP(clk,clk_scan); c4 :fp GENERIC MAP(N=>50000000) PORT MAP(clk,clk_v); clk_time

END ARCHITECTURE;

--------------------------------------------------------------------------------------------------------------------- ENTITY TIM IS --计时器 PORT( clk_time,rst,stop :IN STD_LOGIC; wx :IN STD_LOGIC_VECTOR(2 DOWNTO 0); p_up :OUT STD_LOGIC; datain :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY TIM;

ARCHITECTURE one OF TIM IS COMPONENT cnt3 IS PORT (clk :IN STD_LOGIC; q :out STD_LOGIC); END COMPONENT; COMPONENT cnt8 IS PORT (clk :IN STD_LOGIC; q :OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END COMPONENT; COMPONENT cnt24 IS PORT (clk,rst :IN STD_LOGIC; c1,c0 :BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT; COMPONENT cnt60 IS PORT (clk,rst :IN STD_LOGIC;

co :OUT STD_LOGIC; c1,c0 :BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT; SIGNAL clk,clk_hur,clk_min,co_sec,co_min :STD_LOGIC; SIGNAL sig_rst:STD_LOGIC; SIGNAL wx_signal :STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL clock_hur1,clock_min1,clock_sec1,clock_hur0,clock_min0,clock_sec0 :STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN u_hur :cnt24 PORT MAP(clk_hur,sig_rst,clock_hur1,clock_hur0); u_min :cnt60 PORT MAP(clk_min,sig_rst,co_min,clock_min1,clock_min0); u_sec :cnt60 PORT MAP(clk,sig_rst,co_sec,clock_sec1,clock_sec0); u3 :cnt3 PORT MAP(clk_min,p_up); clk datain datain datain datain datain datain datain datain NULL; END CASE; END PROCESS;

END ARCHITECTURE;

综合网络图

图络网合综.01图

8.2.

本科生课程设计成绩评定表

指导教师签字:

年 月 日

31


© 2024 实用范文网 | 联系我们: webmaster# 6400.net.cn