Verilog HDL项目设计报告
题 目 出租车计费器_________
专 业 电子科学技术__________
学 号 15629102271562910209
授课班号 6292758—01_________
学生姓名 XXXXXX______
指导教师 XX齐XX_______
摘
次课设采编程逻辑器件(FPGAVerilog)进行出租车计费器设计设计实现出租车计费器需基功计费金额包括起步价里程计费等该设计采模块化设计VIVADO20154软件台采Verilog HDL 硬件描述语言描述模拟仿真分频模块计程模块计费模块译码显示模块完成出租车计费器仿真设计实现
关键词:出租车计价器Verilog HDL步脉数码显示
Abstract
This class set we use programmable logic device (FPGAVerilog) to design a taxi meter The design and implementation of some of the basic functions required for taxi billing billing amount including starting price mileage and so on The design uses the modular design in ISE software platform using Verilog HDL hardware description language description and Simulation of frequency module meter module billing module decoding module realizes the design of Taximeter simulation
Key words taximeter Verilog HDLSync pulse digital display
目录
方案设计
二模块设计
三仿真调试
四总结
五参考文献
六附录
方案设计
1设计目标
完成简易出租车计价器设计选做停车等计价功
(1)起步8元3公里1元550米
(2)里程指示信号前进50米高电脉升效
(3)前进里程开始前显示价钱精确01元
2设计原理
出租车般计费程:出租车载客启动计费器整系统开始运行里程计数器0开始计数费计数器8开始计算根行驶里程标准计费行驶状态计程器开始加计数
路程超三公里计费器50米01元累加出租车达目停止停止计费器显示总费根课程设计求计价器根车轮转数计算路程脉代表50米脉里程计算模块计价器增加01元十脉550米历11状态价格增加10元
二模块设计
1分频模块
时钟信号进行分频分出频率供面计程模块计价模块面数码显示扫描模块会模块功总时钟进行分频分出频率计数器总时钟50K设计该模块时候16位计数器计数器计500时候产生时钟
always@(posedge clk or posedge rst)frequency division
if(rst)
begin clk0<0count<0end
else if(count500)
begin clk0<~clk0count<0end
else count
步脉信号处理模块完成脉start步处理部分采三D触发器门完成start信号步处理处理clk升检测start信号高低电
always@(posedge clk or posedge rst)signal porcessing
if(rst)
{pulse1pulse2pulse3}<0
else
begin
pulse1
always@(*)
begin
pulse
3计程模块
模块功计算出租车行驶路程出租车启动行驶程中(复位启动信号rst1)时钟clk升时候输入正脉时系统路程计数器里程计数器进行加计数
always@(posedge clk or posedge rst)distance
if(rst)
meter<0
else if(pulse)
begin
if(meter5)
meter<0
else
meter
always@(posedge clk or posedge rstn)
if(rst)
{kmeter_4kmeter_3kmeter_2kmeter_1}<0
else if(pulse)
begin
if(meter5)
if(kmeter_l9)
if(kmeter_29)
if(kmeter_39)
if(kmeter_49)
begin kmeter_l<0kmeter_2<0kmeter_3<0kmeter_4<0end
else begin kmeter_l<0kmeter_2<0kmeter_3<0kmeter_4
4计费模块
费计数器模块出租车启动根行驶路程计算费出租车停车时时钟rst费计数器复位起步价80元车处行驶状态时满3公里路程满50米费计数器加01元
always@(posedge clk or posedge rst)money
if(rst)
begin {money_4money_3money_l}<0 money_2<8money<1end
else if(pulse)
begin
if({kmeter_2kmeter_lmeter}>11'b00101001101) >2950m
if(money_l9)
if(money_29)
if(money_39)
if(money_49)
begin
money_l<0money_2<0money_3<0money_4<0money<1
end
else
begin money_l<0money_2<0money_3<0money_4
else begin money_l<0money_2<0money_3
begin
case(money)
1money_l<1
2money_l<2
3money_l<3
4money_l<4
5money_l<5
6money_l<5
7money_l<6
8money_l<7
9money_l<8
10money_l<9
11money_l<0
endcase
money
end
5数码显示模块
数码显示模块四位数码设置开关低电中四位显示公里数高电时四位显示价钱数精度分 01km 01 元模块需计数值通译码电路数译码数码显示数
always@(posedge clk or posedge rst)display
if(rst)
state<0
else if(state23)
state<0
else
state
always@(posedge clk or posedge rst)
if(rst)
begin display<8'b11000000en<4'b0000variable<0end
else
begin
case(variable)
0begin display[60]<7'b1000000end
1begin display[60]<7'b1111001end
2begin display[60]<7'b0100100end
3begin display[60]<7'b0110000end
4begin display[60]<7'b0011001end
5begin display[60]<7'b0010010end
6begin display[60]<7'b0000010end
7begin display[60]<7'b1111000end
8begin display[60]<7'b0000000end
9begin display[60]<7'b0010000end
defaultbegin display<8'b11111111en<4'b1111end
endcase
begin
case(turn)
0
begin
if(state>0&&state<1)begin display[7]<1variable
if(state>3&&state<4)begin display[7]<0variable
if(state>6&&state<7)begin display[7]<1variable
if(state>9&&state<10)begin display[7]<1variable
end
1
begin
if(state>0&&state<1)begin display[7]<1variable
if(state>3&&state<4)begin display[7]<0variable
if(state>6&&state<7)begin display[7]<1variable
if(state>9&&state<10)begin display[7]<1variable
end
defaultbegin display<8'b11111111 en<4'b1111end
endcase
end
end
三设计仿真调试
1仿真
计价电路计价求精确 01元 550m计价元 50m脉脉约九分钱次计价四舍五入法计价时满足出租车计价现实性需次计价终结果实际值 01元出租车计价应该三公里始终显示八元刚三公里时应显示 81 元 295km时开始计价脉采四舍五入法计价 11 脉计价 1元样满足出租车计价现实性
2调试
电路数码显示行走里程数价钱数没行走 50m脉信号采键模拟出租车行走 50m脉信号数码显示里程数价钱
(1) 三公里
价格8元
里程数
(2) 三公里外
41公里
价格101元
3验收结果
验收时老师求起步价改7元复位信号端口改成意指定端口改变起步价需计费模块中
begin {money_4money_3money_l}<0 money_2<8money<1end
条语句中money_2<8改成money_2<7改变端口需改变约束文件端口定义改指定端口端口号
四总结
次课程设计历两周时间中学仅巩固学知识学书没学知识历仿真开发板验证开发板初步达设计务求
次设计进步加深verilog 解中途遇问题例仿真时遇困难想结果波形正确显示屡次调试发现写代码前信号考虑足次课设中懂理实际相结合重仅理知识远远够学理知识实践想结合起理中出结提高实际动手力独立思考力设计程中发现足处需加改进
总说次设计算成功设计中遇问题十分努力化解问题仅学知识锻炼力路更加清楚认识
五参考文献
夏宇闻verilog数字系统设计教程北京航天航空学出版社
六附录
1程序
module taxi(clkpulse0rstturndisplayen)
input clkrstpulse0turn clk0100MHZ ASYNC pulse0
output[70]display
output[30]en
wire clkrstnpulse0
reg[70]display
reg[30]en
reg clk0pulse1pulse2pulse3pulse
reg[20]meter
reg[50]state
reg[150]count
reg[30]
variablemoneykmeter_1kmeter_2kmeter_3kmeter_4money_1money_2money_3money_4
always@(posedge clk or posedge rst)frequency division
if(rst)
begin clk0<0count<0end
else if(count500)
begin clk0<~clk0count<0end
else count
always@(posedge clk or posedge rst)signal porcessing
if(rst)
{pulse1pulse2pulse3}<0
else
begin
pulse1
always@(*)
begin
pulse
always@(posedge clk or posedge rst)distance
if(rst)
meter<0
else if(pulse)
begin
if(meter5)
meter<0
else
meter
always@(posedge clk or posedge rstn)
if(rst)
{kmeter_4kmeter_3kmeter_2kmeter_1}<0
else if(pulse)
begin
if(meter5)
if(kmeter_l9)
if(kmeter_29)
if(kmeter_39)
if(kmeter_49)
begin kmeter_l<0kmeter_2<0kmeter_3<0kmeter_4<0end
else
begin kmeter_l<0kmeter_2<0kmeter_3<0kmeter_4
always@(posedge clk or posedge rst)money
if(rst)
begin {money_4money_3money_l}<0 money_2<8money<1end
else if(pulse)
begin
if({kmeter_2kmeter_lmeter}>11'b00101001101) >2950m
if(money_l9)
if(money_29)
if(money_39)
if(money_49)
begin
money_l<0money_2<0money_3<0money_4<0money<1
end
else
begin
money_l<0money_2<0money_3<0money_4
else begin money_l<0money_2<0money_3
begin
case(money)
1money_l<1
2money_l<2
3money_l<3
4money_l<4
5money_l<5
6money_l<5
7money_l<6
8money_l<7
9money_l<8
10money_l<9
11money_l<0
endcase
money
end
always@(posedge clk or posedge rst)display
if(rst)
state<0
else if(state23)
state<0
else
state
always@(posedge clk or posedge rst)
if(rst)
begin display<8'b11000000en<4'b0000variable<0end
else
begin
case(variable)
0begin display[60]<7'b1000000end
1begin display[60]<7'b1111001end
2begin display[60]<7'b0100100end
3begin display[60]<7'b0110000end
4begin display[60]<7'b0011001end
5begin display[60]<7'b0010010end
6begin display[60]<7'b0000010end
7begin display[60]<7'b1111000end
8begin display[60]<7'b0000000end
9begin display[60]<7'b0010000end
defaultbegin display<8'b11111111en<4'b1111end
endcase
begin
case(turn)
0
begin
if(state>0&&state<1)begin display[7]<1variable
if(state>3&&state<4)begin display[7]<0variable
if(state>6&&state<7)begin display[7]<1variable
if(state>9&&state<10)begin display[7]<1variable
end
1
begin
if(state>0&&state<1)begin display[7]<1variable
if(state>3&&state<4)begin display[7]<0variable
if(state>6&&state<7)begin display[7]<1variable
if(state>9&&state<10)begin display[7]<1variable
end
defaultbegin display<8'b11111111 en<4'b1111end
endcase
end
end
endmodule
2测试文件程序
module taxi_test
reg clk0rstnpulse0turn
wire [70]display
wire [30]en
wire [30] variable
wire [30] kmeter_l
wire pulse
taxi taxi(clk0(clk0)rstn(rstn)pulse0(pulse0)turn(turn)display(display)en(en)variable(variable)kmeter_l(kmeter_l)pulse(pulse))
initial
turn1
always #10 turn~turn
initial
clk00
always #0001 clk0~clk0
initial
begin
rstn0
#1 rstn1
#1 rstn0
end
initial
begin
pulse00
while(1)
begin
#1 pulse01
#15pulse00
end
#005 finish
end
endmodule
3约束文件程序
set_property IOSTANDARD LVCMOS33 [get_ports {display[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {display[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {display[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {display[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {display[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {display[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {display[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {display[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {en[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {en[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {en[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {en[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports turn]
set_property IOSTANDARD LVCMOS33 [get_ports clk0]
set_property IOSTANDARD LVCMOS33 [get_ports pulse0]
set_property IOSTANDARD LVCMOS33 [get_ports rstn]
set_property PACKAGE_PIN W5 [get_ports clk0]
set_property PACKAGE_PIN T17 [get_ports pulse0]
set_property PACKAGE_PIN U18 [get_ports rstn]
set_property PACKAGE_PIN T1 [get_ports turn]
set_property PACKAGE_PIN V7 [get_ports {display[7]}]
set_property PACKAGE_PIN U7 [get_ports {display[6]}]
set_property PACKAGE_PIN V5 [get_ports {display[5]}]
set_property PACKAGE_PIN U5 [get_ports {display[4]}]
set_property PACKAGE_PIN V8 [get_ports {display[3]}]
set_property PACKAGE_PIN U8 [get_ports {display[2]}]
set_property PACKAGE_PIN W6 [get_ports {display[1]}]
set_property PACKAGE_PIN W7 [get_ports {display[0]}]
set_property PACKAGE_PIN W4 [get_ports {en[3]}]
set_property PACKAGE_PIN V4 [get_ports {en[2]}]
set_property PACKAGE_PIN U4 [get_ports {en[1]}]
set_property PACKAGE_PIN U2 [get_ports {en[0]}]
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档