原创 Verilog学习笔记10- 综合练习-基于SF-EP1V2的SMG接口设计-SMG接口

2010-5-19 11:23 1737 15 16 分类: FPGA/CPLD

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


不要怀疑,这一章实验是最后的步骤了。经前面几章的式样,我们已经完成各个模块的创建和组织。


这一章,我们要它们结合起来(“SMG4位控制器”和“SMG加码器”)。


 


点击看大图



 


这一章的实验,主要是创建一个顶层模块,用来组合“SMG4位控制器”和“SMG加码器”。



项目导航操作:


点击看大图


 


 


Verilog 代码:



1.module SMG_Interface


2.(


3. CLK, RST,


4. Data_In,


5. SDO,SCL,STCP


6.);


7.


8.  input CLK;


9.  input RST;


10. input [25:0]Data_In;


11.


12. output SDO;


13. output SCL;


14. output STCP;


15.


16. /************************************/


17. //Module for Number_Module


18.


19. wire [7:0]Thousand;


20. wire [7:0]Hundred;


21. wire [7:0]Ten;


22. wire [7:0]One;


23.


24. smg_encoder U1


25. (


26.    .CLK( CLK ),


27.    .RST( RST ),


28.    .Data_In( Data_In ),   //U1 input


29.    .Thousand_Out( Thousand ), //U1 output


30.    .Hundred_Out( Hundred ),   //U1 output


31.    .Ten_Out( Ten ), //U1 output


32.    .One_Out( One )  //U1 output


33. );


34.


35. /**********************************/


36. //Module for SMG_Controller


37.


38. smg_controller U2


39. (


40.    .RST( RST ), 


41.    .CLK( CLK ), 


42.    .Thousand( Thousand ), //U1 drive U2


43.    .Hundred( Hundred ),   //U1 drive U2


44.    .Ten( Ten ),  //U1 drive U2


45.    .One( One ),  //U1 drive U2


46.    .SDO( SDO ),  //output to global


47.    .SCL( SCL ),  //output to global


48.    .STCP( STCP ) //output to global


49. );


50.


51.endmodule



故之前“4SMG控制器”的设计是个体的,为了和“SMG加码器”有效的组织起来,如今需要一点修改。






1.module smg_controller


2.(


3. CLK, RST,


4. Thousand, Hundred, Ten, One,


5. SCL, SDO, STCP


6.);


7.


8.  input CLK;


9.  input RST;


10.


11. input [7:0]Thousand;


12. input [7:0]Hundred;


13. input [7:0]Ten;


14. input [7:0]One;


15.


16. output SCL, SDO, STCP;


17.


18. /*****************************************/


19.


20. //SMG code


21. parameter _0 = 7'h3f,  


22.           _1 = 7'h06,


23.           _2 = 7'h5b,


24.           _3 = 7'h4f,


25.           _4 = 7'h66;


26.


27. //Row scan code


28. parameter _R1 = 8'b1111_0111, 


29.           _R2 = 8'b1111_1011,


30.           _R3 = 8'b1111_1101, 


31.           _R4 = 8'b1111_1110;


32.   


33. /*****************************************/


34.


35. //state mechine parameter


36. parameter R1 = 4'd1, R2 = 4'd2, R3 = 4'd3, R4 = 4'd4;


37.


38. /*****************************************/


39.


40. reg [7:0]rSMG;


41. reg [7:0]rRow;


42. reg [3:0]Current;


43. reg [3:0]Next;


44.


45. always @ ( posedge CLK or negedge RST )


46.    if( !RST )


47.       begin


48.          Current <= R1;


49.       end


50.    else


51.       Current <= Next;


52.


53. always @ ( posedge CLK or negedge RST )


54.    if( !RST )


55.       begin


56.          Next <= R1;


57.          rSMG <= 8'd0;


58.          rRow <= 8'd0;


59.       end


60.    else


61.       case ( Current )


