zoukankan      html  css  js  c++  java
  • [FPGA]Verilog实现8位串并转换器HC595

    代码已经更新,新的代码按照电路编写,忠实于原电路的逻辑,已注于文末(11/16)
    修复并行输出数据出错的bug,代码已更新(11/18)

    想说的话...

    这次的主角IC:HC595.

    先介绍IC的功能,再分析代码,最后给出完整例程,请酌情阅读.

    正文

    IC介绍_HC595

    The HC595 devices contain an 8-bit, serial-in, parallel-out shift register that feeds an 8-bit D-type storage register. The storage register has parallel 3-state outputs. Separate clocks are provided for both the shift and storage register. The shift register has a direct overriding clear (SRCLR) input, serial (SER) input, and serial outputs for cascading. When the output-enable (OE) input is high, the outputs are in the high-impedance state.

    根据这段摘自HC595数据手册的简述可以大致了解其功能.

    实际使用时,内部工作过程为:

    SRCLK升沿,SER输入给第一位移位寄存器(Shift register),第二个SRCLK升沿到来,第一位移位寄存器的值移位给第二位移位寄存器,同时该时刻的SER输入给第一位移位寄存器,以此类推,直到八位移位寄存器均有数据后,QH'串行输出第八位移位寄存器的值(QH'是不受输出使能信号的控制的,一直都会输出第八位移位寄存器的值).另外,当RCLK升沿到来时,移位寄存器的值会被同时赋值给储存寄存器之中,QA~QH会并行输出储存寄存器中的值,当输出使能端为高电平时,并行输出为高阻态.

    SRCLR是移位寄存器清空信号端口,低电平有效,会将移位寄存器的值置零.

    电路连接图

    MYFa0U.png

    功能表

    MYFd7F.png

    逻辑图

    MYF0k4.png

    代码实现

    接下来使用Verilog实现该IC的逻辑功能,编程思想源于本文IC功能分析部分.

    /*
    *作者:方清欢
    *创建日期:2019.11.16
    *更新日期:2019.11.18(V2.1)
    *功能:通过Verilog实现HC595
    *备注:本代码针对内部电路进行代码重现
    */
    module HC595
    (input SER//Serial data input
    ,input SRCLK//Serial data input clock
    ,input RCLK//Storage clock, which may be different from the SRCLK
    ,input _SRCLR//Shift register data clear
    ,input _OE//Output-enable
    ,output[7:0]Qp//Parallel data output
    ,output Qs//Serial data output
    );
    reg[7:0]sft=8'b0;//Shift register
    reg[7:0]stg=8'b0;//Storage register
    always@(posedge SRCLK or negedge _SRCLR)
    if(!_SRCLR)
    	sft<=8'b0;
    else
    	sft<={sft[6:0],SER};
    always@(posedge RCLK)
    stg<=sft;
    assign Qs=sft[7];
    assign Qp=(_OE==1)?8'bzzzzzzzz:stg;
    endmodule
    

    本文至此结束.

    本人才疏学浅,文章或有纰漏,如果你有疑问或者不同的见解,欢迎在评论区留言,一起讨论并改进本文.

    本文版权归作者和博客园共有,仅供参考学习使用,转载请注明出处.

  • 相关阅读:
    怎样使用jlink一键烧录整个flash Hi3518 a c e Hi3515 Hi3512
    阅读zepto.js的core中的Core methods
    linux下执行strlwr函数出错:ld returned 1 exit status
    POJ 3286 How many 0&#39;s?
    As long as Binbin loves Sangsang
    docker 的安装
    浅析JAVA设计模式之工厂模式(一)
    怎样在屏幕上显示多个alv
    链表的应用:单元多项式的加法、减法、乘法
    Android 开发中 iBeacon的使用
  • 原文地址:https://www.cnblogs.com/Clouds42/p/11853716.html
Copyright © 2011-2022 走看看