基于发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信号即可

相关推荐
晓晓暮雨潇潇3 小时前
Diamond基础6:LatticeFPGA配置流程
fpga开发·diamond·lattice·latticeecp3
江蘇的蘇4 小时前
基于7系列FPGA实现万兆网通信
fpga开发
GateWorld7 小时前
FPGA实战:一段让我重新认识时序收敛的FPGA迁移之旅
fpga开发·实战经验·fpga时序收敛·建立保持时间
GateWorld7 小时前
性能飞跃:DDR4特性解析与FPGA实战指南
fpga开发·信号完整性·ddr3·ddr4
第二层皮-合肥8 小时前
50天学习FPGA第21天-verilog的时序与延迟
学习·fpga开发
范纹杉想快点毕业9 小时前
FPGA实现同步RS422转UART方案
数据库·单片机·嵌入式硬件·fpga开发·架构
s090713618 小时前
Xilinx FPGA使用 FIR IP 核做匹配滤波时如何减少DSP使用量
算法·fpga开发·xilinx·ip core·fir滤波
XINVRY-FPGA1 天前
XC7Z030-2SBG485I Xilinx Zynq-7000 系列 SoC FPGA
嵌入式硬件·fpga开发·硬件工程·fpga
崇子嵘1 天前
Hdlbits
fpga开发
Saniffer_SH2 天前
【每日一题】PCIe答疑 - 接大量 GPU 时主板不认设备或无法启动和MMIO的可能关系?
运维·服务器·网络·人工智能·驱动开发·fpga开发·硬件工程