基于fpga的出租车计费器设计(编辑修改稿)内容摘要:
,行驶/停止信号start为1),当时钟clk是上升沿的时候,系统即对路程计数器distance的里程计数器进行加计数,当路程超过三公里时,系统将输出标志正脉冲distance_enable。 计程模块的VerilogHDL源代码:module distancemokuai(clk,start,reset,distance,distance_enable)。 //端口的定义input clk,start,reset。 output [7:0] distance。 // 输出的公里reg [7:0] distance。 output distance_enable。 // 控制计费的公里信号reg distance_enable。 always@(posedge clk or negedge reset)//异步复位begin if(!reset)//低电平复位 begin distance=839。 d0。 end else if(start)// start 高电平有效 begin if(distance[3:0]==9)//判断distance的低四位计到了9没有 begin distance[3:0]=439。 d0。 //计到9清零 if(distance[7:4]==9) //判断distance的高四位计到了9没有 distance[7:4]=439。 d0。 //计到9清零 else distance[7:4]= distance[7:4]+139。 d1。 // distance的高四位没有计到9的时候加一 end else distance[3:0]=distance[3:0]+139。 d1。 // distance的低四位没有计到9的时候加一 end//end startend//end always//*产生distance_enable信号*//always@(posedge clk or negedge reset)beginif(!reset)begin distance_enable=139。 d0。 //复位endelse if(distance839。 d2)// 大于公里三的时候 begin distance_enable=139。 d1。 //输出distance_enable信号 endend//end alwaysendmodule//结束计程模块 计程模块的仿真结果:从波形图可以看出在时钟的控制下,当reset为高电平且start为高电平的时候distance开始计数,当计到大于三的时候输出了distancedistance_enable为高电平。 : 计时模块的框图:此模块用于计算停车等待的时间。 在出租车行进中,如果车辆停止等待,计数器则在1Hz信号clk的上升沿进行加计数,每60次产生进位脉冲使分钟计数器位进行加计数,当累计等待时间超过2(不包括2分钟)分钟时,输出标志time_enable正脉冲信号。 计时模块的VerilogHDL源代码:module timemokuai(clk,reset,start,s,m,time_enable)。 // 端口的定义input clk,reset,start。 output [7:0] s。 //输出的秒output [7:0] m。 //输出的分output time_enable。 //输出的控制计费的信号reg [7:0] s。 reg [7:0] m。 wire time_enable。 always@(posedge clk or negedge reset)//异步复位beginif(!reset)//低电平有效begin //复位s=839。 d0。 m=839。 d0。 endelse if(!start)//start 信号低电平有效beginif(s[3:0]==9)// 秒的低四位是9 begin s[3:0]=439。 d0。 //清零 if(s[7:4]==5) // 秒的高四位是5 begin s[7:4]=439。 d0。 //清零 if(m[3:0]==9) // 分的低四位是9 begin m[3:0]=439。 d0。 //清零 if(m[7:4]==9) // 分的高四位是9 m[7:4]=439。 d0。 //清零 else m[7:4]=m[7:4]+139。 d1。 // 分的高四位不是9加一endelse m[3:0]=m[3:0]+139。 d1。 //分的低四位不是9加一endelse s[7:4]=s[7:4]+139。 d1。 // 秒的高四位不是5加一endelse s[3:0]=s[3:0]+139。 d1。 //秒的低四位不是9加一 end//end alwaysend assign time_enable=((m[7:0]839。 d3)amp。 amp。 (s[7:0]==839。 d0))?139。 d1:139。 d0。 //产生time_enable信号。 endmodule//结束计时模块 计时模块的仿真结果:两分钟之内(包括两分钟)的仿真结果如下所示:从波形图可以看出在clk的控制下当start为低电平reset为高电平的时候时间计数,time_enable为低电平。 两分钟之外(不包括两分钟)的仿真结果如下所示:从波形图可以看出在clk的控制下当start为低电平reset为高电平的时候时间计数,当时间大于二分钟的时候,time_enable为输出高电平。 : 控制模块的框图:控制模块用于为计费模块提供时钟,当start高电平的时候选择公里计费,输出的时钟信号为distance_enable,当start低电平的时候选择时间计费,输出的时钟信号为time_enable, 控制模块的VerilogHDL源代码:module control(start,distance_enable,time_enable,select_clk)。 input start,distance_enable,time_enable。 output select_clk。 //输出选择的时钟信号wire select_clk。 //*当start高电平的时候选择公里计费,输出的时钟信号为distance_enable,当start低电平的时候选择时间计费,输出的时钟信号为time_enable*//assign select_clk=start?distance_enable:time_enable。 endmodule//结束控制模块 控制模块的仿真结果:(1)公里计费的仿真结果如下所示:从波形图可以看出当start为高电平的时候输出的信号是distance_enable。 (2)时间计费的仿真结果如下所示:从波形图可以看出当start为低电平的时候输出的信号是time_enable。 计费模块: 计费模块的框图:费用计数器模块用于出租车启动后,根据行驶路程和等待时间计算费用。 当出租车停车时,;当车处于行驶状态且满3公里时,select_clk信号选择distans_enable,此后路程每满1公里,费用计数器加1元;当出租车处于停止等待状态且时钟满2分钟时,select_clk信号选择time_enable信号,时间每满1分钟,费用计数器加1元。 计费模块的VerilogHDL源代码如下所示:module feemokuai(select_clk,reset,fee,clk)。 input select_clk,reset,clk。 output[7:0] fee。 //输出的费用reg [7:0] fee。 always@(posedge clk or negedge reset)//异步复位begin if(!reset)//低电平有效 begin fee=839。 d8。 //起步为8元 end else if(select_clk==139。 d1) begin if(fee[3:0]==439。 d8)//费用的低四位是不是计到了8 begin fee[3:0]=439。 d0。 //计到9清零 if(fee[7:4]==439。 d9)// 费用的高四位是不是计到了9fee[7:4]=439。 d0。 //计到9清零 else fee[7:4]=fee[7:4]+139。 d1。 // 费用的高四位没有计到9加1endelse fee[3:0]=fee[3:0]+439。 d2。 // 费用的低四位没有计到8加2end//end beginend//end alwaysendmodule //结束计费模块 计费模块的仿真结果: 数码管显示模块: 数码管显示模块的框图:数码管有两种显示方式动态显示与静态显示,由于在本文中用到了八个数码管所以选择了动态显示,在时钟的控制下,当reset为高电平的时候把费用,公里,时间译码输出。 数码管显示的VerilogHDL源代码:module scan_led(clk1,dig,seg,distance,s,m,fee)。 input clk1。 input[7:0] distance,fee。 //输入的公里,费用。 input[7:0] s。 //输入的秒input[7:0] m。 // 输入的分。 output[7:0] dig。 // 译码结果output[7:0] seg。 // 数码管的选择。 reg [7:0] r_dig。 // 译码结果输出寄存器reg [7:0] r_seg。 //数码管的选择寄存器。 reg [3:0] disp_dat。 reg[3:0] a。 assign dig=r_dig。 assign seg=r_seg。 always@(posedge clk1)begin a=a+139。 d1。 //数码管的选择endalways@(posedge clk1)begincase(a) 439。 d0: disp_dat=distance[7:4]。 //公里的高四位用第一个数码管显示。 439。 d1: disp_dat=distance[3:0]。 //公里的低四位用第二个数码管显示。 439。 d2: disp_dat=m[7:4]。 //时间分的高四位用第三个数码管显示。 439。 d3: disp_dat=m[3:0]。 //时间分的低四位用第四个数码管显示439。 d4: disp_dat=s[7:4]。 //时间秒的高四位用第五个数码管显示。 439。 d5: disp_dat=s[3:0]。 //时间秒的低四位用第六个数码管显示。 439。 d6: disp_dat=fee[7:4]。 //费用的高四位用第七个数码管显示。 439。 d7: disp_dat=fee[3:0]。 //费用的低四位用第八个数码管显示。 default: disp_dat=439。 b1010。 endcasecase(a)439。 d0:r_dig=839。 b01111111。 // 选择第一个数码管439。 d1:r_dig=839。 b10111111。 // 选择第二个数码管439。 d2:r_dig=839。 b11011111。 // 选择第三个数码管439。 d3:r_dig=839。 b11101111。 // 选择第四个数码管439。 d4:r_dig=839。 b11110111。 // 选择第五个数码管439。 d5:r_dig=839。 b11111011。 // 选择第六个数码管439。 d6:r_dig=839。 b11111101。 // 选择第七个数码管439。 d7:r_dig=839。 b11111110。 // 选择第八个数码管default:r_dig=839。 b11111111。 endcaseend// *译码结果*//always@(disp_dat)begin case(disp_dat) 439。 h0: r_seg=839。 hc0。 // 显示0 439。 h1: r_seg=839。 hf9。 // 显示1 439。 h2: r_seg=839。 ha4。 // 显示2 439。 h3: r_seg=839。 hb0。 // 显示3 439。 h4: r_seg=839。 h99。 // 显示4 439。 h5: r_seg=839。 h92。 // 显示5 439。 h6: r_seg=839。 h82。 // 显示6 439。 h7: r_seg=839。 hf8。 // 显示7 439。 h8: r_seg=839。 h80。 // 显示8 439。 h9: r_seg=839。 h90。 // 显示9 default: r_seg=839。 hbf。 endcaseendendmodule//结束译码模块 顶层模块:各模块设计仿真实现后,可分别创建成元件符号。 顶层就是将各分模块用Verilog HDL语言或者是图形方法连接起来,便可实现系统电路。 顶层模块的VerilogHDL源代码:module taximeter(clk_50M,reset,start,seg,dig)。 //端口的定义。基于fpga的出租车计费器设计(编辑修改稿)
相关推荐
RGB 信号从 VGA 缩小到 CIF 以下的任何尺寸。 ( 9) 时序发生器 通常时序发生器有以下功能 : ① 阵列控制和帧率发生 ② 内部信号发生器和分布 ③ 帧率的时序 ④ 自动曝光控制 ⑤ 输出外部时序 (VSYNC, HREF/HSYNC 和 PCLK) 其输出外部时序如图 25 所示: 水平时序: 图 25 OV7670 输出水平时序 VGA 框架时序如图 26 所示:
思路是很清晰的。 实际的数据采集流程是:( 1)初始化:对声卡中与数据采集相关的一些硬件参数进行设置;( 2)然后,声卡开始采集数据,并将采集到的数据暂存在先进先出的缓冲区中;( 3)当 缓冲区存满数据后,一方面将数据读取到用户程序的数组中,产生一个采集数据集合,并在程序中对数据进行各种处理;( 4)另一方面,得到缓冲区满的消息后,通知声卡暂时停止采集外部数据,并进一步清空缓存里的内容。
域等等。 洛阳理工 学院毕业设计(论文) 6 第 2 章 数字图像处理技术及 MATLAB 软件简介 数字图像处理技术简介 图像处理技术基本可以分成两大类:模拟图像处理 (Analog Image Processing)和数字图像处理 (Digital Image Processing),数字图像处理是指将图像信号转换成数字信号并利用计算机进行处理的过程。 数字图像处理技术主要包括如下内容
XDINT0INT1T0 T1 WR RD XTAL2XTAL1VssPSENALEVppPPPPPPPPVccAT89C51 clkPPPPPPPPPPPPPPPPPPALEPSENPPPPPPPPPVCC1212mHZ30pFC147uFC330pFC21kR0S5VCCRSTRST1KR1SY5WVCCEDC GFgndAH G F E11VCCA B C D gndHVCC clk1 2
太多整个页面看上去就很单调了,所以根据简单的原则直接在每个页面内设置一个返回目录的按钮,这样再进行重新选择就比较简单、直观了。 10 总体设计的流程图如图 31 所示: 图 31 总体流程图 整 体结构 本课件主要采用“化整为零,分而治之”的模块设计方法,如图32 所示。 根据课件的内容,将其分解为一个主控模块和三个功能模块,四个模块都要制作成独立的 Flash 影片。 控制模块 内容 各章习
栅前水深 h=. 过栅流速 v =格栅宽度 B= 栅后槽总高度 H= 栅槽总长度 L= 水头损失 每日栅渣量 W= 3md 设计中的各参数均按规范规定的数值来取。 集水井和提升泵房 设计集水池为矩形,其尺寸为长 A=3m,宽 B=4m,高 H=5m,池容为 70 3m。 同时为减少滞流和涡流可将集水池的四角设置成内圆 角。 并应设置相应的冲洗或清泥设施。 提升泵的说明 :