原创 Verilog学习笔记4- 综合练习-基于SF-EP1V2的SMG接口设计-SPI控制器

2010-5-17 16:52 2455 6 7 分类: FPGA/CPLD

SPI控制器:


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

SPI控制模块是专门针对SF-EP1V2的显示电路设计的。更具原理 SF-EP1V2 的显示电路是由274HC595来驱动。两个74HC595芯片串联变成16位,高八位为“数码管码”,底八位(BIT1~BIT3有效而已)是位选码。根据上一章的实验,我们设计的SPI发送模块,是以1字节来发送。所以呢,SPI控制器的工作是:


 

1. 控制发送数码管码。


2. 控制发送位选码。


3. 发送锁存信号(STCP)。


 


点击看大图



 

SPI控制模块示意图如上。



Verilog 代码:


1.module spi_controller


2.(


3. RST, CLK, Send_Sig, Done_Sig, DI, STCP


4.);


5.


6.  input RST;


7.  input CLK;


8.  input Done_Sig;


9.  output [7:0]DI;


10. output Send_Sig;


11. output STCP;


12.


13. /*****************************************/


14.


15. parameter  _0 = 7'h3f, _1 = 7'h06, _2 = 7'h5b, _3 = 7'h4f, _4 = 7'h66;


16.


17. parameter  _R1 = 8'b1111_0111,  _R2 = 8'b1111_1011,


18.            _R3 = 8'b1111_1101,  _R4 = 8'b1111_1110;


19.


20. /*****************************************/


21.


22. parameter D1 = 4'd1, R1 = 4'd2, STa = 4'd3, STb = 4'd4;


23.


24. /*****************************************/


25. reg [3:0]Current;


26. reg [3:0]Next;


27. reg [7:0]rData;


28. reg rSTCP;


29. reg isSend;


30.


31. /*****************************************/


32.


33. always @ ( posedge CLK or negedge RST )


34.    if( !RST )


35.       Current <= D1;


36.    else


37.       Current <= Next;


38.


39. always @ ( posedge CLK or negedge RST )


40.    if( !RST )


41.       begin


42.          Next <= D1;


43.          isSend <= 0;


44.          rData <= 8'd0;


45.          rSTCP <= 1'b1;


46.       end


47.    else


48.       case ( Current )


49.


50.          D1 : 


51.          begin


52.             isSend <= 1; rData <= _4;


53.             if( Done_Sig ) begin isSend <= 1'b0; Next <= R1; end


54.             else Next <= D1;


55.          end


56.


57.          R1 :


58.          begin


59.             isSend <= 1; rData <= _R1;


60.             if( Done_Sig ) begin isSend <= 1'b0; Next <= STa; end


61.             else Next <= R1;


62.          end


63.


64.          STa : 


65.          begin


66.             rSTCP <= 1'b0;


67.             Next <= STb; 


68.          end


69.


70.          STb : 


71.          begin


72.             rSTCP <= 1'b1;


73.             Next <= D1; 


74.          end


75.


76.       endcase


77.


78. assign STCP = rSTCP;


79. assign DI = rData;


80. assign Send_Sig = isSend;


81.


82. /*****************************************/


83.


84.endmodule



 


1. 1行到11行是大家熟悉的声明了,这里就不多做介绍了。


 


2. 15行是“数码管码”的常量,而17~18行是“为选码”的常量。


 


3. 31行到82行,是状态机。


 


  状态机的第一步是发送“数码管码”和置一“isSend”寄存器(52行)。然后判断是否已


  经发送结束, 如果发送一个字节已经结束,不使能“isSend”寄存器,然后进入下一个状


  态(53行)“R1”,否则的话就一直逗留在同一个状态“D1”(54行)。



  


  状态机的第二步是发送“位选码”和置一“isSend”寄存器(59行)。然后判断是否已经


  发送结束?如果发送一个字节已经结束,不使能“isSend”寄存器,然后进入下一个状态


 (60行)“STa”,否则的话就一直逗留在同一个状态“R1”(61行)。



  


 状态机的第三步是拉低“rSTCP”寄存器(64行)。然后进入下一步状态(67)“STb”。



  


  状态机的第四步是拉高“rSTCP”寄存器(70行)。然后进入下一步状态(73)“D1”。


 


4. 当状态机进行从第三步到第四步的时候,就会产生一个锁存信号。所以,rSTCP的初始


   值必须为1


 


5. 如果一直重复着状态机,就会产生扫描的效果。


 


6. 我们来谈论一下有关“rSTCP”寄存器的初始化。根据74HC595芯片的时序,STCP信号


   时上升沿有效, 所以,“rSTCP”寄存器的初始值必须为145行)。


 




这一章不能仿真 m( _ _ )m 


 


问题与答案:


 

1: 看了第一章实验和第二章实验,如“rSCL”和“rSTCP”寄存器。为什么初始化为1


答:你尝试想象一下,“rSCL”和“rSTCP”寄存器如果不初始化为逻辑1吗,那么设计会


    大大的猥琐起来。


 


2:为什么不能这一章不能仿真?


答:啊!别急,下一章会有的。


 


总结:


 

这一章比较容易,也比较简单。所以没有什么好说的。


rar


PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1373959 2010-5-18 21:29

excellent
相关推荐阅读
用户1609127 2011-10-22 18:26
Verilog的私私细语 - 时钟化和信号的长度
目录 第2章 时钟化和信号的长度 2.01 一个时钟一块数据的概念 2.02 信号时钟化 2.03 深入了解模块的沟通 2.04 电平检测模块的整合(即时事件在时序上的不和谐)      实验八:电...
用户1609127 2011-09-08 12:47
瞎搞Time Quest 和无责任的笔记 第二章
最近整合篇的第二章的构思和灵感都累积不少了,应该是时候开工了。恰好手头上还有一本笔记还没有写完,就是这本瞎搞TimeQuest的第二章。目录笔者也懒得贴了,看过第一章的同学多少也会猜到第二章的内容是什...
用户1609127 2011-08-29 18:21
瞎搞Time Quest 和无责任的笔记 第一章
哎呀 ... 潜水了都有一段时间了,这是最近研究的成果和目标。 话说TimeQuest这个东西真的很搞怪呀,做得笔者不得不从其他的方向去研究它。 好了还是切入正题,TimeQuest用作静态时序的工具...
用户1609127 2011-07-06 17:43
Verilog的私私细语 - 整合的概念
目录         02  第1章  整合的概念          1.01  源码上的整合                   实验一:字面上的整合          1.02  时钟和步骤的定...
用户1609127 2011-06-22 10:18
VerilogHDL那些事儿 - 建模篇v4 + 时序篇v1
VerilogHDL那些事儿 - 建模篇v4 ====== v4 ====== 主要是修改了大量用法上的BUG和极限的精简内容 https://docs.google.com/leaf?id=0B...
用户1609127 2011-06-10 13:19
Verilog HDL的礼物 - Verilog HDL扫盲文
目录 02第0章 Verilog HDL语言扫盲文 030.01 各种的HDL语言 030.02 HDL语言的层次 03 0.03 RTL级和组合逻辑级 040.04 Verilog HDL语言真的那...
EE直播间
更多
我要评论
1
6
关闭 站长推荐上一条 /3 下一条