[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是移位寄存器清空信号端口,低电平有效,会将移位寄存器的值置零.
电路连接图
功能表
逻辑图
代码实现
接下来使用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
本文至此结束.
本人才疏学浅,文章或有纰漏,如果你有疑问或者不同的见解,欢迎在评论区留言,一起讨论并改进本文.
本文版权归作者和博客园共有,仅供参考学习使用,转载请注明出处.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)