基于verilog HDL的出租车计费器

合集下载

推荐-基于FPGA出租车计费系统的设计 精品

推荐-基于FPGA出租车计费系统的设计  精品

南京大学金陵学院本科毕业院系信息科学与工程系专业电子信息科学与技术题目基于FPGA出租车计费系统的设计提交日期20XX年6月3 日摘要通过出租车计费系统的设计,详细介绍了如何使用硬件描述语言Verilog HDL设计复杂逻辑电路的步骤和过程,以及应用美国ALTERA公司的Quartus II 9.0软件进行系统设计、仿真和下载实现的方法。

通过设计,可以看到在EDA平台上用CPLD器件构成该数字系统的设计思想和实现过程。

论述了计费模块、时钟模块、动态显示模块、计费形式判断模块、控制模块等的设计方法和技巧。

关键词:CPLD/FPGA; 电子自动化设计; Verilog HDL硬件描述语言; 出租车计费器; Quartus II 9.0软件ABSTRACTTaxi billing system through the design, details how to use the hardwaredes-cription language Verilog HDL design plexity and the process logic and the applicatio-n of the U.S. pany's Quartus II 9.0 ALTERA software system design, simulation, anddownload the realization of the method. By design, you can see in the EDA platform usi-ng CPLD devices constitute the digital system design and implementation process. Discuss-es the billing module, clock module, dynamic display module, billing forms to judge mod-ule, control module and other design methods and techniques.Keywords: CPLD/FPGA; EDA; Verilog HDL; Taxi Billing Machine; Quartus II 9.0目录第一章引言随着科技日新月异的发展,科技带来的改变无处不在。

Verilog出租车计费器课程设计

Verilog出租车计费器课程设计

目录引言 (1)1、设计内容 (1)2、设计原理 (1)3、CPLD简介 (2)3.1、CPLD的基本结构 (2)3.2、CPLD 的特点 (3)4、系统功能模块设计 (4)4.1、计算里程和车费模块 (4)4.3、按键扫描模块 (17)4.4结构描述实现出租车计费器电路系统设计 (20)4.5、仿真电路图 (21)5、硬件实现 (22)5.1、引脚锁定 (22)5.2、编程下载 (23)6总结与体会 (23)7、参考文献 (23)附录:电气信息学院课程设计评分表 (24)引言Verilog HDL 是一种硬件描述语言(HDL:Hardware Discription Language ),是一种用文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。

Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20 世纪80年代中期开发出来的。

现在,随着系统级FPGA以及片上系统的出现,软硬件协同设计和系统设计变得越来越重要。

传统意义上的硬件设计越来越倾向于与系统设计和软件设计相结合。

随着出租车行业的发展,对出租车计费器的要求也越来越高,用户不仅要求计费器性能稳定计费准确,而且要求在乘坐出租车时,显示起步价、行车里程二部分,由自动计费器自动记录。

安装在与汽车轮相连接的传感器在汽车行进时向自动计费器发送脉冲信号,在一定的公里数内,按起步价计费;超过这一里程后,自动计费器按里程计费;超过一定费用后,则则增加里程费用;如果停车等候,则不收费。

本文以Altera公司的DE2开发板为中心,Quartus n软件作为开发平台,使用VerilogHDL语言编程,设计了一个出租车计费的计费器模型。

在程序描述的过程中,用了行为描述方式和结构描述方式二种描述方式对计费器进行描述。

该计费器能动态扫描电路,将车费和路显示出来,各有两位小数。

基于Verilog_HDL设计的出租车计价器(DOC)

基于Verilog_HDL设计的出租车计价器(DOC)

华北水利水电大学EDA课程设计题目:出租车计价器专业:通信工程年级:2011级学生:李高飞学号:201114715指导教师:司孝平完成日期: 2013 年 12月 27日摘要:本文介绍了一种采用可编程逻辑器件(FPGA/CPLD)进行出租车计费器的设计思想以及实现方法。

本设计实现了出租车计费器所需的一些基本功能,计费金额包括起步价、里程计费、等待计时计费等。

该设计采用模块化设计,在Quartus II9.0软件平台下,采用Verilog HDL 硬件描述语言描述和模拟仿真了分频模块、计程模块、计费模块、计时模块,译码以及动态扫描显示模块,完成了出租车计费器仿真设计和硬件电路的实现。

关键词:FPGA,出租车计费器,Quartus,Verilog HDLAbstract:This article describes the design ideas and methods of the taximeter, through the programmable logic device (FPGA/CPLD).The design of a taximeter to achieve the required basic functions,The total of billing included the starting price, metered, and wait for time billing.Through the Quartus II 9.0 Software Platform,Using Verilog HDL language completed the description and simulation of frequency module, the meter module, Billing module, timing modules, decoding, dynamic scanning display module. IT It has completed the taxi meter simulation and the hardware circuit.Keywords:FPGA, Taximeter, Quartus, Verilog HDL目录1.前言 (1)2.总体方案设计 (2)2.1 设计要求 (2)2.2 方案论证与选择 (2)2.3 设计思想及原理 (3)3.单元模块设计 (5)3.1 分频模块 (5)3.1.1 计数器分频模块 (5)3.1.2 计数器分频模块仿真结果 (5)3.1.3 数码管分频模块 (6)3.2 计程模块 (6)3.2.1 计程模块电路 (6)3.2.2 计程模块仿真结果 (7)3.3 计时模块 (7)3.3.1 计时模块电路 (7)3.3.2 计时模块的仿真结果 (7)3.4 控制模块 (8)3.4.1 控制模块电路 (8)3.4.2 计时模块的仿真结果 (9)3.5 计费模块 (10)3.5.1 控制模块电路 (10)3.5.2 计费模块的仿真结果 (10)2.6 数码管显示模块 (11)4.整体顶层模块设计 (12)4.1 整体顶层模块电路 (12)5.系统功能仿真及调试 (13)5.1 系统仿真及调试 (13)6.总结与体会 (16)致谢 (17)参考文献 (17)附录A: 单元模块Verilog HDL源代码 (18)A.1 计数器的分频模块VerilogHDL源代码 (18)A.2数码管的分频模块VerilogHDL源代码 (18)A.3 计程模块VerilogHDL源代码 (19)A.4 计时模块VerilogHDL源代码 (20)A.5 控制模块VerilogHDL源代码 (21)A.6 计费模块VerilogHDL源代码 (21)A.7 数码管显示模块VerilogHDL源代码 (21)A.8整体顶层模块VerilogHDL源代码 (23)附录B: 整体顶层电路图 (24)2.总体方案设计2.1 设计要求该出租车计价器实现功能:1、行程≤4公里,且等待累计时间≤2分钟,起步费为8.0元。

基于Verilog HDL的出租车计费器设计

基于Verilog HDL的出租车计费器设计

李明洪基于Verilog HDL的出租车计费器设计基于Verilog HDL的出租车计费器设计学生姓名:李明洪指导老师:肖红光摘要本次课程设计主要是基于FPGA芯片,使用硬件描述语言Veriloh HDL,采用“自顶向下”的设计方法,编写一个出租车计费器芯片,并使用Max+Plus II软件仿真平台。

本文主要描述了出租车计费器的设计思路与模块划分。

把出租车计费器划分为五大模块,共同实现了出租车计费以及预置和模拟汽车启动、停止、暂停等功能,并动态扫描显示车费数目。

最后,使用Max+Plus II仿真平台对每个模块和主程序分别进行了仿真,并对仿真出来的波形作了分析。

关键词出租车计费;Verilog HDL;Max+Plus II;仿真The design of taxi meter based onVerilog HDLAbstract The course design is mainly based on FPGA chip, the use of hardware description language Veriloh HDL, using "top down " design method, the preparation of a taxi meter chip, and use the Max + Plus II software simulation platform. This paper describes the design idea of the taxi meter and module division. The taxi meter is divided into five modules together to achieve a taxi and analog auto billing and pre-start, stop, pause function, and dynamic scan showed the number of fare. Finally, using Max + Plus II simulation platform and the main program for each module were simulated, and the simulation from an analysis of the waveform.Keywords Taxi charges;Verilog HDL;Max+Plus II;Simulation1 引言随着中国城市化的快速发展,人们出行的选择也会越来越多样化,但是出租车作为一种重要的交通工具,也越来越多的被人们所选择,虽然在大中城市,出租车已经相当普及,但是在一些小的城市,出租车行业也因为城市化进程的加快而快速发展。

基于VHDL_的出租车计费器的设计

基于VHDL_的出租车计费器的设计

