在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 13290|回复: 10

[转贴] 如何在DE2用硬件存取SDRAM(4 port)? (IC Design) (DE2)

[复制链接]
发表于 2010-9-5 21:18:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
(转载) 如何在DE2用硬件存取SDRAM(4 port)? (IC Design) (DE2)                                                                                                                                                                                                                                                                                                                       
Abstract
之前曾经讨论如何在DE2用硬件的Verilog存取SDRAM,当时所使用的SDRAM controller是2 port的,一个read一个write,对大部分情况而言是够用的,这次要讨论的是4 port的SDRAM controller, 2 read, 2 write。

Introduction
使用环境:Quartus II 7.2 SP1 + MegaCore IP 7.2 SP1 + DE2(Cyclone II EP2C35F627C6)

友晶的很多范例,用的都是DE2_CCD、DE2_CCD_detect、DE2_CCD_PIP、DE2_pong_demo、DE2_LCM_CCD....等用的都是Sdram_Control_4Port这个SDRAM controller,有2个write port与2个read port,优点是在一个clock下,可做2次的read和write。但这个4 port的SDRAM controller用法与之前2 port SDAM controller用法并不一样。

如同上一篇的范例,用switch当成2进位的输入,用七段显示器做16进位输出,但这次使用的是4 port的SDRAM controller。