62.


63.          R1 :  //scan row1


64.          begin 


65.             rSMG <= One; rRow <=_R1; 


66.             //each active low of STCP, end of one row scaning.


67.             if( !STCP ) Next <= R2;  


68.             else Next <= R1;


69.          end


70.


71.          R2 : //scan row2


72.          begin 


73.             rSMG <= Ten; rRow <=_R2; 


74.             if( !STCP ) Next <= R3;


75.             else Next <= R2;


76.          end


77.


78.          R3 : //scan row3


79.          begin 


80.             rSMG <= Hundred; rRow <=_R3; 


81.             if( !STCP ) Next <= R4;


82.             else Next <= R3;


83.          end


84.


85.          R4 : //scan row4


86.          begin 


87.             rSMG <= Thousand; rRow <=_R4; 


88.             if( !STCP ) Next <= R1;


89.             else Next <= R4;


90.          end


91.


92.       endcase


93.


94. /************************************************/


95.


96. wire Done_Sig;


97. wire Send_Sig;


98. wire [7:0]DI;


99.


100. //construct module 


101.


102. spi_controller u1


103. (


104.    .SMG_Code( rSMG ), // in - link in to u1


105.    .Row_Code( rRow ), // in - link in to u1


106.    .CLK( CLK ),    // in - global link in


107.    .RST( RST ),    // in - global link in


108.    .STCP( STCP ),  // out - global link out


109.    .Done_Sig( Done_Sig ), // in - u2 link to u1


110.    .Send_Sig( Send_Sig ), // out - u1 link to u2


111.    .DI( DI )              // out - u1 link to u2


112. );


113.


114. spi_module u2


115. (


116.    .CLK( CLK ), // in - global link in


117.    .RST( RST ), // in - global link in


118.    .Done_Sig( Done_Sig ), // out - u2 link to u1


119.    .Send_Sig( Send_Sig ), // in - u1 link to u2


120.    .DI( DI ),    // in - u1 link to u2


121.    .SDO( SDO ), //global link out


122.    .SCL( SCL )  //global link out


123. );


124.


125.


126.endmodule



 


1. 从第4行可以看到,多出4个输入口“Thousand”,“Hundred”,“Ten”,“One”。然后在第11~14行声明。


 


2. 65行,73行,80行,87行“rSMG”的右操作数被修改了。


 


仿真:


Testbench代码:



1.`timescale 1 ns/ 1 ns


2.module SMG_Interface_vlg_tst();


3.


4.  reg CLK;


5.  reg [25:0] Data_In;


6.  reg RST;


7.                                          


8.  wire SCL;


9.  wire SDO;


10. wire STCP;


11.


12. SMG_Interface i1 


13. (


14.    .CLK(CLK),


15.    .Data_In(Data_In),


16.    .RST(RST),


17.    .SCL(SCL),


18.    .SDO(SDO),


19.    .STCP(STCP)


20. );


21.


22. initial     


23. begin  RST = 0; #100; RST = 1; end


24.


25. initial


26.    begin CLK = 0; forever #10 CLK = ~CLK; end


27.


28. initial


29.    begin Data_In = 26'd4321; end


30.                                              


31.endmodule



 


仿真载图:


 


点击看大图



 


 


注意SDO的输出,第一个16BIT是“数字4”的数码管码和“右边起第一个”位选码。


第二个16BIT是“数字3”的数码管码和“右边起第二个”位选码。


第三个16BIT是“数字2”的数码管码和“右边起第三个”位选码。


第四个16BIT是“数字1”的数码管码和“右边起第四个”位选码。




m( 囧 )m 对不起,本章笔记没有“问题和答案”和“仿真”。


 

源码:


http://a.imagehost.org/download/0268/08-SMG_Interface

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1373959 2010-5-19 22:34

nice
相关推荐阅读
用户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
15
关闭 站长推荐上一条 /3 下一条