基于VHDL 的出租车计费器的设计目前以硬件描述语言(Verilog 或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA 上进行测试,是现代IC 设计验证的技术主流。

这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。

在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。

系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。

一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。

本设计是一种采用FPGA芯片进行出租车计费器,主要分为分频模块、计量模块、计费模块、控制模块等模块,利用FPGA的可编程性,简洁又多变的设计方法,缩短了研发周期。

主要采用了FPGA芯片,使用VHDL语言进行编程,使其具有了更强的移植性,更加利于产品的升级。

一、设计任务与要求(1)、能够实现计费功能费用的计算是按行驶里程收费,设出租车的起步价是5.00元,当里程小于3km里时,按起步价收费;当里程大于3km时每公里按1.3元计费。

等待累计时间超过2min,按每分钟1.5元计费。

所以总费用按下式计算:总费用=起步价+(里程-3km)*里程单价+等候时间*等候单价(2)、能够实现显示功能●显示汽车行驶里程:用四位数字显示,显示方式为“XXXX”,单价为km。

计程范围为0~99km,计程分辨率为1km。

●显示等候时间:用两位数字显示分钟,显示方式为“XX”。

计时范围为0~59min,计时分辨率为1min。

●显示总费用:用四位数字显示,显示方式为“XXX.X”,单位为元。

计价范围为999.9元,计价分辨率为0.1元。

二、设计原理根据设计要求,系统的输入信号clk,计价开始信号Start,等待信号Stop,里程脉冲信号fin。

基于VHDL语言的出租车计价器

基于VHDL语言的出租车计价器

(基于VHDL语言)出租车计价器自己做的大作业经过测试完全通过,不过里面的时间脉冲以及里程脉冲的时钟信号都比较难搞,不过可以修改其中的值来满足你们提供的时钟脉冲题目要求:(1)行程3公里内(包括3公里),且等待累计时间2分钟内(包括2分钟),起步费为10元;(2)3公里外(不包括3公里)以每公里2元,等待累计时间2分钟外(不包括2分钟)以每分钟以1.0元计费;(3)能显示行驶公里数、等待累计时间和最后的总费用;(4)本计费器的显示范围为0~99元,计价分辨率为1元;计程器显示范围为0~99公里,分辨率为1公里;计时器的显示范围是分钟的显示范围是0—99,分辨率为1分钟。

秒的显示范围是0—59。

分辨率为1秒本出租车计价器的设计共分4个模块:判断模块、时间模块、里程模块、计费模块。

总的设计图如图1所示:计价开始控制判断模块library ieee;use ieee.std_logic_1164.all;--entity judge isport(sclk,sta,lclk: in std_logic;dge: out std_logic);end;architecture beh of judge isbeginprocess(sta,lclk,sclk)variable a: integer range 0 to 64;beginif sta='1' thenif lclk'event and lclk='1' thena:=a+1;end if;if sclk'event and sclk='1' thenif a=0 thendge<='0';--shijian processelsedge<='1';--licheng processend if;end if;if sclk='1' thena:=0;end if;elsedge<='Z';end if;end process;end;时间模块library ieee;use ieee.std_logic_1164.all;--entity time_count isport(sta,sclk,dge: in std_logic;t_count: out std_logic;minge: out integer range 0 to 10;minshi: out integer range 0 to 10); end;--architecture beh of time_count is beginprocess(sta,sclk,dge)variable count: integer range 0 to 60; variable ge: integer range 0 to 10; variable shi: integer range 0 to 10; variable t_c: std_logic;beginif sta='1' thenif dge='0' thenif sclk'event and sclk='1' then count:=count+1;if count=1 thent_c:='0';end if;if count=60 thencount:=0;ge:=ge+1;if ge>2 thent_c:='1';elsif ge>0 thent_c:='1';end if;if ge=10 thenge:=0;shi:=shi+1;if shi=10 thenshi:=0;end if;end if;end if;end if;end if;elsege:=0;shi:=0;t_c:='0';end if;minge<=ge;minshi<=shi;t_count<=t_c;end process;end;里程模块library ieee;use ieee.std_logic_1164.all; --entity time_count isport(sta,sclk,dge: in std_logic;t_count: out std_logic;minge: out integer range 0 to 10;minshi: out integer range 0 to 10); end;--architecture beh of time_count is beginprocess(sta,sclk,dge)variable count: integer range 0 to 60; variable ge: integer range 0 to 10; variable shi: integer range 0 to 10; variable t_c: std_logic;beginif sta='1' thenif dge='0' thenif sclk'event and sclk='1' then count:=count+1;if count=1 thent_c:='0';end if;if count=60 thencount:=0;ge:=ge+1;if ge>2 thent_c:='1';elsif ge>0 thent_c:='1';end if;if ge=10 thenge:=0;shi:=shi+1;if shi=10 thenshi:=0;end if;end if;end if;end if;end if;elsege:=0;shi:=0;t_c:='0';end if;minge<=ge;minshi<=shi;t_count<=t_c;end process;end;计费模块library ieee;use ieee.std_logic_1164.all;--entity price_count isport(sta,t_count,d_count: in std_logic;mge,mshi: out integer range 0 to 10); end;--architecture beh of price_count issignal t_ge,t_shi: integer range 0 to 10; signal d_ge,d_shi: integer range 0 to 10; begin--process(sta,t_count)variable tshi: integer range 0 to 10:=1; variable tge: integer range 0 to 10;beginif sta='1' thenif t_count'event and t_count='1' then tge:=tge+1;if tge=10 thentge:=0;tshi:=tshi+1;if tshi=10 thentshi:=0;end if;end if;end if;elsetge:=0;tshi:=1;end if;t_ge<=tge;t_shi<=tshi;end process;--process(sta,d_count)variable dge,dshi: integer range 0 to 10; beginif sta='1' thenif d_count'event and d_count='1' then dge:=dge+2;if dge=10 thendge:=0;dshi:=dshi+1;if dshi=10 thendshi:=0;end if;end if;end if;elsedge:=0;dshi:=0;end if;d_ge<=dge;d_shi<=dshi;end process;--process(d_ge,d_shi,t_ge,t_shi) variable cge: integer range 0 to 1; variable ge,shi:integer range 0 to 10; beginge:=d_ge+t_ge;if ge>=10 thenge:=ge-10;cge:=1;elsecge:=0;end if;shi:=d_shi+t_shi+cge;mge<=ge;mshi<=shi;end process;end;显示模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity display isport(CLK:in std_logic;sminge,sminshi: in integer range 0 to 10;skmge,skmshi: in integer range 0 to 10;smge,smshi: in integer range 0 to 10;weixuan:OUT std_logic_vector(2 downto 0);seg:out std_logic_vector(7 downto 0)); end;architecture one of display issignal cnt1:std_logic_vector(22 downto 0);signal S:std_logic_vector(2 downto 0);signal sel:std_logic_vector(2 downto 0);beginprocess(CLK)beginif CLK'event and CLK='1' THEN cnt1<=cnt1+1;end if;END PROCESS;S<=cnt1(5 downto 3);--300hzsel<="000" when S="000" else"001" when S="001" else"010" when S="010" else"011" when S="011" else"100" when S="100" else"101" when S="101" else"110" when S="110" else"111" when S="111" else"ZZZ";weixuan<=sel;process(sel,sminshi,sminge,skmshi,skmge,smshi,smge) variable num:integer range 0 to 10;begincase sel ISwhen"000"=>num:=sminge;when"001"=>num:=sminshi;when"011"=>num:=skmge;when"100"=>num:=skmshi;when"110"=>num:=smge;when"111"=>num:=smshi;when others=>num:=0;end case;case num ISwhen 0=>seg<="00111111";when 1=>seg<="00000110";when 2=>seg<="01011011";when 3=>seg<="01001111";when 4=>seg<="01100110";when 5=>seg<="01101101";when 6=>seg<="01111101";when 7=>seg<="00000111";when 8=>seg<="01111111";when 9=>seg<="01101111";when others=>seg<="00000000";end case;end process;end one;元件例化模块library ieee;use ieee.std_logic_1164.all;--entity comp isport(sclk,lclk,sta,dclk: in std_logic;weixuan:OUT std_logic_vector(2 downto 0);seg:out std_logic_vector(7 downto 0)); end;--architecture beh of comp is--component judge isport(sclk,sta,lclk: in std_logic;dge: out std_logic);end component;--component time_count isport(sta,sclk,dge: in std_logic;t_count: out std_logic;minge: out integer range 0 to 10;minshi: out integer range 0 to 10);end component;--component distance_count isport( sta,lclk,dge: in std_logic;kmge,kmshi: out integer range 0 to 10;d_count: out std_logic);end component;--component price_count isport(sta,t_count,d_count: in std_logic;mge,mshi: out integer range 0 to 10);end component;--component display isport(CLK:in std_logic;sminge,sminshi: in integer range 0 to 10;skmge,skmshi: in integer range 0 to 10;smge,smshi: in integer range 0 to 10;weixuan:OUT std_logic_vector(2 downto 0);seg:out std_logic_vector(7 downto 0));end component;--signal w,x,y: std_logic;signal time_ge,time_shi:integer range 0 to 10;signal pri_ge,pri_shi:integer range 0 to 10;signal dis_ge,dis_shi:integer range 0 to 10;--beginU1: judge port map(sta=>sta,sclk=>sclk,lclk=>lclk,dge=>w);U2: time_count port map(sta=>sta,sclk=>sclk,dge=>w,t_count=>x,minge=>time_ge,minshi=>time_shi);U3: distance_count port map(sta=>sta,lclk=>lclk,dge=>w,d_count=>y,kmge=>dis_ge,kmshi=>dis_shi);U4: price_count port map(sta=>sta,t_count=>x,d_count=>y,mge=>pri_ge,mshi=>pri_shi);U5: display port map(dclk,time_ge,time_shi,dis_ge,dis_shi,pri_ge,pri_shi,weixuan,seg);end;。

基于VerilogHDL的出租车计费器的实现

基于VerilogHDL的出租车计费器的实现

基于VerilogHDL的出租车计费器的实现摘要本文介绍了出租车计费器系统的组成及工作原理,采用自顶而下的设计方法,设计了一种基于硬件描述语言的出租车自动计费器,在cpld芯片epm3256atc144-7上实现了其功能,并论述了显示模块、主控模块、计费模块等实现方法。

关键词 cpld;硬件描述语言;出租车计费器中图分类号u463 文献标识码a 文章编号1674-6708(2010)21-0137-02随着cpld/fpga等数字可编程器件的出现,他们可以解决传统电子设计不能完成的任务。

利用cpld来实现出租车计费器,可行性很高,而且电路简单,大大减少外围器件,可以用软件完全仿真,灵活度高,可以设计一些复杂的系统,而且编好的系统可以在不同的fpga或cpld芯片上通用。

1 mars-eda-s实验主板本设计采用了 mars-eda-s实验主板,其核心芯片是altera公司的 epm3256atc144-7芯片。

板上具有如下资源:主芯片:epm3256atc144-7,有源晶振:40mhz;复位芯片:stc811,支持复位手动输入,支持jtag下载模式。

核心板可以作为原型板,用户可以根据自己需要自行扩展。

2 出租车计费器系统设计概述基于cpld设计的出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费3部分,用三位数码管显示总金额,最大值为99.9元。

起步价为5.0元,3km之内按起步价计费,超过3km的,每1km增加1元,等待时间单价为每分钟0.1元。

用两位数码管显示总里程,最大值为99km,用两位数码管等待时间,最大值为99min。

系统框图如图1所示。

2.1 分频模块由于epm3256atc144-7芯片的时钟频率为40mhz,而主控模块所用频率为1hz,必须经过分频才能使得epm3256atc144-7芯片与程序匹配。

//分频/*信号定义:clk_in:输入时钟信号:大小为40mhz;clk:输出时钟信号;大小为1hz;*/module clock_send(clk_in,clk);input clk_in;output clk;reg clock;reg clk;reg[24:0] cnt;always@(posedge clk_in)begincnt<=cnt+1;if(cnt==25’d1*******)begincnt<=0;clock=~clock;endclk<=clock;endendmodule2.2 主控模块在主控模块中,设置拨码开关m控制led灯使系统显示出租车的当前状态,当led灯亮时开始计程,计费显示起步价5元,3km之内为起步价,即300个clk之内为起步价,以后每1km增加1元,即每10个clk增加0.1元;led灯灭时开始记等待时间,每分钟计费增加0.1元,即每60个clk增加0.1元。

基于VerilogHDL出租车计费系统的研制

基于VerilogHDL出租车计费系统的研制

第23卷第10期 2004年10月实验室研究与探索R ESEA RCH AND EXPLORA T I ON I N LABORA TOR YV o l .23N o.10 O ct .2004 基于V erilog HDL 出租车计费系统的研制高 健1, 刘向峰1, 赖 谨2, 戴路红1(南京大学1.电子科学与工程系;2.计算中心,江苏南京210093)摘 要:以上海地区的出租车计费器为例,利用V erilog HDL 语言设计了出租车计费器,使其具有时间显示、计费以及模拟出租车启动、停止、复位等功能,并设置了动态扫描电路显示车费和对应时间,显示了硬件描述语言V erilog 2HDL 设计数字逻辑电路的优越性。

源程序经M A X +PLU S 软件调试、优化,下载到EPF 10K 10TC 14423芯片中,可应用于实际的出租车收费系统。

关键词:V erilog HDL ;电子自动化设计;硬件描述语言;M A X +PLU S 中图分类号:T P 39文献标识码:B 文章编号:100627167(2004)1020049204D e s ign of Ta xi Accounting S ys tem B a s e d on V e rilog HDLGA O J ian 1, L IU X iang 2f eng 1, L A I J in 2, DA I L u 2hong1(1.D ep t .of E lectron ic Science and Eng .; p u ter Cen ter ,N an jing U n iv .,N an jing 210093,Ch ina )Abstract :T he tax i accoun ting system referred to that u sed in Shanghai w as designed by V erilog HDL ,w ith functi on s of ti m e disp lay ,accoun t ,and si m u lati on of start ,stop ,p au se and so on .In additi on ,the dynam icscann ing circu it w as designed to disp lay the tariff num ber .T he design of th is system show s the advan tage of V erilog HDL as a hardw are descri p ti on language .A fter debugging and op ti m izing the sou rce p rogram by the softw are M A X +PLU S of A ltera Com p any ,the p rogram can be u sed in the real tax i accoun ting system by dow n loading to the EPK 10K 10TC 14423ch i p .Key words :V erilog HDL ;EDA ;hardw are descri p ti on language (HDL );M A X +PLU S收稿日期:2003209223;修改稿日期:2004206207第一作者简介:高健(19762),男,助教。

基于verilog_HDL的出租车计费器

基于verilog_HDL的出租车计费器

《EDA技术与应用》实训报告学号姓名指导教师:江国强杨艺敏2011 年4 月28 日实训题目:出租车计费器1.系统设计1.1 设计要求1.1.1 设计任务设计并制作一台出租车计费器。

1.1.2 技术要求①用EDA实训仪的I/O设备和PLD芯片实现出租车计费器的设计。

②出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如7.0),车行驶2km以内,只收起步价7元。

