FPGA(4)移位寄存器的编写方法(HC595驱动)

本文介绍了FPGA中移位寄存器的编写方法,特别是通过HC595芯片进行驱动的相关原理。
摘要由CSDN通过智能技术生成
module  seg_HC595_diver(sys_clk,sys_rst,seg,sel,stcp_reg,shcp_pose,ds,oe);
    
    input   sys_clk,sys_rst;
    input   wire    [7:0]   seg;//段选
    input   wire    [5:0]   sel;//位选
    
    output  stcp_reg,shcp_pose,ds,oe;
    
    reg     shcp_pose;//表示寄存器移位驱动时钟
    reg     stcp_reg;//存储器驱动,表示把移好位数据存到芯片
    reg     ds;//串行数据(这里6分频传送一个码元,共传输14个)
    reg     oe;//输出使能低电平,表示芯片输出(这里默认低电平)
    
    reg     [2:0]    cnt6;
    reg     [3:0]    data_bit;//数据当时所占的数组位置
    wire    [13:0]   data;   //暂时保存串行数据
    
//由于连接芯片问题,导致段数据要倒着输入
assign  data={seg[0],seg[1],seg[2],seg[3],seg[4],seg[5],seg[6],seg[7],sel};

//时钟6分频
always@(posedge sys_clk or negedge  sys_rst)
begin
    if(!sys_rst)
        cnt6<=3'd0;
    else    if(cnt6==3'd5)
        cnt6<=3'd0;
    else
        cnt6<=cnt6+1'b1;
end

//移位寄存器驱动时钟6分频(在4是跳变)
always@(posedge sys_clk or negedge  sys_rst)
begin
    if(!sys_rst)
        shcp_pose<=1'b0;
    else    if(cnt6==3'd4)
        shcp_pose<=1'b1;
    else
        shcp_pose<=1'b0;
end

//用于移位(一个周期也就是6个计数类,在1时改变值)
always@(posedge sys_clk or negedge  sys_rst)
begin
    if(!sys_rst)
        data_bit<=4'd0;
    else    if((cnt6==3'd1)&&(data_bit==4'd13))
        data_bit<=4'd0;
    else    if(cnt6==3'd1)
        data_bit<=data_bit+1'b1;
    else
        data_bit<=data_bit;
end

//数据输出,也就是在6个数内,完成一个数据输入
always@(posedge sys_clk or negedge  sys_rst)
begin
    if(!sys_rst)
       ds<=1'b0;
    else    if(cnt6==3'd2)
        ds<=data[data_bit];
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦灵-影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值