Verilog / SDRAM_HR_HW.v
  1 /*
  2 (C) OOMusou 2008 http://oomusou.cnblogs.com
  3
  4 Filename    : SDRAM_HR_HW.v
  5 Compiler    : Quartus II 7.2 SP1
  6 Description : Demo how to use abstract base class simulate interface
  7 Release     : 04/25/2008 1.0
  8 */
  9 module SDRAM_HR_HW (
10   input         CLOCK_50,
11   input  [3:0]  KEY,
12   input  [17:0] SW,
13   output [17:0] LEDR,
14   output [6:0]  HEX0,
15                 HEX1,
16                 HEX2,
17                 HEX3,
18                 HEX4,
19                 HEX5,
20                 HEX6,
21                 HEX7,
22   //SDRAM side
23   output [11:0] DRAM_ADDR,
24   inout  [15:0] DRAM_DQ,
25   output        DRAM_BA_0,
26                 DRAM_BA_1,
27                 DRAM_RAS_N,
28                 DRAM_CAS_N,
29                 DRAM_CKE,
30                 DRAM_CLK,
31                 DRAM_WE_N,
32                 DRAM_CS_N,
33                 DRAM_LDQM,
34                 DRAM_UDQM
35 );
36
37 reg         read;             // read enable register
38 reg         write;            // write enable register
39 reg  [1:0]  state;            // FSM state register
40 reg  [15:0] data_in;          // data input register
41 wire [15:0] DATA_OUT;         // data output
42 reg  [15:0] data_out;         // data output register
43 wire        DELAY_RESET;      // delay for SDRAM controller load
44 wire        RESET_n = KEY[0]; // reset from KEY[0]
45
46 assign LEDR = SW;
47
48 Sdram_Control_4Port u0 (
49   // HOST Side
50   .REF_CLK(CLOCK_50),
51   .RESET_N(1'b1),
52   // FIFO Write Side 1
53   .WR1_DATA(data_in),
54   .WR1(write),
55   .WR1_ADDR(0),
56   .WR1_MAX_ADDR(640*512*2),
57   .WR1_LENGTH(9'h100),
58   .WR1_LOAD(!DELAY_RESET),
59   .WR1_CLK(CLOCK_50),
60   // FIFO Read Side 1
61   .RD1_DATA(DATA_OUT),
62   .RD1(read),
63   .RD1_ADDR(640*16),
64   .RD1_MAX_ADDR(640*496),
65   .RD1_LENGTH(9'h100),
66   .RD1_LOAD(!DELAY_RESET),
67   .RD1_CLK(CLOCK_50),
68   // SDRAM Side
69   .SA(DRAM_ADDR),
70   .BA({DRAM_BA_1,DRAM_BA_0}),
71   .CS_N(DRAM_CS_N),
72   .CKE(DRAM_CKE),
73   .RAS_N(DRAM_RAS_N),
74   .CAS_N(DRAM_CAS_N),
75   .WE_N(DRAM_WE_N),
76   .DQ(DRAM_DQ),
77   .DQM({DRAM_UDQM,DRAM_LDQM}),
78   .SDR_CLK(DRAM_CLK)
79 );
80
81 SEG7_LUT_8 u1 (
82   .oSEG0(HEX0),      // output SEG0
83   .oSEG1(HEX1),      // output SEG1
84   .oSEG2(HEX2),      // output SEG2
85   .oSEG3(HEX3),      // output SEG3
86   .oSEG4(HEX4),      // output SEG4
87   .oSEG5(HEX5),      // output SEG5
88   .oSEG6(HEX6),      // output SEG6
89   .oSEG7(HEX7),      // output SEG7
90   .iDIG(data_out),   // input data
91   .iWR(1'b1),        // write enable
92   .iCLK(CLOCK_50),   // clock
93   .iRESET_n(RESET_n)
94 );
95
96
97 // reset delay for WR1_LOAD & RD1_LOAD to clear FIFO
98 Reset_Delay    u2 (
99   .iCLK(CLOCK_50),
100   .iRST(KEY[0]),
101   .oRST(DELAY_RESET),
102 );
103
104 // state 0 : read switch & write SDRAM
105 // state 1 : read SDRAM & write to SEG7
106 always @(posedge CLOCK_50 or negedge RESET_n)
107 begin
108   if (!RESET_n) begin
109     read    <= 0; // read enable register
110     write   <= 0; // write enale register
111     state   <= 0; // FSM state register
112     data_in <= 0; // data input register
113     data_out <= 0; // data output register
114   end
115   else
116   begin
117     case (state)
118       // state 0 : read switch & write SDRAM
119       0: begin
120         read    <= 0;          // read diable
121         write   <= 1;          // write enable
122         data_in <= {SW[15:0]}; // write SDRAM data
123         state   <= 1;          // next state
124       end
125      
126       // state 2 : read SDRAM & write to SEG7
127       1: begin
128         read  <= 1;             // read enable
129         write <= 0;             // write disable
130         data_out <= DATA_OUT;   // read SDRAM data
131         state <= 0;             // next state
132       end
133     endcase
134   end
135 end
136
137 endmodule

109行
case (state)
  // state 0 : read switch & write SDRAM
  0: begin
    read    <= 0;          // read diable
    write   <= 1;          // write enable
    data_in <= {SW[15:0]}; // write SDRAM data
    state   <= 1;          // next state
  end
      
  // state 2 : read SDRAM & write to SEG7
  1: begin
    read  <= 1;             // read enable
    write <= 0;             // write disable
    data_out <= DATA_OUT;   // read SDRAM data
    state <= 0;             // next state
  end
endcase

2 port由于需要判断DONE,还需多一个clock,因此需要4个FSM,但4 port并不需要,所以只要2个FSM即可。当要写入SDRAM时,只需将read设为0,write设为1,将欲写入的数据传入data_in,最后进入下一个state即可。

同理,当要从SDRAM读出资料时,只需将read设为1,write设为0,从DATA_OUT读出数据,最后进入下一个state即可。

比较诡异的是97行
// reset delay for WR1_LOAD & RD1_LOAD to clear FIFO
Reset_Delay    u2 (
  .iCLK(CLOCK_50),
  .iRST(KEY[0]),
  .oRST(DELAY_RESET),
);

58行的WR1_LOAD()与66行的RD1_LOAD()是为了清空FIFO,若只传由KEY[0]所连结的RESET_n,将无法正常运作,必须做了Reset_Delay之后,再传入SDRAM controller。

sdram_hr_hw_4port.rar

136.97 KB, 下载次数: 135 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2010-9-6 12:53:00 | 显示全部楼层
谢谢分享
发表于 2013-4-14 16:22:30 | 显示全部楼层
很好的资料,看看了,不错
发表于 2014-12-18 09:50:34 | 显示全部楼层
谢谢分享
发表于 2015-2-8 02:11:12 | 显示全部楼层
感谢分享
发表于 2015-3-20 15:54:48 | 显示全部楼层
太感谢了,好东西
发表于 2016-3-17 23:56:16 | 显示全部楼层
回复 1# xunledelang


   正在寻找这个,十分感谢
发表于 2016-5-10 14:12:01 | 显示全部楼层
回复 1# xunledelang

aldskjfla;dsjf;ldsjkgaljsdgljfdsgnkfdshgkdsjhgfndsavkmhcxkhvkahfdsgkhsadigfjhdsaoi
发表于 2016-5-10 15:42:42 | 显示全部楼层
thnx!
发表于 2016-9-17 21:30:06 | 显示全部楼层
找了好久的资料,谢谢楼主!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-24 12:25 , Processed in 0.028428 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表