laijiajian 发表于 2008-7-29 13:28:34

自己写的一个读写SRAM程序,请各位大侠指点~~

自己写的一个连续读写SRAM的程序,还没用芯片试验过,各位帮忙看看~~哈哈~~
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:    11:26:03 07/28/2008
// Design Name:
// Module Name:    SRAM
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module SRAM(ce,oe,we,lb,ub,io,a,clk);
input clk;                         //系统时钟
output ce,oe,we,lb,ub;            //读写使能信号
output a;                   //地址端口
inout io;                   //读写端口

//定义端口变量
wire clk;
wire io;
wire a;
reg ce,oe,we,lb,ub;

//定义寄存器变量
reg data_in_en;             //写使能信号,等于1时写数据到RAM中
reg data_in_reg;       //从RAM读数据进来时的寄存器
reg data_out_reg;      //CPLD写数据到RAM中的寄存器
reg a_in_en;               //地址写入使能,当CPLD写数据到RAM时为1
reg a_in_reg;          //写数据时的地址
reg a_out_reg;         //读数据时的地址
reg state;            //状态机状态

assign io=data_in_en?data_out_reg:16'hzzzz;   //读数据时输出高阻态再读,输出直接输出到RAM
assign a=a_in_en?a_in_reg:a_out_reg;         //读写地址输出

//状态变量赋值
parameter
idel=0,
start=1,
w1=2,
w2=3,
w3=4,
r1=5,
r2=6,
r3=7;

//初始化
initial
begin
state=0;
a_in_reg=0;
a_out_reg=0;
data_in_reg=0;
data_out_reg=0;
end

//状态机控制RAM的读写
always@(posedge clk)
begin
case(state)
idel:
        begin
        ce<=0; //
        we<=1; //
        oe<=1; ///////////初始状态,RAM输出高阻   
        lb<=0; //
        ub<=0; //   
        data_in_en<=1;    //写入使能CPLD发送数据到RAM
        a_in_en<=1;       //地址选择写入地址
       
        state<=start;
        end
       
start:
        begin
        if(data_in_en)
        state<=w1;
        else
        state<=r1;
        end
       
w1:                //开始写数据到RAM
        begin
        a_in_en<=1;   //写入地址使能,送写入地址信号到RAM,初始地址为18'b00_0000_0000_0000_0000
        ce<=0; //
        oe<=1; //
        we<=0; ///////////设置RAM写入使能
        lb<=0; //
        ub<=0; //
        state<=w2;
        end
       
w2:
        begin
        data_out_reg<=16'h1234;    //往写入寄存器赋值,写入数据发送到IO
        state<=w3;
        end
       
w3:
        begin
        a_in_reg<=a_in_reg+1;   //选择下一个地址继续
        ce<=0; //
        oe<=1; //
        we<=1; ////////////写入结束,RAM恢复输出高阻
        lb<=0; //
        ub<=0; //
        state<=start;            //回到开始状态判断进入读还是写
        end
       
r1:
        begin
        a_in_en<=0;            //读出地址使能,送读出地址到RAM
        ce<=0; //
        oe<=0; //
        we<=1; /////////////设置RAM读出使能
        lb<=0; //
        ub<=0; //
        state<=w2;
        end
       
r2:
        begin
        data_in_reg<=io;      //读出IO数据存储到读出寄存器中
        state<=r3;
        end
       
r3:
        begin
        a_out_reg<=a_out_reg+1;//读出下一个地址的数据
        ce<=0; //
        oe<=1; //
        we<=1; //////////////读出结束,RAM恢复输出高阻
        lb<=0; //
        ub<=0; //
        state<=start;       //回到开始状态判断进入读还是写
        end
       
default:
        state<=idel;
       
endcase
end

endmodule

bbq_sakura 发表于 2008-7-29 20:34:42

看不懂Verilog~帮顶~

yuexinjie 发表于 2010-3-4 20:48:59

看看学习中

CHENBINGSTER 发表于 2010-4-2 14:16:51

验证过没有呀

lzy_0323 发表于 2011-2-11 10:01:36

正需要,谢谢

cwfboy 发表于 2011-2-11 10:07:25

initial。。。

maomaolang007 发表于 2011-2-12 15:51:08

标记一下

gxhuangyifeng 发表于 2011-5-11 20:51:36

验证过告知一下,我也在搞
页: [1]
查看完整版本: 自己写的一个读写SRAM程序,请各位大侠指点~~