集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2497|回复: 5

sdram的verilog

[复制链接]
inter 发表于 2010-6-27 22:49:29 | 显示全部楼层 |阅读模式
本帖最后由 fpgaw 于 2010-7-11 11:03 编辑

`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:  
// Design Name:  
// Module Name:  sram_test
// Project Name:
// Target Device:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////
module sram_test( rst  ,
      clkin  ,
         
      sram_ab  ,
      sram_db  ,
      sram_wr  ,
      sram_rd  ,   
      sram_cs  ,
      sram_be  ,
     error,
      task_start , //Start  Testing ---LED1
      task_finish,//TestingFinish---LED2
  flash_ce,
  flash_oe,
  flash_we
  
     );
input   rst   ;
input   clkin ;

output [17:0] sram_ab ;
output [1:0]  sram_be ;
inout[15:0] sram_db ;
output    sram_wr ;
output    sram_rd ;
output    sram_cs ;
output error;
output    task_start ;
output    task_finish;  
output  flash_ce,flash_oe,flash_we;
//ports
wire    rst   ;
wire    clkin ;
         
reg  [17:0] sram_ab ;
wire [15:0] sram_db ;
reg     sram_wr ;
reg     sram_rd ;
         
reg     task_start ;
reg     task_finish;
wire flash_ce=1;
wire flash_oe=1;
wire flash_we=1;
reg     clk_2;
wire    clk;
reg[2:0]  STATE,NEXT;
reg     error ;
reg[15:0] sram_db_reg;
reg[15:0] count  ;
//parameters
parameter IDLE = 3'D0,
     WRITE_1= 3'D1,
     WRITE_2= 3'D2,
     READ_1 = 3'D3,
     READ_2 = 3'D4;

assignsram_cs = 1'b0;
assignsram_be = 2'd0;   
assignsram_db = sram_rd ? sram_db_reg:'hz;

reg [1:0] clk_count;
always @(posedge clkin or negedge rst)
if(!rst)
begin
clk_count<=2'd0;
end
else
begin
  clk_count<=clk_count+1'b1;
end
assign clk = clk_count[1];

//state machine   
always @ (STATE or sram_ab or error or task_start)
begin
case(STATE)
IDLE  : if(task_start)
       NEXT = WRITE_1;
     else
       NEXT = IDLE ;
WRITE_1 : NEXT = WRITE_2;
WRITE_2 : if( sram_ab >= 18'h3ffff)
       NEXT = READ_1;
     else
       NEXT = WRITE_1;
READ_1: NEXT = READ_2;
READ_2: if(sram_ab >= 18'h3ffff)//error ||
       NEXT = IDLE;
     else
       NEXT = READ_1;
default : NEXT = IDLE ;
endcase
end

//registe the state
always @ (posedge clk or negedge rst)
if(!rst)
  STATE <= IDLE;
else
  STATE <= NEXT;


always @ (posedge clk or negedge rst)
if(!rst)
  begin
  sram_ab  <=18'h3ffff;
  sram_db_reg<=16'h1fff;
  sram_wr  <=1'b1;
  sram_rd  <=1'b1;
  end
else
  case(STATE)
  IDLE  : begin
      sram_rd <= 1;
      sram_wr <= 1;
    end
  WRITE_1 : begin
      sram_ab <= sram_ab+1;
      sram_db_reg <= sram_db_reg+1;
      sram_wr <= 1'b0;
      sram_rd <= 1'b1;
    end
  WRITE_2 : begin
      sram_wr<= 1'b1;
      sram_rd<= 1'b1;
    end
  READ_1: begin
      sram_ab <= sram_ab+1;
      sram_wr <= 1'b1;
      sram_rd <= 1'b0;
      sram_db_reg <= 'h1fff;
    end
  endcase

always @ (posedge clk or negedge rst)  
if(!rst)            
begin            
   error  <= 1'b0;
   task_start <= 1'b1;
   task_finish<= 1'b0;
   count  <= 16'h1fff;         
end            
else            
case(STATE)
        
WRITE_1 : //if( sram_ab < 'd1024 )
     begin         
      task_start <= 1'b1;
      count  <= 16'h1fff;
     end
READ_1: begin
     count<=count+1;
     end                     
READ_2: begin         
     if( sram_db != count)
       error <= 1'b1;
      else
      begin      
       error <= 1'b0;
       if(sram_ab >= 18'h3ffff)
        begin
         task_finish <= 1'b1;
         //task_start<= 1'b1;
        end
      end   
     end         
endcase           

endmodule
UFO 发表于 2010-6-27 23:33:17 | 显示全部楼层
希望对大家有帮助
usd 发表于 2010-6-28 00:58:30 | 显示全部楼层
en ,bucuo
pengdan0905 发表于 2011-8-29 16:11:04 | 显示全部楼层
请问这是sram的还是sdram的程序呀?
pengdan0905 发表于 2011-8-29 16:11:15 | 显示全部楼层
请问这是sram的还是sdram的程序呀?
pengdan0905 发表于 2011-8-29 16:35:56 | 显示全部楼层
有些乱码,运行和修改了下不知道对不对:
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:  
// Design Name:  
// Module Name:  sram_test
// Project Name:
// Target Device:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////
module sdr_test2( rst  ,
      clkin  ,
         
      sram_ab  ,
      sram_db  ,
      sram_wr  ,
      sram_rd  ,   
      sram_cs  ,
      sram_be  ,
     error,
      task_start , //Start  Testing ---LED1
      task_finish,//TestingFinish---LED2
  flash_ce,
  flash_oe,
  flash_we
  
     );
input   rst   ;
input   clkin ;

output [17:0] sram_ab ;
output [1:0]  sram_be ;
inout[15:0] sram_db ;
output    sram_wr ;
output    sram_rd ;
output    sram_cs ;
output    error;
output    task_start ;
output    task_finish;  
output  flash_ce,flash_oe,flash_we;
//ports
wire    rst   ;
wire    clkin ;
         
reg  [17:0] sram_ab ;
wire [15:0] sram_db ;
reg     sram_wr ;
reg     sram_rd ;
         
reg     task_start ;
reg     task_finish;
wire flash_ce=1;
wire flash_oe=1;
wire flash_we=1;
reg     clk_2;
wire    clk;
reg[2:0]  STATE,NEXT;
reg     error ;
reg[15:0] sram_db_reg;
reg[15:0] count  ;
//parameters
parameter IDLE = 3'D0,
     WRITE_1= 3'D1,
     WRITE_2= 3'D2,
     READ_1 = 3'D3,
     READ_2 = 3'D4;

assign sram_cs = 1'b0;
assign sram_be = 2'd0;   
assign sram_db = sram_rd ? sram_db_reg:'hz;

reg [1:0] clk_count;
always @(posedge clkin or negedge rst)
if(!rst)
begin
clk_count<=2'd0;
end
else
begin
  clk_count<=clk_count+1'b1;
end
assign clk = clk_count[1];

//state machine   
always @ (STATE or sram_ab or error or task_start)
begin
case(STATE)
IDLE  : if(task_start)
       NEXT = WRITE_1;
     else
       NEXT = IDLE ;
WRITE_1 : NEXT = WRITE_2;
WRITE_2 : if( sram_ab <= 18'h3ffff)
       NEXT = READ_1;
     else
       NEXT = WRITE_1;
READ_1: NEXT = READ_2;
READ_2: if(sram_ab <= 18'h3ffff)//error ||
       NEXT = IDLE;
     else
       NEXT = READ_1;
default : NEXT = IDLE ;
endcase
end

//registe the state
always @ (posedge clk or negedge rst)
if(!rst)
  STATE <= IDLE;
else
  STATE <= NEXT;


always @ (posedge clk or negedge rst)
if(!rst)
  begin
  sram_ab  <=18'h3ffff;
  sram_db_reg<=16'h1fff;
  sram_wr  <=1'b1;
  sram_rd  <=1'b1;
  end
else
  case(STATE)
  IDLE  : begin
      sram_rd <= 1;
      sram_wr <= 1;
    end
  WRITE_1 : begin
      sram_ab <= sram_ab+1;
      sram_db_reg <= sram_db_reg+1;
      sram_wr <= 1'b0;
      sram_rd <= 1'b1;
    end
  WRITE_2 : begin
      sram_wr<= 1'b1;
      sram_rd<= 1'b1;
    end
  READ_1: begin
      sram_ab <= sram_ab+1;
      sram_wr <= 1'b1;
      sram_rd <= 1'b0;
      sram_db_reg <= 'h1fff;
    end
  endcase

always @ (posedge clk or negedge rst)  
if(!rst)            
begin            
   error  <= 1'b0;
   task_start <= 1'b1;
   task_finish<= 1'b0;
   count  <= 16'h1fff;         
end            
else            
case(STATE)
        
WRITE_1 : //if( sram_ab &lt; 'd1024 )
     begin         
      task_start <= 1'b1;
      count  <= 16'h1fff;
     end
READ_1: begin
     count<=count+1;
     end                     
READ_2: begin         
     if( sram_db != count)
       error <= 1'b1;
      else
      begin      
       error <= 1'b0;
       if(sram_ab <= 18'h3ffff)
        begin
         task_finish <= 1'b1;
         //task_start&lt;= 1'b1;
        end
      end   
     end         
endcase           

endmodule
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-24 10:24 , Processed in 0.066947 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表