基于发FPGA 练手智能小车顶层文件

c 复制代码
`timescale 1ns / 1ps

module top(
    input    wire          clk   ,
    input    wire          rst_n ,
    input    wire          rx    ,
    input    wire          echo  ,
    input    wire [1:0]    D0    ,
    output   reg  [3:0]    dj    ,
    output   wire          trig  ,
    output   wire [3:0]    sel   ,
    output   reg           t17   ,
    output   reg           u18   ,
    output   wire [7:0]    seg         
    );

wire         valid  ;
wire  [13:0] dis    ;
wire  [7:0]  data   ;
reg   [13:0] dis_t  ;
reg   [1:0]  state  ;
reg   [15:0] cunt   ;
parameter ZERO   =  2'b00;
parameter ONE    =  2'b11;

//产生一个计数器
always @(posedge clk ) begin
    if(!rst_n)
    cunt<=0;
    else if(cunt===100)
    cunt<=0;
    else
    cunt<=cunt+1;
end
//t17 u18赋值
always @(posedge clk ) begin
    if(!rst_n)begin
    t17<=0;
    end
    else  case(state)
    ZERO:begin
        if(cunt<35)
        t17<=1;
        else 
        t17<=0;    
    end
    ONE:t17<=1;
    default:;
    endcase
end
always @(posedge clk ) begin
    if(!rst_n)
    u18<=0;
    else  case(state)
    ZERO:begin
        if(cunt<35)
        u18<=1;
        else 
        u18<=0;
    end
    ONE: u18<=1;
    default:;
    endcase
end
//状态的转移
always @(posedge clk ) begin
    if(!rst_n)
    state<=ONE;
    else if(state==ONE&&data==8'h06)
    state<=ZERO;
    else if(state==ZERO&&data==8'h07)
    state<=ONE;
    else
    state<=state;
end
// dis_t的缓存
always @(posedge clk ) begin
    if(!rst_n)
    dis_t<=0;
    else if(dis>0)
    dis_t<=dis;
    else
    dis_t<=dis_t;
    
end
//红外寻迹 正常模式 的描述 (状态的描述)
always @(posedge clk ) begin
    if(state==ZERO)begin
        if(dis_t<55)
        dj<=4'b0000;
        else  case (D0)
            2'b00: dj<=4'b0101;
            2'b01: dj<=4'b1001;
            2'b10: dj<=4'b0110;
            default:dj<=4'b0000 ;
        endcase
    end
    else  if(state==ONE)begin
        if(dis_t<55)
        dj<=4'b0000;
        else   case (data)
            8'h01:dj<=4'b0101;
            8'h02:dj<=4'b1010;
            8'h03:dj<=4'b1001;
            8'h04:dj<=4'b0110;
            8'h05:dj<=4'b0000;
            default: dj<=4'b0000;
        endcase
    end
    else
    dj<=4'b0000;
end



rx#(
    . CLK_DIV ( 50_000_000 ),
    . BIT     ( 9600       )
)u_rx(
    .  clk  (clk  ),
    .  rst_n(rst_n),
    .  rx   (rx   ),
    .  data (data ),//o
    .  valid(valid)
    );
HC_SR04 u_hc(
    /*input     wire        */  . clk  (clk     ),
    /*input     wire        */  . rst_n(rst_n   ),
    /*input     wire        */  . echo (echo    ),
    /*output    wire        */  . trig (trig    ),
    /*output    wire  [3:0] */  . sel  (sel     ),
    /*output    wire  [7:0] */  . seg  (seg     ),
                                . data (dis     )// 精度0.1cm 小于40执行避障停止
    );
endmodule

其中细节1 蓝牙连接tx相当于是 蓝牙接受到了数据通过tx发送给fpga的(fpga只写了rx)

其中细节2

其中细节3

红外线寻迹模块需要低速 这时候如果速度过快需要调整pwm

ENA 与ENB为两马达的使能,需要调速的时候把这两个使能的跳帽去掉,然后在第一个入口接入一个pwm信号即可

相关推荐
Florence232 小时前
GPU和FPGA的区别
fpga开发
电棍23315 小时前
verilog笔记
笔记·fpga开发
ZxsLoves1 天前
【【Systemverilog学习参考 简单的加法器验证-含覆盖率】】
学习·fpga开发
Ronin-Lotus1 天前
嵌入式硬件篇---数字电子技术中的触发器
嵌入式硬件·fpga开发·触发器·数字电子技术·上位机知识
ehiway2 天前
FPGA+GPU+CPU国产化人工智能平台
人工智能·fpga开发·硬件工程·国产化
蓑衣客VS索尼克2 天前
什么是逻辑分析仪?
arm开发·人工智能·fpga开发
Terasic友晶科技3 天前
第29篇 基于ARM A9处理器用C语言实现中断<五>
c语言·fpga开发·定时器中断
9527华安3 天前
FPGA实现GTY光口视频转USB3.0传输,基于FT601+Aurora 8b/10b编解码架构,提供2套工程源码和技术支持
fpga开发·音视频·aurora·gty·usb3.0·ft601
博览鸿蒙3 天前
FPGA开发要学些什么?如何快速入门?
fpga开发
@晓凡3 天前
FPGA中利用fifo时钟域转换---慢时钟域转快时钟域
fpga开发