[FPGA]Verilog实现8位串并转换器HC595

想说的话...

这次的主角IC:HC595,稍稍有些难分析,本想要直接实现其内部电路的,但是无奈逻辑关系有些复杂,于是便只是实现了该IC的功能,没有点对点的复原,但于实际FPGA应用应是没问题的.

先介绍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.13
*功能:通过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 reg[7:0]Qp//Parallel data output
,output reg Qs//Serial data output
);
reg[7:0]sft=8'b0;//Shift register
always@(posedge SRCLK)
    if(_SRCLR)
        sft<=8'b0;
    else begin
        sft[0]<=SER;
        sft<=sft<<1'b1;
    end
always@(posedge RCLK)
    if(_OE)begin
        Qp<=8'bzzzz_zzzz;//Qs won't be affected by the _OE
    end
    else begin
        Qp<=sft;
        Qs<=sft[7];
    end
endmodule

本文至此结束.

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

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

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

猜你喜欢

转载自www.cnblogs.com/Clouds42/p/11853716.html