基于Verilog HDL 和FPGA的寻线小车设计代码
刚进实验室的第一个项目——做一个寻线小车,我就用FPGA芯片尝试做了一个。
用到的零件有:车模一个、一块L298N驱动模块、一块cyclone IV芯片(具体型号是EP4CE6E22C8N)、四个电机、一个电源、一个四灰度寻迹模块(或者红外寻迹模块)。
以下是四灰度寻迹模块输出的高低电平及小车对应的功能:
以下是具体代码:
module xunji_car
#(
parameter CNT_MAX = 19'd49_9999 ,
parameter CNT_NUM = 19'd25_9999
)
(
input wire sys_clk ,
input wire sys_rst_n ,
input wire [3:0] in ,
output reg [3:0] led_out ,
output reg ENA ,
output reg ENB ,
output reg [3:0] out
);
reg [18:0] cnt ;
reg cnt_flag ;
reg pwm_out ;
always @ (posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1'b0 )
cnt <= 19'd0 ;
else if(cnt == CNT_MAX)
cnt <= 19'd0 ;
else cnt <= cnt + 19'd1 ;
always @ (posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1'b0 )
cnt_flag <= 1'b0 ;
else if (cnt == CNT_NUM - 19'd1)
cnt_flag <= 1'b1 ;
else cnt_flag <= 1'b0 ;
always @ (posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1'b0)
pwm_out <= 1'b0 ;
else if(cnt_flag == 1'b1)
pwm_out <= ~pwm_out ;
else if(cnt == CNT_MAX)
pwm_out <= 1'b0 ;
else pwm_out <= pwm_out ;
always @ (posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1'b0)
begin
led_out <= 4'b0000 ;
ENA <= 1'b0 ;
ENB <= 1'b0 ;
out <= 4'b0000 ;
end
else case (in)
4'b0000 : begin led_out <= 4'b0000 ; ENA <= 0 ;ENB <= 0 ; out <= 4'b0000 ;end
4'b0001 : begin led_out <= 4'b1110 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b1001 ;end
4'b0010 : begin led_out <= 4'b1110 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b1001 ;end
4'b0011 : begin led_out <= 4'b1110 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b1001 ;end
4'b0100 : begin led_out <= 4'b0111 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b0110 ;end
4'b0101 : begin led_out <= 4'b0111 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b0110 ;end
4'b0110 : begin led_out <= 4'b1111 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b0101 ;end
4'b0111 : begin led_out <= 4'b1110 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b1001 ;end
4'b1000 : begin led_out <= 4'b0111 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b0110 ;end
4'b1001 : begin led_out <= 4'b1110 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b1001 ;end
4'b1010 : begin led_out <= 4'b1110 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b1001 ;end
4'b1011 : begin led_out <= 4'b1110 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b1001 ;end
4'b1100 : begin led_out <= 4'b0111 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b0110 ;end
4'b1101 : begin led_out <= 4'b0111 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b0110 ;end
4'b1110 : begin led_out <= 4'b0111 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b0110 ;end
4'b1111 : begin led_out <= 4'b1111 ; ENA <= pwm_out ;ENB <= pwm_out ; out <= 4'b0101 ;end
default : begin led_out <= 4'b0000 ; ENA <= 0 ;ENB <= 0 ; out <= 4'b0000 ;end
endcase
endmodule
基于Verilog HDL 和FPGA的寻线小车设计代码相关推荐
- matlab4fsk软件解调代码,4fsk调制与解调基于Verilog HDL语言
[实例简介] 4fsk调制与解调基于Verilog HDL语言 [实例截图] [核心代码] 4fsk调制与解调基于VerilogHDL语言 └── kechengsheji ├── dac0832(1 ...
- 《Verilog HDL与FPGA数字系统设计》书籍试读体验
文章目录 前言 第一部分:数字系统基础 第二部分:数字系统设计实践 第三部分:可编程片上系统 总结 前言 最近参加一个面包板社区的图书试读活动:<Verilog HDL与FPGA数字系统设计&g ...
- 基于Verilog HDL的数字秒表、波形发送器等设计
基于Verilog HDL的数字秒表设计 一.EDA 二.基于Verilog HDL的数字秒表设计 1. 用Verilog HDL设计一个数字跑表,所需引脚和功能如下所示: 2.代码示例 3. 结果: ...
- 基于Verilog HDL的数字时钟
目录 一.实验目的 二.实验概述 三.实验过程 一.实验目的 1.学习相关的设计方法及原理 2.学习设计方法 二.实验概述 基于Verilog HDL设计一个时钟 三.实验过程 新建一个工程 选择芯片 ...
- 基于MSP432控制的红外循迹爬坡小车设计报告
基于MSP432控制的红外循迹爬坡小车设计报告 竞赛选题:坡道行驶电动小车(C题) 摘要 本小车基于TI的MSP432平台,设计了可以沿指定路线在坡道上循迹行驶的四轮小车.小车采用L298N驱动芯片控 ...
- 基于STM32F103的红外循迹避障小车设计(含Proteus仿真)
基于STM32F103的红外循迹避障小车设计 红外循迹及红外避障实现较简单,无论是51单片机还是STM32单片机,其例程随处可见.但是完全可以运行的Proteus仿真,开源的并不多,更不要说基于STM ...
- (多图) 基于Verilog HDL的FIR数字滤波器设计与仿真
引言:数字滤波器是语音与图像处理.模式识别.雷达信号处理.频谱分析等应用中的一种基本的处理部件,它能满足波器对幅度和相位特性的严格要求,避免模拟滤波器所无法克服的电压漂移.温度漂移和噪声等问题.有限冲 ...
- 基于Verilog HDL与虚拟实验平台的【计算机组成】与CPU实验第三章:三态门和多路器
1判断(2分) 数字逻辑电路有两大种类型,组合逻辑电路和时序逻辑电路,组合逻辑电路"没有记忆",输出由输入决定,时序逻辑电路"有记忆",输出由当前输入和以前的状 ...
- 基于Verilog HDL与虚拟实验平台的【计算机组成】与CPU实验第四章:七段译码器
1单选(2分) 2-4译码器有____位输入,位输出,在输出的所有位中,只有其中1位有效,通常在计算机里用作, 有一些译码器设有一个和多个使能控制输入端,又成为片选端,用来控制允许译码或禁止译码. A ...
最新文章
- SAP PM纠正维护
- VS2017 Pro未能找到路径“……\bin\roslyn\csc.exe”的解决方案
- 开发日记-20190906 关键词 当当云阅读 ipad
- **23.m阶的B-树和B+树的主要区别
- php yii 插入,Yii2 批量插入、更新数据实例
- phppage类封装分页功能_PHP封装的page分页类定义与用法完整示例
- javascript 请求web service
- 零基础自学用Python 3开发网络爬虫(二): 用到的数据结构简介以及爬虫Ver1.0 alpha...
- Intel酷睿前世今生(二)
- android实现自动触摸,Android编程开发之多点触摸(Multitouch)实现方法
- 头部姿态估计:《Fine-Grained Head Pose Estimation Without Keypoints》
- 北京地标《信息化项目软件开发费用测算规范》完成公开征求意见
- ssdt函数索引号_技术分享 - 32位系统上获取SSDT表地址以及从中获取指定SSDT函数的地址...
- Carp后端开发文档
- 阿里云认证是什么?报考要什么条件?
- cad.net 图层隐藏 IsHidden 用法 eDuplicateRecordName 报错
- Android实战技巧之十:获得屏幕物理尺寸、密度及分辨率
- 2021年华为云618年中钜惠,惊喜“惠”聚!
- linux进入vi界面后命令,教你Linux-vi编辑器的常用命令
- 【Linux】部署web项目