版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二十一:SDRAM 模块 页读写 未进入之前,让我们先来谈谈一些重要的体外话。整合篇之际,笔者曾经比拟Verilog 如何模仿 for 循环,我们知道 for 循环是顺序语言的产物,如果 Verilog 要实现属于的 for 循环,那么它要考虑的东西除了步骤以外,还有非常关键的时钟。代码 21.1代码 2.11 有三段经典的循环操作,即 for 循环,while 循环,还有 do . while 循环。如果三个循环互相交流的话,谁又是谁的朋友呢?为了解决这个问题,我们必须先建立交友标准,即先执行后,还是先后执行? 如此一来,我们可以百分百确信 for 循后执行的类型。反之 do . whi
2、le 循环环与 while 循环才是好朋友,因为两者则是先执行后的类型。为了验证上述的接着,我们试着解剖一下种循环的执行过程 .for 循环:清零 ii 为 0, i 为 1, i 为 2, i 为 3, i 为 4,i 是否小于 4,如是执行操作 A 第 0 次,递增 i 为 1; i 是否小于 4,如是执行操作 A 第 1 次,递增 i 为 2; i 是否小于 4,如是执行操作 A 第 2 次,递增 i 为 3; i 是否小于 4,如是执行操作 A 第 3 次,递增 i 为 4; i 是否小于 4,不是结束循环。while 循环:清零 i; i 为 0, i 为 1, i 为 2, i 为
3、 3, i 为 4,i 是否小于 4,如是执行操作 A 第 0 次,递增 i 为 1; i 是否小于 4,如是执行操作 A 第 1 次,递增 i 为 2; i 是否小于 4,如是执行操作 A 第 2 次,递增 i 为 3; i 是否小于 4,如是执行操作 A 第 3 次,递增 i 为 4; i 是否小于 4,不是结束循环。do . while 循环:for( i=0; i<4; i+ ) 操作 A;i = 0;while ( i<4 ) 操作 A;i+;i = 0;do 操作 A; i+; while(i = 3)清零 i;i 为 0,执行操作 A 第 0 次,i 递增为 1, i
4、 为 1,执行操作 A 第 1 次,i 递增为 2, i 为 2,执行操作 A 第 2 次,i 递增为 3, i 为 3,执行操作 A 第 3 次,i 递增为 4,i 是否小于 4,如是继续; i 是否小于 4,如是继续; i 是否小于 4,如是继续;i 是否小于 4,不是则结束循环;读者可能会很奇怪,执行与的次序究竟有什么好困惑?作为一只小气鬼,笔者会非常执著小细节。Verilog 是并行性质的语言,执行与有可能同时执行,也有可能并非同时执行 . 根据直觉,笔者相信 Verilog 的循环操作更加适合先执行后后执行。,而不是先代码 21.1如代码 21.1 所示,第 67 行表示步骤 0 保
5、持 4 个时钟,其中 C1 为 0isEn,C1 为4-2 的拉低 isEn;代码 21.1 告诉我们,执行与是同时进行,从解读代码的顺序来看,笔者更加倾向“先执行后”这种结构性图 21.1 代码 21.1 的时序图。图 21.1 是代码 21.1 所描述的时序图,其中 isEn是否完全根据 C1 的计数。T0 之前也是复位的状态,C1 为 0。T0 之际,C1 为 0(过去值)isEn,C1 为 2(过去值)拉低 isEn。1.0:2.begin isEn <= 1b1; i <= i + 1b1; end 3.1:4.begin isEn <= 1b0; i <=
6、i + 1b1; end1.0:2.begin3.if( C1 = 0 ) isEn <= 1b1;4.else if( C1 = 4-2 ) isEn <= 1b0; 5.6.if( C1 = 4 -1 ) begin C1 <= 4d0; i <= i + 1b1; end 7.else C1 <= C1 + 1b1;8.end代码 21.2同样的结构性甚至可以衍生至不同的操作,如代码 21.2 所示。步骤 0isEn,步骤 1拉低 isEn,步骤 2生四个高脉冲。如果步骤 02 来回重复,isEn 一共4 次,或者说 isEn 产图 21.2 代码 21.2
7、 的理想时序图。图 21.2 是代码 21.2 所产生的时序图。只要稍微比较图 21.1 与图 21.2,我们会发现两者之间都有相似的“结构性”,因为两者都是倾向“先执行后”。代码 21.3再举例而言,如代码 21.3 所示,步骤 0 执行功能 0,步骤 1 执行功能 1,步骤 2 用来判断循环次数。步骤 02 之间会来回重复,直至功能 0 与 1 都执行四次,这种感觉好比代码 21.4。1.int main() 2.3.for( int i = 0; i < 4; i + ) 4.5. Function0();6. Function1();7.8.return -1;1.0:2. if
8、( Done ) begin isCall0 <= 1b0; i <= i + 1b1; end3. else begin isCall0 <= 1b1; end 4.1:5. if( Done ) begin isCall1 <= 1b0; i <= i + 1b1; end6. else begin isCall1 <= 1b1; end 7.2:8.if( C1 = 4 -1 ) begin C1 <= 4d0; i <= i + 1b1; end9.else begin C1 <= C1 + 1b1; i <= 4d0; en
9、d5.2:6.if( C1 = 4 -1 ) begin C1 <= 4d0; i <= i + 1b1; end7.else begin C1 <= C1 + 1b1; i <= 4d0; end代码 21.4不过代码 21.121.3 都有相似的结构性,即执行后。笔者作为热爱结构的男人,笔者会尝尽一切挖掘结构的可能性。此外,这种先执行后的模仿对象,笔者称为伪循环(Fake Iteration)。说完题外话,接下来让我们进入本实验的。页读写之所以分为与,那是因为过多的数据吞吐量导致读写变成非常麻烦。天真的朋友可能会认为,如果 Burst Length 为 4,那么数据
10、位宽就是 4 * 16bit。再如果 Burst Length 为 512,那么数据位宽就是 512 * 16 bit。理论上,这样说是没错,不过那样做会FPGA 的嘴巴。为此,读写必须加入缓冲机制。此刻,实验十五所学过的知识(同步 FIFO)就派上用场了。图 21.3 SDRAM 基础模块的建模图。加入 FIFO 储存模块的SDRAM 基础模块,大致上如图 21.3 所示。为了简化连线,笔者稍微加大 FIFO 的深度,对此 FIFO 有没有反馈状态都没有问题。还没有进入建模之前, 让笔者先来解释一下,页读写与 FIFO 之间,究竟有什么细节需要注意。9.页写操作(请求 FIFO):图 21.
11、4 页写操作的理想时序图。图 21.4 是也写操作的理想时序图,相较实验二十的页写时序,实验二十一的页写时序夹杂了 FIFO 储存模块,其中 isEn0是 SDRAM 功能模块向 FIFO 的读请求。时序的大致过程如下:l T1,发送 ACT 命令,BANK 地址与行地址;l T1 半周期,SDRAMl T2,满足TRCD;l T3,isEn0;l T4,发送 WR 命令,BANK 地址与列地址,FIFO 发送第 0 数据,;l T4 半周期,SDRAMl T5,FIFO 发送第 1511 数据,C1 为 510 拉低 isEn0,C1 为 511 发送 BSTP 命令。图 22.4 基本上已
12、经表达非常清楚,为使 FIFO 可以同步发送数据,因为 SDRAM 功能模块必须提前一个时钟isEn0,即 T3isEn0。此外,为了不使 FIFO 吐出过多的数据,C1 为 510 的时候便拉低 isEn1。C1 为 511 的时候则发送 BSTP 命令。对此,Verilog 则可以这样描述,结果如代码 21.5 所示:1. 1: / Send Actived with Bank and Row address2. begin rCMD <= _ACT; rBA <= iAddr23:22; rA <= iAddr21:9; i <= i + 1'b1; en
13、d 3.4.2: / wait TRCD 20ns5.if( C1 = TRCD -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end6.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end代码 21.5如代码 21.5 所示,步骤 1 发送 Active 命令,步骤 2 满足 TRCD,步骤 3 提前读请求,即 isEn0。步骤 4 发送 Write 命令,还有写入第 0 数据。步骤 5 写入第 1511 数据,C1 为 510 的时候拉低 isEn0,C1 为 511 的时
14、候发送 Burst Stop 命令。页读操作(请求 FIFO):图 21.5 页读操作的理想时序图。图 21.5 还是笔者自定义的页写的时序图,相较实验二十,其中多了 FIFO的写请求isEn1,FIFO 的 iData,还有 C1 计数。一旦 CAS Latency 得到满足,SDRAM 便会开始读出数据。半个周期之后(T5)FPGA,并且isEn1,然后将数据转交 FIFO。T6 之际,512 个数据读写完毕,拉低 isEn1,然后发送 BSTP 命令。时序的大致过程如下:7.8.3:9.begin isEn0 <= 1'b1; i <= i + 1'b1; e
15、nd 10.11. 4: / Send Writed with row address,12. begin rCMD <= _WR; rBA <= iAddr23:22; rA <= 4'b0000, iAddr8:0 ; i <= i + 1'b1; end 13.14. 5: / continue write until end and send BSTP15. begin16.if( C1 = 512 -2 ) begin isEn0 <= 1'b0; end17.if( C1 = 512 -1 ) begin rCMD <=
16、_BSTP; C1 <= 14'd0; i <= i + 1'b1; end18. else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end19. endl T1,发送 ACT 命令,BANK 地址与行地址;l T1 半周期,SDRAMl T2,满足TRCD;l T3,发送 RD 命令,BANK 地址与列地址;l T3 半周期,SDRAMl T4,满足 CAS Latency。命令。l T5,isEn1,第 0511 数据,并且向 FIFO 的 iData 写入。l T6,拉低 isEn1,发送 BSTP 命令。
17、l T6 半周期,SDRAM。对此,Verilog 可以这样描述,结果如代码 21.6 所示:代码 21.6如代码 21.6 所示,步骤 4 满足 CL 以后,步骤 5 便isEn1,并且512 个数据。步骤 6 将 isEn1拉低,并且发送命令 BSTP。理解完毕以后,我们可以开始建模了。1. 1: / Send Actived with Bank and Row address2. begin rCMD <= _ACT; rBA <= iAddr23:22; rA <= iAddr21:9; i <= i + 1'b1; end 3.4.2: / wait
18、TRCD 20ns5.if( C1 = TRCD -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end6.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 7.8.3: / Sendd and column address9.begin rCMD <= _RD; rBA <= iAddr23:22; rA <= 4'b0000, iAddr8:0; i <= i + 1'b1; end 10.11. 4: / wait CL 3 cl
19、ock12. if( C1 = CL -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end13. else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 14.15. 5: /Data16. begin17.D1 <= S_DQ; isEn1 <= 1'b1;18.if( C1 = 512 -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end19. else begin C1 <= C1 + 1
20、'b1; end20. end 21.22. 6:23. begin isEn1 <= 1'b0; rCMD <= _BSTP; i <= i + 1'b1; endfifo_savemod.v图 21.6 FIFO 储存模块的建模图。图 21.6 是 FIFO 储存模块的建模图,为了简化设计,笔者不吃掉 FIFO 的输出,取而代之就是增加深度。虽然实验只有两只 FIFO 储存模块,方向也不一样,不过母体都是一样的东西。具体内容我们还是来看代码吧:以为相关的出入端。以为位宽为 16,深度为 1024 的 RAM,,然后将其初始化。15.reg 10:0
21、 C1 = 11'd0,C2 = 11'd0; / N+116.17. always ( posedge CLOCK or negedge RESET )18. if( !RESET )19. begin20.C1 <= 11'd0;21.end9.initial begin10.for( C1 = 0; C1 < 1024; C1 = C1 + 1'b1 )11. beginRAM C1 <= 16'd0; end12. end13.14.reg 15:0 RAM 1023:0;1.module fifo_savemod 2.(3.
22、input CLOCK, RESET,4. input 1:0iEn,5. input 15:0iData,6. output 15:0oData,7. output 1:0oTag 8.);以为内容。第 15 行写指针 C1,还有读指针 C2,位宽为 RAM 的深度+1。第 1726 行是 FIFO 的写操作,第 2837 行是 FIFO 的读操作,笔者将第 35 行注释掉。取而代之,笔者将 RAM 直接驱动 oData。好奇的朋友一定觉得疑惑?其实笔者是为了偷时钟,如果用 D1 驱动 oData,FIFO 的读数据(未来值)就会慢了半拍。所以,FIFO 与 SDRAM 功能模块之间会同步失
23、败。反之,RAM 直接驱动输出,好比组合逻辑直接驱动输出数据都是即时值。第 4041 行是写满状态还有读空状态的输出驱动。sdram_funcmod.v1.module sdram_funcmod 2.(3. input CLOCK,4. input RESET, 5.6. output S_CKE, S_NCS, S_NRAS, S_NCAS, S_NWE,7. output 1:0S_BA,8. output 12:0S_A,39.assign oData = RAM C29:0;40.assign oTag1 = ( C110C210 & C19:0 = C29:0 ); / F
24、ull Left41.assign oTag0 = ( C1 = C2 ); / Empty Right 42.43. endmodule22. else if( iEn1 )23. begin24.RAM C19:0 <= iData;25.C1 <= C1 + 1'b1;26.end27.28. always ( posedge CLOCK or negedge RESET )29. if( !RESET )30. begin31.C2 <= 11'd0;32. end33. else if( iEn0 )34. begin35./D1 <= RAM
25、 C29:0 ;36.C2 <= C2 + 1'b1;37.end38.以为相关的出入端。以为相关的常量。26.reg 4:0i;27.reg 13:0C1;28.reg 15:0D1;29. reg 4:0rCMD;30. reg 1:0rBA;31.reg 12:0rA;32. reg 1:0rDQM;33. reg 1:0isEn;34. reg isOut;35. reg isDone; 36.37. always ( posedge CLOCK or negedge RESET )38. if( !RESET )39. begin40.i <= 4'd0;
26、41.C1 <= 14'd0;42.D1 <= 16'd0;43.rCMD <= _NOP;44.rBA <= 2'b11;45.rA <= 13'h1fff;20. parameter T100US = 14'd13300;21. / tRP 20ns, tRRC 63ns, tRCD 20ns, tMRD 2CLK, tWR/tDPL 2CLK, CAS Latency 3CLK22.parameter TRP = 14'd3, TRRC = 14'd9, TMRD = 14'd2, TRCD =
27、 14'd3, TWR = 14'd2, CL = 14'd3; 23.parameter _INIT = 5'b01111, _NOP = 5'b10111, _ACT = 5'b10011, _RD = 5'b10101, _WR = 5'b10100,24._BSTP = 5'b10110, _PR = 5'b10010, _AR = 5'b10001, _LMR = 5'b10000;25.9. output 1:0S_DQM,10. inout 15:0S_DQ, 11.12.output
28、 1:0oEn, /1Write 013.input 23:0iAddr, / 23:22BA,21:9Row,8:0Column14. input 15:0iData,15. output 15:0oData, 16.17. input 3:0iCall,18. output oDone 19. );以为相关的寄存器与复位操作。51. else if( iCall3 )52. case( i )53.54. 0: / Set IO to output Tag55. begin isOut <= 1'b1; i <= i + 1'b1; end 56.57. 1:
29、/ Send Actived with Bank and Row address58. begin rCMD <= _ACT; rBA <= iAddr23:22; rA <= iAddr21:9; i <= i + 1'b1; end 59.60.2: / wait TRCD 20ns61.if( C1 = TRCD -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end62.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 63.64./*
30、/ 65.66.3:67.begin isEn0 <= 1'b1; i <= i + 1'b1; end 68.69.4: / Send Writed with row address70.begin rCMD <= _WR; rBA <= iAddr23:22; rA <= 4'b0000, iAddr8:0 ; i <= i + 1'b1; end71.72. 5: / continue write until end and send BSTP73. begin74.if( C1 = 512 -2 ) begin isE
31、n0 <= 1'b0; end75.if( C1 = 512 -1 ) begin rCMD <= _BSTP; C1 <= 14'd0; i <= i + 1'b1; end76. else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end77. end78.79./*/ 80.81. 6: / Generate done signal82. begin rCMD <= _NOP; isDone <= 1'b1; i <= i + 1'b1; end 83.8
32、4.7:85.begin isDone <= 1'b0; i <= 4'd0; end46.rDQM <= 2'b00;47.isEn <= 2'b00;48. isOut <= 1'b1;49. isDone <= 1'b0;50. end以为部分操作。以是写操作,步骤 3 提前请求 FIFO,步骤 4 写入第 0数据,步骤 5 写入第 1511 数据,然后发送 BSTP 命令。步骤 6 发送 NOP 命令之余, 也用来产生完成信号。88. else if( iCall2 )89. case( i )90.9
33、1.0:92.begin isOut <= 1'b0; D <= 16'd0; i <= i + 1'b1; end 93.94. 1: / Send Actived with Bank and Row address95. begin rCMD <= _ACT; rBA <= iAddr23:22; rA <= iAddr21:9; i <= i + 1'b1; end 96.97.2: / wait TRCD 20ns98.if( C1 = TRCD -1 ) begin C1 <= 14'd0; i
34、<= i + 1'b1; end99.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 100.101./*/ 102.103.3: / Sendd and column address104.begin rCMD <= _RD; rBA <= iAddr23:22; rA <= 4'b0000, iAddr8:0; i <= i + 1'b1; end105.106.4: / wait CL 3 clock107.if( C1 = CL -1 ) begin C1 <=
35、14'd0; i <= i + 1'b1; end108.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 109.110./*/ 111.112. 5: /Data113. begin114.D1 <= S_DQ; isEn1 <= 1'b1;115.if( C1 = 512 -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end116. else begin C1 <= C1 + 1'b1; end117. end1
36、18. 118.119./*/ 120.121.6:122.begin isEn1 <= 1'b0; rCMD <= _BSTP; i <= i + 1'b1; end 123.86.87.endcase以为部分操作。以是读操作。步骤 4 满足 CL 以后,步骤 5并且发送 512 个数据给 FIFO。步骤 6,拉低 isEn1然后发送 BSTP 命令。步骤 7 发送 NOP命令,然后产生完成信号。133. else if( iCall1 )134. case( i )135. 135.136. 0: / Send Precharged137. begin r
37、CMD <= _PR; i <= i + 1'b1; end 138.139.1: / wait TRP 20ns140.if( C1 = TRP -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end141.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 142.143. 2: / Send Auto Refreshd144. begin rCMD <= _AR; i <= i + 1'b1; end 145.146.3: / wa
38、it TRRC 63ns147.if( C1 = TRRC -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end148.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 149.150. 4: / Send Auto Refreshd151. begin rCMD <= _AR; i <= i + 1'b1; end 152.153.5: / wait TRRC 63ns154.if( C1 = TRRC -1 ) begin C1 <= 14
39、39;d0; i <= i + 1'b1; end155.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 156.157./*/ 158.159. 6: / Generate done signal160. begin isDone <= 1'b1; i <= i + 1'b1; end 161.124./*/ 125.126. 7: / Generate done signal127. begin rCMD <= _NOP; isDone <= 1'b1; i <
40、;= i + 1'b1; end 128.129.8:130.begin isDone <= 1'b0; i <= 4'd0; end 131.132.endcase以为部分操作。以是刷新操作。166. else if( iCall0 )167. case( i )168. 168.169. 0: / delay 100us170.if( C1 = T100US -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end171.else begin C1 <= C1 + 1'b1; end
41、172.173./*/ 174.175. 1: / Send Precharged176. begin rCMD <= _PR; rBA, rA <= 15'h3fff; i <= i + 1'b1; end 177.178.2: / wait TRP 20ns179.if( C1 = TRP -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end180.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 181.182. 3: / Send
42、Auto Refreshd183. begin rCMD <= _AR; i <= i + 1'b1; end 184.185.4: / wait TRRC 63ns186.if( C1 = TRRC -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end187.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 188.189. 5: / Send Auto Refreshd190. begin rCMD <= _AR; i <= i + 1&
43、#39;b1; end 191.192.6: / wait TRRC 63ns193.if( C1 = TRRC -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end194.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 195.196./*/ 197.198.7: / Send LMR Cmd. Burst& Write, 3'b010 mean CAS latecy = 3, Sequential, 1 burst length 199.begin r
44、CMD <= _LMR; rBA <= 2'b11; rA <= 3'd0, 1'b0, 2'd0, 3'b011, 1'b0, 3'b111 ; i <= i + 1'b1; end200.201.8: / Send 2 nop CLK for tMRD162.7:163.begin isDone <= 1'b0; i <= 4'd0; end 164.165.endcase以 置为为部分3b111。操作。以是初始化,注意步骤 7 的设置内容,Burst Length设以为相关
45、的输出驱动。注意,第 218 行表示FIFO 直接驱动S_DQ 的输出。sdram_ctrlmod.v该模块不曾修改,所以笔者就不用重复粘贴了。sdram_basemod.v215. assign S_CKE, S_NCS, S_NRAS, S_NCAS, S_NWE = rCMD;216. assign S_BA, S_A = rBA, rA ;217. assign S_DQM = rDQM;218. assign S_DQ = isOut ? iData : 16'hzzzz;219. assign oEn = isEn;220. assign oDone = isDone;22
46、1. assign oData = D1; 222.223. endmodule202.if( C1 = TMRD -1 ) begin C1 <= 14'd0; i <= i + 1'b1; end203.else begin rCMD <= _NOP; C1 <= C1 + 1'b1; end 204.205./*/ 206.207. 9: / Generate done signal208. begin isDone <= 1'b1; i <= i + 1'b1; end 209.210.10:211.begin
47、 isDone <= 1'b0; i <= 4'd0; end 212.213.endcase214.图 21.7 SDRAM 基础模块的建模图。图 21.7 是 SDRAM 基础模块的建模图,其中模块只是负责上级调用,还有 SDRAM功能模块的调用而已。SDRAM 功能模块的读出操作经由 FIFO 储存模块缓冲,然后再由上级读写数据。Addr 地址信号也是上级调用。注意,由于 SDRAM 基础模块的连线部署稍微复杂一点,为此图 21.7 稍微格式。1.module sdram_basemod 2.(3. input CLOCK,4. input RESET, 5.
48、6. output S_CKE, S_NCS, S_NRAS, S_NCAS, S_NWE,7. output 1:0S_BA,8. output 12:0S_A,9. output 1:0S_DQM,10. inout 15:0S_DQ, 11.12. input 1:0iEn,13. input 23:0iAddr,14. input 15:0iData,15. output 15:0oData,16. output 1:0oTag, 17.18. input 1:0iCall,19. output 1:0oDone 20. );0.
49、1.62.63.wire 3:0CallU1; / 3Write, 2, 1A.Ref, 0Initialsdram_ctrlmod U1 (.CLOCK( CLOCK ),.RESET( RESET ),.iCall( iCall ),.oDone( oDone ),.oCall( CallU1 ),.iDone( DoneU4 )/ < top ,1Write 0/ > top ,1Write 0/
50、 > U4/ < U4);wire 15:0DataU2;fifo_savemod U2 (.CLOCK( CLOCK ),.RESET( RESET ),.iEn( iEn1,EnU40 ),.iData( iData ),.oData( DataU2 ),.oTag() /);/ < top/ < top/ > topfifo_savemod U3 (.CLOCK( CLOCK ),.RESET( RESET ),.iEn( EnU41,iEn0 ),.iData( DataU4 ),.oData( oData ),.oTag();/ < U4 &
51、; top/ < U4/ > top/wire DoneU4; wire 1:0EnU4;wire 15:0DataU4;sdram_funcmod U4 (.CLOCK( CLOCK ),.RESET( RESET ),该组合模块的连线部署完全遵照图 21.7。读者办吧。sdram_demo.v图 21.8 实验二十一的建模图。图 21.8 是实验二十一的建模图,内容上的改变也只有En 多出来而已,不过操作64. .S_CKE( S_CKE ),/ > top65. .S_NCS( S_NCS ),/ > top66. .S_NRAS( S_NRAS ),/ >
52、 top67. .S_NCAS( S_NCAS ),/ > top68. .S_NWE( S_NWE ),/ > top69. .S_BA( S_BA ),/ > top70.S_A( S_A ),/ > top71.S_DQM( S_DQM ),/ > top72.S_DQ( S_DQ ),/ <> top73.oEn( EnU4 ),/ > U2 && U374. .iAddr( iAddr ),/ < top75. .iData( DataU2 ),/ < U276. .oData( DataU4 ),/ >
53、; top77. .iCall( CallU1 ),/ < U178. .oDone( DoneU4 )/ > U1 79.);80.81. endmodule的内容却有很大的改变。具体内容让我们来看代码吧。以为相关的出入端。以为 PLL 模块的实例化。22. wire 1:0DoneU2;23. wire 15:0DataU2;24. wire 1:0TagU2; 25.26.sdram_basemod U227.(28. .CLOCK( CLOCK1 ),29. .RESET( RESET ),30. .S_CKE( S_CKE ),31. .S_NCS( S_NCS ),32
54、. .S_NRAS( S_NRAS ),33. .S_NCAS( S_NCAS ),34. .S_NWE( S_NWE ),35.S_A( S_A ),13.wire CLOCK1,CLOCK2; 14.15.pll_module U116.(17. .inclk0 ( CLOCK ), / 50Mhz18. .c0 ( CLOCK1 ), / 133Mhz -210 degree phase19.c1 ( CLOCK2 )/ 133Mhz 20.);21.1.module sdram_demo 2.(3. input CLOCK,4. input RESET,5. output S_CLK,
55、6. output S_CKE, S_NCS, S_NRAS, S_NCAS, S_NWE,7. output 12:0S_A,8. output 1:0S_BA,9. output 1:0S_DQM,10. inout 15:0S_DQ,11. output TXD 12. );以为 SDRAM 基础模块的实例化。以为相关的寄存器与复位操作。第 48 行是波特率为 115200 与伪函数的48.parameter B115K2 = 11'd1157, TXFUNC = 6'd16; 49.50.reg 5:0i,Go;51.reg 10:0C1,C2;52.reg 14:0D1;53.reg 15:0D2,D3;54.reg 10:0T;55. reg 1:0isCall,isEn;56. reg rTXD; 57.58. always ( posedge CLOCK1 or negedge RESET )59. if( !RESET )60. begin61.i <= 6'd0;62.Go <= 6'd0;63.C1 <= 11'd0;64.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水生物检疫检验员复试水平考核试卷含答案
- 烯烃转换装置操作工安全规程强化考核试卷含答案
- 矿用润滑油车司机QC管理强化考核试卷含答案
- 压力锅制作工岗前合规考核试卷含答案
- 机制砂石骨料生产工岗位安全管理考核试卷含答案
- 禽兽类动物标本采集制作工岗中质量能力考核试卷含答案
- 机制地毯挡车工岗位知识评优考核试卷含答案
- 钽铌分离工岗前知识竞赛考核试卷含答案
- 催化重整装置操作工道德竞赛考核试卷含答案
- 屋面防水施工工艺流程图详解方案
- T∕JSCTS 71-2025 轨道交通自动扶梯健康监测技术规范
- 人工挖孔桩有限空间作业专项施工方案
- 2026年政府报告考试题及答案
- 初中八年级历史《伟大的历史转折:十一届三中全会与改革开放的开启》教学设计
- GB/T 470-2026锌锭
- 雨课堂学堂在线学堂云《中共中央延安十三年史(陕西师范)》单元测试考核答案
- 2026年中科创达试工程师岗位笔目真题(考试直接用)附答案详解
- 【英语】高一英语完形填空夹叙夹议解题技巧及经典题型及练习题(含答案)
- 气管切开吸痰护理宣教
- 2025国庆节中秋节双节特色实践作业(三)
- 2025年江苏省职业技能等级认定考试(政务服务办事员·四级)历年参考题库含答案详解(5卷)
评论
0/150
提交评论