③出租车行驶超过2km后,按每公里1.6元在7.0元的基础上增加。

④出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。

⑤出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。

1.2 方案比较最初计费模块选择乘法,但占用资源过多,所以选择分段加法来解决1.3 方案论证1.3.1 总体思路整个系统主要由计程兼计费模块组成,另外添加计时器和流水灯模块作为附加功能,最后由选择模块选择输出费用或时间,分频模块作为路程模拟输入。

1.3.2 设计方案分频器将实训仪的时钟转换成1s或0.1s的脉冲模拟行进一公里,将脉冲输入计程兼计费模块进行路程累加和计费,同时输出路程数和费用。

流水灯则按行进路程进行亮灭,附加的时钟功能可以查看时间。

最后由选择模块进行费用和时间间的切换。

2.各个模块程序的设计①分频模块:模拟车辆行进,分1s/km档和0.1s/km档module fpq(clk,cout,k1);input clk,k1;reg [24:0] q;output reg cout;always @(posedge clk)begincase(k1)0: begin q=q+1;if (q==20000000-1)begin cout=1;q=0;endelse cout=0;end1: begin q=q+1 ;if (q==2000000-1)begin cout=1;q=0;endelse cout=0;endendcaseendendmodule②计程兼计费模块:jsq99累计路程dejfq按规则计费,同时附带输出显示该模块又由两个小模块组成:jsq99:路程显示module jsq99(clr,clk,q,cout,k2);input clk,clr,k2;output reg[7:0]q;output reg cout;always @(posedge clk or negedge clr)beginif(~clr) q = 0;else beginif(k2==0)beginif(q=='h99) q = 0;else q = q+1;if(q[3:0]=='ha)beginq[3:0] = 0;q[7:4] = q[7:4]+1;endif(q==0) cout = 1;else cout = 0;endendendendmoduledejfq:计费module dejfq(clk,clrn,q,k2);input clk,k2;input clrn;output reg[11:0] q;reg[3:0] c;always @(posedge clk or negedge clrn)beginif(~clrn) begin c=0;q=0;endelse beginif(k2==0)beginif(c<14) c=c+1;if(c<=2) q[7:4]=7;else if(c<=10)beginq[3:0]=q[3:0]+6;q[7:4]=q[7:4]+1;if(q[3:0]>9)begin q[3:0]=q[3:0]-10;q[7:4]=q[7:4]+1;endif(q[7:4]>9)begin q[7:4]=q[7:4]-10;q[11:8]=q[11:8]+1; endendelse if(c>10)beginq[3:0]=q[3:0]+4;q[7:4]=q[7:4]+2;if(q[3:0]>9)begin q[3:0]=q[3:0]-10;q[7:4]=q[7:4]+1;endif(q[7:4]>9)begin q[7:4]=q[7:4]-10;q[11:8]=q[11:8]+1;endendend if(c>14) c=11;endendendmodule③选择器:选择显示时间或费用,拨下拨码开关显示路程和费用,拨上显示时钟。

