[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

本文至此結束.

本人才疏學淺,文章或有紕漏,如果你有疑問或者不同的見解,歡迎在評論區留言,一起討論並改進本文.

本文版權歸作者和博客園共有,僅供參考學習使用,轉載請注明出處.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM