FPGA学习心得分享——交通灯(EGO1)

  学期快结束了,学了一个学期FPGA课程,通过自己思索加上老师的指导我完成了自己第一份交通灯的作业,我希望把经验分享给学习Verilog遇到困难的同学,更希望大家都能顺利完成自己的作业。

  灯能左右改变方向,作品能够模拟红、黄、绿、左右转弯灯等形式,按键可以操控灯的状态。并且,作品具备三个交通方式。例如双闪缓行,应急通道。

  

做交通灯需要状态机的知识

根据状态机的输出信号是否与电路的输入有关分为 Mealy型状态机和 Moore 型状态机。

Mealy型状态机:电路的输出信号不仅与电路的当前的状态有关,还与电路的输入有关。

Moore型状态机:电路的输入仅与各触发器的状态有关,与电路的输入无关。

  一段式状态机、二段式状态机、三段式状态机各自的特点

一段式状态机: 仅适合非常简单的状态机设计,只涉及时序电路,消耗的逻辑比较少。

二段式状态机:在组合逻辑特别复杂时适用,但要注意需在后面加一个触发器以消除组合逻辑对输出产生的毛刺。三段式没有这个问题,由于第三个always会生成触发器。

三段式状态机:描述方法虽然代码结构复杂了一些,但是换来的优势是:使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。

主程序如下

 

 

 

 

 

 

 

 

 管脚约束如下:

create_clock -period 10 [get_ports clk_100m]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_100m}]
set_property PACKAGE_PIN P17 [get_ports {clk_100m}]

set_property IOSTANDARD LVCMOS33 [get_ports {rst_n}]
set_property PACKAGE_PIN P15 [get_ports {rst_n}]

######################################################

set_property IOSTANDARD LVCMOS33 [get_ports {sw[0]}]
set_property PACKAGE_PIN R1 [get_ports {sw[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports {sw[1]}]
set_property PACKAGE_PIN N4 [get_ports {sw[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports {sw[2]}]
set_property PACKAGE_PIN M4 [get_ports {sw[2]}]

set_property IOSTANDARD LVCMOS33 [get_ports {sw[3]}]
set_property PACKAGE_PIN R2 [get_ports {sw[3]}]

set_property IOSTANDARD LVCMOS33 [get_ports {sw[4]}]
set_property PACKAGE_PIN P2 [get_ports {sw[4]}]

set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property PACKAGE_PIN K2 [get_ports {led[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property PACKAGE_PIN J2 [get_ports {led[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property PACKAGE_PIN J3 [get_ports {led[2]}]

set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property PACKAGE_PIN H4 [get_ports {led[3]}]

set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}]
set_property PACKAGE_PIN J4 [get_ports {led[4]}]

set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}]
set_property PACKAGE_PIN G3 [get_ports {led[5]}]

set_property IOSTANDARD LVCMOS33 [get_ports {led[6]}]
set_property PACKAGE_PIN G4 [get_ports {led[6]}]

set_property IOSTANDARD LVCMOS33 [get_ports {led[7]}]
set_property PACKAGE_PIN F6 [get_ports {led[7]}]

set_property IOSTANDARD LVCMOS33 [get_ports {seg[0]}]
set_property PACKAGE_PIN D4 [get_ports {seg[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports {seg[1]}]
set_property PACKAGE_PIN E3 [get_ports {seg[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports {seg[2]}]
set_property PACKAGE_PIN D3 [get_ports {seg[2]}]

set_property IOSTANDARD LVCMOS33 [get_ports {seg[3]}]
set_property PACKAGE_PIN F4 [get_ports {seg[3]}]

set_property IOSTANDARD LVCMOS33 [get_ports {seg[4]}]
set_property PACKAGE_PIN F3 [get_ports {seg[4]}]

set_property IOSTANDARD LVCMOS33 [get_ports {seg[5]}]
set_property PACKAGE_PIN E2 [get_ports {seg[5]}]

set_property IOSTANDARD LVCMOS33 [get_ports {seg[6]}]
set_property PACKAGE_PIN D2 [get_ports {seg[6]}]

set_property IOSTANDARD LVCMOS33 [get_ports {seg[7]}]
set_property PACKAGE_PIN H2 [get_ports {seg[7]}]

set_property IOSTANDARD LVCMOS33 [get_ports {an[0]}]
set_property PACKAGE_PIN G6 [get_ports {an[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports {an[1]}]
set_property PACKAGE_PIN E1 [get_ports {an[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports {an[2]}]
set_property PACKAGE_PIN F1 [get_ports {an[2]}]

set_property IOSTANDARD LVCMOS33 [get_ports {an[3]}]
set_property PACKAGE_PIN G1 [get_ports {an[3]}]
 

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值