基于FPGA的出租车计费系统设计(VHDL代码,各个模块均调试通过)

基于FPGA的出租车计费系统设计(VHDL代码,各个模块均调试通过)

2.3 出租车计费系统FPGA实现的设计方案结合已有的应用分立元件和单片机实现的计费系统,吸收两种设计的优势之处,利用FPGA的可编程性,简洁而又多变的设计方法,使出租车计费器体积更小功能更强大,根据日后的功能所需,可随时在系统中修改其逻辑功能。

根据出租车计费系统的设计要求和FPGA模块化功能实现,确定了以下方案,按照设计要求和系统所具有的功能,出租车计费器设计总框图如图2-5所示。

主控部分采用了FPGA的芯片,使用VHDL语言进行编程,这样能具有更强的移植性,利于产品升级。

这次设计的由FPGA来实现出租车计费系统主要设计思想:主要分为信号输入模块、主控模块和显示模块。

图2-5应用FPGA实现出租车计费系统的设计框图确定应用FPGA实现主控的出租车计费系统如图2-5所示,其主控部分为FPGA,外围有很多的输入信号,可以用来选择计费器不同的工作状态。

其中主控部分又有多个模块组成,如里程分频模块、速度模块、计费模块、计时模块、计程模块、显示模块等。

信号输入模块,该模块主要实现计费功能和现场模拟功能,有复位、行车、暂停和停止功能。

计费标准为:按照在不同速度下发送脉冲个数的不同进行计程,按行驶里程计费,当计费器达到或超过规定行驶里程后,每公里加收50%的车费,车停止则不计费。

并以高低脉冲模拟出租汽车启动、停止、暂停、加速按钮,具有输入信号的作用。

通过将路程和车费转换为4位的十进制数,便于8位数码管显示。

动态显示模块显示模块是由七段LED数码管译码和动态扫描显示两部分组成。

采用的是共阴极七段数码管,根据十六进制数和七段显示段码表的对应关系。

数码管控制及译码显示模块将十进制的输入信号用七段数码管显示由七段发光二极管组成数码显示器,利用字段的不同组合,可分别显示0~9。

本设计中,要求输出的段信号为低电平有效[4]。

3 功能模块的设计与实现结合上述方案,给出一个模拟出租车计费系统为例,具体有以下功能:能实现计费功能,计费的标准为;起步价为8元,即三公里内为8元,超过三公里后每公里2元;当总费用达到或超过40元时,每公里加收50%,为4元/公里;遇到红灯或乘客需要停车等待时,每20S收费1元;此外,本次设计的计费器能够预置起步费、每公里收费、车行加费里程、计时收费,当有乘客上车时,就可调用预置数据;并且可以现场模拟汽车行驶、停止、暂停等状态;显示功能:路程显示精确到十分位,显示三位,最高可显示到十位,车费显示到各位,也是显示三位,并以十进制的方式显示。

基于FPGA的出租车计费器设计

基于FPGA的出租车计费器设计

$湖南工程学院课程设计课程名称嵌入式系统课题名称基于CPLD的出租车计费器专业电子信息工程|班级电子信息学号 0113姓名魏震洲指导教师林愿2015年12月20日湖南工程学院%课程设计任务书课程名称:嵌入式系统题目:基于CPLD的出租车计费器专业班级:电子信息学生姓名:魏震洲、指导老师:林愿审批:任务书下达日期 2015 年12 月 1日设计完成日期 2015 年 12月 15日)—目录摘要 (1)Abstract (1)引言 (1)1.概述 (2)2.总体设计 (3)设计要求 (3)基本的原理方框图 (3)开发环境 (4)3.软件设计 (4)总体设计 (4)各模块设计 (5)4.结果仿真 (11)编译 (11)管脚配置 (11)程序下载 (12)5.硬件电路 (12)6. 系统使用说明 (13)结束语 (14)参考文献 (14)致谢 (15)附录 (17)基于CPLD的出租车计费器摘要:本文借助QuartusⅡ软件,基于大规模可编程逻辑器件FPGA,利用Verilog HDL语言,进行出租车计费器设计。

该出租车计费系统包括计数器分频模块、数码管分频模块、计程模块、计时模块、计费模块、控制模块、数码管显示模块和顶层主控模块共八大部分;分起步、里程、等待三个阶段。

该出租车计费器能够自行设定计费标准,借助C ycloneⅡ系列EP20C8Q208C8N芯片的FPGA开发板,进行功能仿真,并且利用外围电路和开发板的结合,能够进行相应的硬件测试。

测试结果由2片4个相连的7段共阳极数码管驱动电路来显示。

关键词:出租车计费器;QuartusⅡ软件;Verilog HDL语言;FPGA开发板引言随着出租车行业的发展,对出租车计费器的要求也越来越高,用户不仅要求计费器性能稳定、计费准确;同时还要求其具有计价标准的灵活设定、营运额统计、密码设定等功能。

目前,出租车行业面临油价上涨和夏季空调费调整的问题,修改计价标准随着油价的上涨势在必行,所以出租车计费器计价标准的灵活设定成为计费器不可缺少的一部分。

基于FPGA的出租车计费器课程设计程序

基于FPGA的出租车计费器课程设计程序

设计题目:出租车计费器一、设计实验条件QuartusII7.2二、设计目标1.实现计费功能。

