FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-技术文章/快讯-技术分享-正文

基于FPGA的广告点阵屏(学员作品展示)

二牛学FPGA二牛学FPGA
技术分享
1年前
0
0
739

verilog代码:(注意格式)

`timescale 1ns / 1ps
module HC_595
#(
    parameter SYSCLK = 50_000_000,//系统时钟频率
    parameter CLK_HZ = 100_000       //用系统时钟产生一个100k的频率的时钟
)
(
    input               sysclk      ,
    input               rst_n       ,
    input [15:0]        Data        ,
    input               en          ,//开始信号
    output    reg      SCK         ,
    output    reg      RCK         ,
    output    reg      DA          ,
    output    reg      Done         //结束信号
    );

localparam DELAY = SYSCLK/CLK_HZ;
localparam MID = DELAY/2;
  reg [31:0] cnt_delay;
  reg [31:0] cnt_mid;
  reg [1:0] en_temp;
  reg [15:0] data_temp;//用于存储输入进来的16bit数据
localparam IDLE = 3'b001,
           DATA = 3'b010,
           STOP = 3'b100;
  reg [2:0] cur_state,next_state;
  reg [4:0] cnt_bit;

//______________________________滤除毛刺__________________________________//
always@(posedge sysclk)
    if(!rst_n)
        en_temp <= 2'b00;
    else
        en_temp <= {en_temp[0],en};

//___________________________DELAY__________________________________//
always@(posedge sysclk)
    if(!rst_n)
        cnt_delay <= 32'd0;
    else if(cnt_delay >= DELAY - 1 )
        cnt_delay <= 32'd0;
    else        cnt_delay <= cnt_delay + 32'd1;

//___________________________MID__________________________________//
always@(posedge sysclk)
    if(!rst_n)
        cnt_mid <= 32'd0;
    else if(cnt_mid >= MID - 1 )
        cnt_mid <= 32'd0;
    else
        cnt_mid <= cnt_mid + 32'd1;

//______________________________产生SCK__________________________________//
always@(posedge sysclk)
    if(!rst_n)
        SCK <= 1'b0;
    else if(cnt_mid >= MID - 1)
        SCK <= ~SCK;
    else
        SCK <= SCK;

//_________________________state1____________________________________//
always@(posedge sysclk)
    if(!rst_n)
        cur_state <= IDLE;
    else
        cur_state <= next_state;

//_______________________________state2_____________________________________//
always@(*)
    case(cur_state)
        IDLE:begin
            if(en_temp == 2'b01 )  //开始信号稳定的时候跳到数据状态去传输数据
                next_state = DATA;
            else
                next_state = cur_state;
        end
        DATA:begin
            if(cnt_bit == 5'd16 && cnt_delay >= DELAY - 1)
                next_state = STOP;
            else 
               next_state = cur_state;
        end
        STOP:begin
            if(cnt_delay >= DELAY - 1)
                next_state = IDLE;
            else
                next_state = cur_state;
        end
    endcase

//__________________________state3_________________________________//
always@(posedge sysclk)
    if(!rst_n)begin
        cnt_bit <= 5'd0;
        RCK <= 1'b0;
        data_temp <= 16'd0;
        Done <= 1'b0;
          DA <= 1'b0;
    end
    elsecase(cur_state)
            IDLE:begin
                cnt_bit <= 5'd0;
                RCK <= 1'b0;
                data_temp <= Data;
                Done <= 1'b0;
                DA <= 1'b0;
            end
DATA:begin
                if(cnt_delay >= DELAY - 1)begin
                    DA <= data_temp[15];
                    data_temp <= {data_temp[14:0],1'b0};
                end
                else begin
                    DA <= DA;
                    data_temp <= data_temp;
                end
                if(cnt_delay >= DELAY - 1 && cnt_bit >= 5'd16)
                    cnt_bit <= 5'd0;
                else if(cnt_delay >= DELAY - 1)
                    cnt_bit <= cnt_bit + 5'd1;
                else
                    cnt_bit <= cnt_bit;
                Done <= 1'b0;
                RCK <= 1'b0;
            end
 STOP:begin
                if(cnt_delay == 1)
                    RCK <= 1'b1;
                else
                    RCK <= 1'b0;
                if(cnt_delay >= DELAY - 1)
                    Done <= 1'b1;
                else
                    Done <= 1'b0;
                cnt_bit <= 5'd0;
            end
        endcase
endmodule
标签:
本文原创,作者:二牛学FPGA,其版权均为FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训所有。
如需转载,请注明出处:https://z.shaonianxue.cn/9345.html
分享:
FPGA夏令营作品-超声波测距
FPGA夏令营作品-超声波测距上一篇
利用广告点阵屏实现“CQUPT”下一篇
利用广告点阵屏实现“CQUPT”
相关文章
总数:1.24K
2024年夏令营学员项目代码展示(基于FPGA的广告点阵屏)

2024年夏令营学员项目代码展示(基于FPGA的广告点阵屏)

2024年夏令营学员项目代码展示(基于FPGA的广告点阵屏)
二牛学FPGA二牛学FPGA
工程案例, 技术分享
10个月前
0
0
428
1

国产FPGA在工业机器视觉边缘AI中的部署实践指南:基于安路EF2L45的YOLOv3-tiny实现

QuickStart本案例使用安路科技(Anlogic)EF2L45系列FPGA开发板,该板集成DDR3、千兆以太网PHY、MIPICSI-…
二牛学FPGA二牛学FPGA
技术分享
23天前
0
0
36
0

2026年5月:Verilog基础语法速成,新手避坑指南

QuickStart本指南面向零基础或刚入门的FPGA学习者,目标是在30分钟内掌握Verilog最核心的语法子集,并避开新手最常见的陷阱。以…
二牛学FPGA二牛学FPGA
技术分享
16天前
0
0
28
0

FPGA在边缘AI推理中的低延迟实现:上手指南与实施手册

QuickStart:在FPGA上运行一个边缘AI推理模型准备硬件平台:使用XilinxZynq-7020或Artix-7FPGA开发板(…
二牛学FPGA二牛学FPGA
技术分享
1个月前
0
0
47
0

FPGA竞赛时序优化实战指南:常见陷阱规避与设计规范

QuickStart打开Vivado(或Quartus),创建新工程,目标器件选择竞赛指定型号(例如XC7A35T-1CSG324C)。…
二牛学FPGA二牛学FPGA
技术分享
1个月前
0
0
50
0

FPGA毕业设计选题:基于图像压缩的实时处理系统

QuickStart:最短路径跑通图像压缩实时处理本小节提供一条从零到上板验证的最短路径,预期在4小时内完成环境搭建、工程建立、综合实现并观察…
二牛学FPGA二牛学FPGA
技术分享
1个月前
0
0
38
0
评论表单游客 您好,欢迎参与讨论。
加载中…
评论列表
总数:10