按行驶里程计费,起步价为6.00元,并在车行驶3km后按1.2元/km计费,当计费器达到或超过20元时,每千米加收50%的车费,车停止和暂停时不计费;2.现场模拟汽车的起动、停止、暂停和换挡等状态;3.设计数码管动态扫描电路,将车费和路程显示出来,各有两位小数。

三、设计报告的内容1.前言伴随中国经济的腾飞,城市化的进程也随之加快。

虽然人们出行的选择趋于多样化,但是出租车作为一种重要的交通工具,也为很多人作为出行的选择。

大城市里出租车已经相当普及,但是在中小城市出租车依然处于快速发展的阶段。

出租车的计费方式也在发生变化,由只能显示里程的方式变为现在的自主计费和打印发票及语音提示的智能化方式;根据出租车行业的发展需求,国内许多生产厂商也制造出不同类型的计价器,传统的出租车计费器经过十几年的使用,在稳定性,成本等方面都具有一定的优势。

利用FPGA设计出满足出租车不同计费需求的计费器,去满足当地出租车的计费需求。

这个课题在实现计费功能的同时,也解决了传统出租车计费器系统的不足。

出租车的需求不断的增大,因此,出租车计费器的需求也将不断增大,计程车的服务也显得越来越重要,因此出租车计费器也就应运而生了。

2.设计主体(1)设计原理:假设出租车有启动键、停止键、暂停键和档位键。

启动键为脉冲触发信号,当它为一个脉冲是,表示汽车已启动,并根据车速的选择和基本车速发出相应频率的脉冲(计费脉冲)实现车费和路程的计数,同时车费显示起步价;当停止键为高电平时,表示汽车熄火,同时停止发出脉冲,此时车费和路程计数清零;当暂停键为高电平时,表示汽车暂停并停止发出脉冲,此时车费和路程计数暂停;档位键用来改变车速,不同档位对应着不同的车速,同时路程计数的速度也不同。

出租车计费器可分为两大模块,即控制模块和译码显示模块,系统框图如图1所示,控制模块实现了计费和路程的技术,并且通过不同的档位控制车速。

基于VerilogHDL的车程计费器设计

基于VerilogHDL的车程计费器设计

目录绪论 (3)论文背景 (3)国内外现状分析 (3)研究设想与研究内容 (4)1 EDA设计方法及软件介绍和芯片的选取说明 (5)1.1 EDA设计方法 (5)1.2 CycloneII EP2C35F672C8芯片的介绍 (6)1.3 软件QuartusII的介绍 (7)2 系统的总体设计 (9)2.1 出租车计费器系统组成框图 (9)2.2 系统主要模块的设计 (10)2.2.1 分频模块 (10)2.2.2 计程模块 (10)2.2.3 计时模块 (12)2.2.4 控制模块 (12)2.2.5 计费模块 (12)2.2.6 数码管显示模块 (13)2.2.7 顶层模块 (14)3 系统仿真测试 (15)3.1 计时模块仿真 (15)3.2 计程模块 (16)3.3 计费模块仿真 (16)3.4 顶层模块系统仿真 (16)4 综合 (18)4.1 Quartus II软件综合的报表 (18)4.2 仿真电路图 (18)结论 (19)参考文献 (20)附录一 (21)致谢 (29)基于Verilog HDL的车程计费器设计摘要随着社会的不断进步,人们生活水平的不断提高,出租车逐渐成为人们日常生活不可缺少的交通工具。

而计费器作为出租车的一个重要组成部分,关系着出租车司机和乘客的双方利益,起着重要的作用,其发展自然会非常迅猛。

设计以FPGA 芯片为控制核心、采用Verilog HDL 硬件描述语言编程而成。

计费器主要由七个模块组成——计程模块、计时模块、计费模块、分频模块、控制模块、显示模块及顶层模块。

设计运用Quartus II进行仿真,并得到详细的仿真波形,从仿真波形中可以看出设计实现了出租车按行驶里程自主收费的功能,同时提高了计费系统的可靠性、通用性。

设计还实现了计费器等待计费的功能,系统具有很好的实用价值。

【关键词】车程计费器Verilog HDL FPGA Quartus IIThe Design of Taxi meter Based On FPGAAbstractWith the development of society, the improvement of people's living standard, the taxi has become indispensable to people's daily life of transportation. And the meter as an important part of taxi, which representing the interest of taxi drivers and passengers, plays an important role, so the taxi meter develops fast.The design used Verilog HDL hardware description language to program and FPGA chip design taxi meter. The meter is mainly composed of seven modules -- the meter module, timing module, billing module, frequency module, control module, digital tube display module and the top module. Design used Quartus II simulation,and obtained the simulation waveform in detail, from the simulation we can see that the design realized the taxi mileage independent charge, while improving the reliability and versatility. The design has realized the functions of wait for billing. The system has a good practical value.【Key words】Taxi meter Verilog HDL FPGA Quartus II绪论论文背景随着出租车行业的发展,社会的不断进步,人们生活水平的不断提高,出租车逐渐成为人们日常生活不可缺少的交通工具。

基于FPGA出租车计费器设计报告(verilog)

基于FPGA出租车计费器设计报告(verilog)

出租车计费器一实验任务及要求1.能实现计费功能,计费标准为:按行驶里程收费,起步费为10.00元,并在车行3公里后再按2元/公里,当计费器计费达到或超过一定收费(如20元)时,每公里加收50%的车费,车停止不计费。

2.实现预置功能:能预置起步费、每公里收费、车行加费里程。

3.实现模拟功能:能模拟汽车启动、停止、暂停、车速等状态。

4.设计动态扫描电路:将车费显示出来,有两位小数。

5.用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。

6.各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。

7. 完成电路全部设计后,通过系统实验箱下载验证设计的正确性。

计费器按里程收费,每100米开始一次计费。

各模块功能如下:(1) 车速控制模块当起停键为启动状态时(高电平),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于停止状态时暂停发出脉冲,此时计费器和里程显示模块相应的停止计数。

(2) 里程动态显示模块其包括计数车速控制模块发出的脉冲以及将计数显示动态显示出来,每来一个脉冲里程值加0.1(控制器每发一个脉冲代表运行了0.1公里)。

(3) 计费动态显示模块其初值为10元,当里程超过3公里后才接受计数车速控制模块发出的脉冲的驱动,并且计数显示动态显示出来,每来一个脉冲(代表运行了0.5公里)其数值加1元,当收费超过20时数值加1.5元。

三实验报告要求1.画出顶层原理图;2.用VHDL语言设计各子模块;3.叙述各子模块和顶层原理图的工作原理;4.给出各模块和顶层原理图的仿真波形图;5.给出硬件测试流程和结果。

四:设计说明:实际设计共五个模块,分别为分频模块(每一百米送一个脉冲以方便计数)、计算里程模块、里程取整模块(不足一公里的按一公里算)、计费模块、显示模块。

详细功能如下:1、分频模块:假设车轮每转一圈为2米,送一个脉冲,则需要50分频(共100米),同理,若知道车轮直径,即可算出分频比2、里程模块:每一百米记一次数,最大可以计999.9公里,精确到0.1公里。

基于verilog语言的出租车计费器(优.选)

基于verilog语言的出租车计费器(优.选)

基于verilog语言的出租车计费器院别:___计算机与通信工程学院___ 专业名称:_______电子信息工程________ 班级学号:________________学生姓名:_______________指导教师:________陈海宴_____________随着出租车行业的发展,对出租车计费器的要求也越来越高。

最近几年出租车行业发展迅速,在全国有几千家出租车公司。

因此出租车计费器市场是庞大的。

而出租车计费器成为不可缺少的一部分。

信息社会的现代电子产品,性能越来越高,复杂度越来越大,更新步伐也越来越快。

实现这种进步的主要原因就是微电子技术和电子技术的发展。

而电子技术的发展后者的核心就是电子设计自动化技术。

EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD 通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

没有EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的;反过来,生产制造技术的不断进步又必将对EDA 技术提出新的要求。

本文采用verilog语言来设计实现出租车计费系统,经过ModelSim和Quartus仿真将其实例化。

如果将该设计再结合到实际应用中,那么,只需改变设计中计费要求,就可以应用到出租车上。

另外,如果再任意输入该出租车计价器的计费标准,那么,它的适用范围可能就更广泛了。

一、设计要求(1)行程3公里内(包括3公里),且等待累计时间2分钟内(包括2分钟),起步费为6.0元;(2)3公里外(不包括3公里)以每公里1.0元,等待累计时间2分钟外(不包括2分钟)以每分钟以1.0元计费。

(3)能显示行驶公里数、等待累计时间和最后的总费用。

本计费器的显示范围为0~99元,计价分辨率为1元;计程器显示范围为0~99公里,分辨率为1公里;计时器的显示范围是分钟的显示范围是0—99,辨率为1分钟。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《EDA技术与应用》实训报告学号姓名指导教师:江国强杨艺敏2011 年4 月28 日实训题目:出租车计费器1.系统设计1.1 设计要求1.1.1 设计任务设计并制作一台出租车计费器。

1.1.2 技术要求①用EDA实训仪的I/O设备和PLD芯片实现出租车计费器的设计。

②出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如7.0),车行驶2km以内,只收起步价7元。

③出租车行驶超过2km后,按每公里1.6元在7.0元的基础上增加。

④出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。

⑤出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。

1.2 方案比较最初计费模块选择乘法,但占用资源过多,所以选择分段加法来解决1.3 方案论证1.3.1 总体思路整个系统主要由计程兼计费模块组成,另外添加计时器和流水灯模块作为附加功能,最后由选择模块选择输出费用或时间,分频模块作为路程模拟输入。

1.3.2 设计方案分频器将实训仪的时钟转换成1s或0.1s的脉冲模拟行进一公里,将脉冲输入计程兼计费模块进行路程累加和计费,同时输出路程数和费用。

流水灯则按行进路程进行亮灭,附加的时钟功能可以查看时间。

最后由选择模块进行费用和时间间的切换。

2.各个模块程序的设计①分频模块:模拟车辆行进,分1s/km档和0.1s/km档module fpq(clk,cout,k1);input clk,k1;reg [24:0] q;output reg cout;always @(posedge clk)begincase(k1)0: begin q=q+1;if (q==20000000-1)begin cout=1;q=0;endelse cout=0;end1: begin q=q+1 ;if (q==2000000-1)begin cout=1;q=0;endelse cout=0;endendcaseendendmodule②计程兼计费模块:jsq99累计路程dejfq按规则计费,同时附带输出显示该模块又由两个小模块组成:jsq99:路程显示module jsq99(clr,clk,q,cout,k2);input clk,clr,k2;output reg[7:0]q;output reg cout;always @(posedge clk or negedge clr)beginif(~clr) q = 0;else beginif(k2==0)beginif(q=='h99) q = 0;else q = q+1;if(q[3:0]=='ha)beginq[3:0] = 0;q[7:4] = q[7:4]+1;endif(q==0) cout = 1;else cout = 0;endendendendmoduledejfq:计费module dejfq(clk,clrn,q,k2);input clk,k2;input clrn;output reg[11:0] q;reg[3:0] c;always @(posedge clk or negedge clrn)beginif(~clrn) begin c=0;q=0;endelse beginif(k2==0)beginif(c<14) c=c+1;if(c<=2) q[7:4]=7;else if(c<=10)beginq[3:0]=q[3:0]+6;q[7:4]=q[7:4]+1;if(q[3:0]>9)begin q[3:0]=q[3:0]-10;q[7:4]=q[7:4]+1;endif(q[7:4]>9)begin q[7:4]=q[7:4]-10;q[11:8]=q[11:8]+1; endendelse if(c>10)beginq[3:0]=q[3:0]+4;q[7:4]=q[7:4]+2;if(q[3:0]>9)begin q[3:0]=q[3:0]-10;q[7:4]=q[7:4]+1;endif(q[7:4]>9)begin q[7:4]=q[7:4]-10;q[11:8]=q[11:8]+1;endendend if(c>14) c=11;endendendmodule③选择器:选择显示时间或费用,拨下拨码开关显示路程和费用,拨上显示时钟。

module xzq(k,qm,qf,qs,q,q1,sum);input k;input[7:0] qm,qf,qs,q1;input[11:0] sum;output reg [23:0] q;alwaysbeginif (k==0) beginq[7:0]=q1;q[11:8]=0;q[23:12]=sum;endelse q[23:0]={qs,qf,qm};endendmodule④时间模块:24小时时钟,可以显示时分秒,可以校准。

该模块又由几个小模块组成module clkgen(clk,cout);//两千万分频器input clk;reg [24:0] q;output reg cout;always @(posedge clk)beginif (q==20000000-1) q=0;else q=q+1;if (q==20000000-1) cout=1;else cout=0;endendmodulemodule cnt60(clk,clrn,j,q,cout);//60进制计数器input clk,clrn,j;output reg[7:0] q;output reg cout;always @(posedge clk^j or negedge clrn)beginif (~clrn) q=0;else beginif (q=='h59) q=0;else q=q+1;if (q[3:0]=='ha) beginq[3:0]=0; q[7:4]=q[7:4]+1; endif (q=='h59) cout=1;else cout=0;endendendmodulemodule cnt24(clk,clrn,j,q,cout);//24进制计数器input clk,clrn,j;output reg[7:0] q;output reg cout;always @(posedge clk^j or negedge clrn)beginif (~clrn) q=0;else beginif (q=='h23) q=0;else q=q+1;if (q[3:0]=='ha) beginq[3:0]=0; q[7:4]=q[7:4]+1; endif (q=='h23) cout=1;else cout=0;endendendmodule⑤流水灯模块:通过亮灭提示行进状态module lsd(clk,q,k2);input clk,k2;output reg[11:0] q;reg [7:0] d;initial q=1;always @(posedge clk)if(k2==0)beginif(d==23) d=0;else d=d+1;if(d<=11)beginif(q==12'b111111111111) q=12'b0111111111111;else q=q<<1;q=q+1;endif(d>11)beginif(q==12'b000000000000) q=1;else q=q<<1;endendendmodule3.制作与调试过程①新建工程,输入程序,生成模块②各模块波形模拟③进行各模块间连线④引脚锁定⑤下载硬件验证调试:最初计费时选择乘法,但占用资源过多,而且在数码管显示时出现16进制,所以转换成加法,成功解决问题。

4.结论通过硬件验证,我的系统已经达到设计要求,同时附加了时钟和流水灯显示两个小功能,可以通过拨码开关选择显示时间和费用。

但由于是初次实践,所以选用了以前上课的模块,导致程序过于臃肿,总体来说还是可以的。

5.实训心得体会为期两周的实训结束了,这是我首次将EDA课程学习到的知识运用到实际当中。

在实训过程中我遇到许多的困难,特别是将16进制转换成0-9的16进制输出到数码管这个地方,困扰了我数天的时间,通过查找资料我采用将乘法转换成加法的方法避开了问题,同时也降低了资源占用率,我在这一点上明白了,想要得到一个优异的程序,我们必须善于发现问题改正问题,同时要有一颗持之以恒的心。

虽然在实训中遇到了一些我们不能完成的问题,但也能在问题中提高很多专业知识,当然也离不开老师的悉心教导。

6.参考文献①《数字逻辑电路基础》,江国强,电子工业出版社②《EDA技术与应用》,江国强,电子工业出版社附录:①仿真波形图(部分模块)路程兼计费模块:②程序清单module fpq(clk,cout,k1);//分频模块input clk,k1;reg [24:0] q;output reg cout;always @(posedge clk)begincase(k1)0: begin q=q+1;if (q==20000000-1)begin cout=1;q=0;endelse cout=0;end1: begin q=q+1 ;if (q==2000000-1)begin cout=1;q=0;endelse cout=0;endendcaseendendmodulemodule jsq99(clr,clk,q,cout,k2);//计程input clk,clr,k2;output reg[7:0]q;output reg cout;always @(posedge clk or negedge clr) beginif(~clr) q = 0;else beginif(k2==0)beginif(q=='h99) q = 0;else q = q+1;if(q[3:0]=='ha)beginq[3:0] = 0;q[7:4] = q[7:4]+1;endif(q==0) cout = 1;else cout = 0;endendendendmodulemodule dejfq(clk,clrn,q,k2);//计费input clk,k2;input clrn;output reg[11:0] q;reg[3:0] c;always @(posedge clk )beginif(~clrn) begin c=0;q=0;endif(k2==0)beginif(c<14) c=c+1;if(c<=2) q[7:4]=7;else if(c<=10) begin q[3:0]=q[3:0]+6;q[7:4]=q[7:4]+1;if(q[3:0]>9)begin q[3:0]=q[3:0]-10;q[7:4]=q[7:4]+1;endif(q[7:4]>9)begin q[7:4]=q[7:4]-10;q[11:8]=q[11:8]+1; endendelse if(c>10) begin q[3:0]=q[3:0]+4;q[7:4]=q[7:4]+2;if(q[3:0]>9)begin q[3:0]=q[3:0]-10;q[7:4]=q[7:4]+1;endif(q[7:4]>9)begin q[7:4]=q[7:4]-10;q[11:8]=q[11:8]+1;endendif(c>14) c=1;endendendmodulemodule clkgen(clk,cout);//两千万分频器input clk;reg [24:0] q;output reg cout;always @(posedge clk)beginif (q==20000000-1) q=0;else q=q+1;if (q==20000000-1) cout=1;else cout=0;endendmodulemodule cnt60(clk,clrn,j,q,cout);//60进制计数器input clk,clrn,j;output reg[7:0] q;output reg cout;always @(posedge clk^j or negedge clrn)beginif (~clrn) q=0;else beginif (q=='h59) q=0;else q=q+1;if (q[3:0]=='ha) beginq[3:0]=0; q[7:4]=q[7:4]+1; endif (q=='h59) cout=1;else cout=0;endendendmodulemodule cnt24(clk,clrn,j,q,cout);//24进制计数器input clk,clrn,j;output reg[7:0] q;output reg cout;always @(posedge clk^j or negedge clrn)beginif (~clrn) q=0;else beginif (q=='h23) q=0;else q=q+1;if (q[3:0]=='ha) beginq[3:0]=0; q[7:4]=q[7:4]+1; endif (q=='h23) cout=1;else cout=0;endendendmodulemodule xzq(k,qm,qf,qs,q,q1,sum);//选择器input k;input[7:0] qm,qf,qs,q1;input[11:0] sum;output reg [23:0] q;alwaysbeginif (k==0) beginq[7:0]=q1;q[11:8]=0;q[23:12]=sum;endelse q[23:0]={qs,qf,qm};endendmodulemodule lsd(clk,q,k2);//流水灯input clk,k2;output reg[11:0] q;reg [7:0] d;initial q=1;always @(posedge clk)if(k2==0)beginif(d==23) d=0;else d=d+1;if(d<=11)beginif(q==12'b111111111111) q=12'b0111111111111; else q=q<<1;q=q+1;endif(d>11)beginif(q==12'b000000000000) q=1;else q=q<<1;endendendmodule。

相关文档
最新文档