从SRAM中读写一个数据问题——Verilog
2009-04-24 14:21
从SRAM中读写一个数据问题——Verilog
操作SRAM(IS63lv1024),向SRAM写入一个数据;并从SRAM中读出数据;如果读出的数据与写入的一样,说明写读成功,LED2闪烁,否则,SRAM操作不成功。
现在一直没有实验成功,请高手指教,谢谢!

HDL语言:VERILOG
CPLD芯片:XC95144XL-10T100I
SRAM芯片:IS63lv1024
晶振:40M
LED2电路已经可行。

以下是程序:
module OprateSRAM(clk,key,Addr_OUT,_CE_OUT,_OE_OUT,_WE_OUT,LED2_Flash,LED5_Flash,DMX_out1,DATA_INOUT);
input clk;
input key;
output _CE_OUT;
output _OE_OUT;
output _WE_OUT;
output LED2_Flash;
output LED5_Flash;
output DMX_out1;
output[15:0] Addr_OUT;
inout[7:0] DATA_INOUT;
reg [15:0] Addr_OUT_reg;
reg _CE_OUT_reg;
reg _OE_OUT_reg;
reg _WE_OUT_reg;
reg DMX_out1_reg;
reg [7:0] DATA_WRITE_BUFFER;
wire [7:0] DATA_READ_BUFFER;
reg [7:0] DATA_READ_BUFFER2;
wire r_en = _WE_OUT & (~_CE_OUT) & (~_OE_OUT);
wire w_en = (~_WE_OUT) & (~_CE_OUT);

//reg SRAM_RE_WR_OK;
reg LED2_Flash_reg_1Hz_buffer; // buffer,middile
reg LED2_Flash_reg;        // putout
reg [21:0] LED2_Flash_1Hz_count; // count
reg LED5_Flash_reg;
reg [5:0] state;
reg WR_RD_Return;
parameter
IDLE    = 6'b000_001,
READY    = 6'b000_010,
WR_DataNew = 6'b000_100,
WR_AddrNew = 6'b001_000,
RD_DataNew = 6'b010_000,
RD_AddrNew = 6'b100_000,
   WR       = 1,
   RD     = 0;

assign LED2_Flash = LED2_Flash_reg;
assign LED5_Flash = LED5_Flash_reg;
assign DMX_out1 = DMX_out1_reg;
assign _WE_OUT   = _WE_OUT_reg;
assign _CE_OUT   = _CE_OUT_reg;
assign _OE_OUT   = _OE_OUT_reg;
assign DATA_INOUT = w_en? DATA_WRITE_BUFFER:8'bz;
assign DATA_READ_BUFFER = r_en? DATA_INOUT:8'bz;
assign Addr_OUT = Addr_OUT_reg;
initial
begin
   state <= IDLE;
   WR_RD_Return <= WR;
   Addr_OUT_reg <= 16'b0000_0000_0000_0000;
end
/*******************************************************************
* description: use to creat 1Hz wave,
*    LED2 flashing to show the CPLD running
*******************************************************************/
always @ (posedge clk)
begin
   if(LED2_Flash_1Hz_count == 3999999)
begin
   LED2_Flash_1Hz_count <= 0;
   LED2_Flash_reg_1Hz_buffer <= 1'b0;
end
else
begin
   LED2_Flash_1Hz_count <= LED2_Flash_1Hz_count + 22'b0001;
   LED2_Flash_reg_1Hz_buffer <= 1'b1;
end
end
/*****************************************************************
* LED2 Flashing
* thought LED2 to check the operate
******************************************************************/
always @ (posedge LED2_Flash_reg_1Hz_buffer)
begin
   if (DATA_READ_BUFFER2 == 8'b0000_0001)
   begin   // if Write and read SROM OK, LED2 will flashing
if(LED2_Flash_reg == 1)
       LED2_Flash_reg <= 1'b0;
else
   LED2_Flash_reg <= 1'b1;
   end
   else
    LED2_Flash_reg <= 1'b1;
///*
   if (key == 1'b0)
   begin   // here ,the key putdown ,LED5 flashing ,test LED5 hardware
if(LED5_Flash_reg == 1)
       LED5_Flash_reg <= 1'b0;
else
   LED5_Flash_reg <= 1'b1;
   end
   else
    LED5_Flash_reg <= 1'b1;
//*/
end
/*******************************************************************
*
*   key , then push the key ,write one time and read one time
* SRAM IS63LV1024, to test SRAM operate
*
*********************************************************************/
always @(posedge clk)
begin
//使用状态机的读写SRAM程序
case(state)
IDLE:
   begin
   _CE_OUT_reg <= 1'b0;
   _OE_OUT_reg <= 1'b1;
   _WE_OUT_reg <= 1'b1;
    DATA_READ_BUFFER2 <= DATA_READ_BUFFER;
    if(WR_RD_Return == WR)
      state <= WR_AddrNew;
    else if(WR_RD_Return == RD)
   state <= RD_AddrNew;
    else
   state <= 0;
   end
READY:
       begin
       Addr_OUT_reg <= 16'b0000_0000_0000_0000;
   DATA_WRITE_BUFFER   <= 8'b0000_0000;
   state <= IDLE;
   end
WR_AddrNew:
   begin
   //Addr_OUT_reg <= Addr_OUT_reg + 16'b1;
    //DATA_WRITE_BUFFER   <= DATA_WRITE_BUFFER + 8'b1;
       Addr_OUT_reg <= 16'b0000_0000_0000_0001;
   DATA_WRITE_BUFFER   <= 8'b0000_0001;
   state <= WR_DataNew;
   end
WR_DataNew:
   begin
    _CE_OUT_reg <= 1'b0;
    _WE_OUT_reg <= 1'b0;
    _OE_OUT_reg <= 1'bz;
    WR_RD_Return <= RD;
   state <= IDLE;
   end
RD_AddrNew:
   begin
   Addr_OUT_reg <= 16'b0000_0000_0000_0001;
   
   state <= RD_DataNew;
   end
RD_DataNew:
   begin
    _WE_OUT_reg <= 1'b1;
    _CE_OUT_reg <= 1'b0;
    _OE_OUT_reg <= 1'b0;
    WR_RD_Return <= 1'bz;
    state <= IDLE;   
   end  
endcase  
end
endmodule

转载于:https://www.cnblogs.com/FPGA_DSP/archive/2010/02/23/1672192.html

转载 从SRAM中读写一个数据问题——Verilog相关推荐

  1. 【转】 Linux内核中读写文件数据的方法--不错

    原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法     有时候需要在Linuxkernel ...

  2. Linux内核中读写文件数据的方法

    Linux内核中读写文件数据的方法     有时候需要在Linuxkernel--大多是在需要调试的驱动程序--中读写文件数据.在kernel中操作文件没有标准库可用,需要利用kernel的一些函数, ...

  3. pandas使用query函数查询dataframe中某一个数据列在指定数据范围的数据行(rows where value is between two values in dataframe)

    pandas使用query函数查询dataframe中某一个数据列在指定数据范围的数据行(rows where value is between two values in dataframe) 目录

  4. (1)今有2018年1月1日—15日的猪肉价格和牛肉价格的数据,它们存在于一个Excel表格中,如下表所示。将其读入Python中并用一个数据框变量df保存......

    目录 (1)今有2018年1月1日-15日的猪肉价格和牛肉价格的数据,它们存在于一个Excel表格中,如下表所示.将其读入Python中并用一个数据框变量df保存. (2)分别绘制1月1日-10日的猪 ...

  5. 【python】 定义一个Person类,它包含数据成员age, name和gender。从Person中派生一个类Employee,在新类中添加一个数据成员,存储个人的number.等等

    # 定义一个Person类,它包含数据成员age, name和gender. # a. 从Person中派生一个类Employee,在新类中添加一个数据成员,存储个人的number. # 再从Empl ...

  6. C语言:向一个有序数组中插入一个数据,并保持数组的有序性。

    C语言:向一个有序数组中插入一个数据,保持数组的有序性. #include <stdio.h> //向一个有序数组中插入一个元素,重新实现有序,并输出. int main() {//注意数 ...

  7. mysql多表查询取出最后的数据_数据库多表查询,如何取A表中最后一个数据在B表中进行查找?...

    A表中有id user_id B表中有id phone a.user_id = b.id 需求:现在要取a.user_id最新的一个数据然后在B表中查找phone,并给b.phone发送短信= =.. ...

  8. 【转载】linux中误删除oracle数据文件的恢复操作

    转自:http://space.itpub.net/?uid-26015009-action-viewspace-itemid-763506 下面来模拟误删除users表空中的数据文件users01. ...

  9. 使用二分查找向一个有序数组中插入一个数据

    折半查找法找到一个元素在数组中的下标* @param arr 数组* @param key 要查找的元素* @return 找到则返回元素在数组中的下标,如果没找到,则返回这个元素在有序数组中的位置* ...

最新文章

  1. asp.net Core多环境读取Json
  2. js 矩阵转置_js对象数组矩阵转置(行转列)的实践
  3. Python学习笔记:常用内建模块7XML
  4. javaScript的使用(5)DOM事件
  5. 如何查找SAP Fiori launchpad Designer的准确路径即url地址
  6. js中的this指针(二)
  7. 我理解的invoke和begininvoke
  8. shell编程基础(七): 处理文件命令sed与awk
  9. 带你了解Typescript的14个基础语法
  10. python函数的特性_Python学习(007)-函数的特性
  11. 力软下拉框多选_力软快速开发平台:方便快捷的Web开发平台
  12. 以mysql为例的数据字典_建立数据字典
  13. Sketch教程|如何访问组件视图?
  14. 二等水准测量记录数据_二等水准测量外业数据整理(往返测).doc
  15. ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.
  16. loadrunner 12 --录制手机app脚本
  17. altium designer 入门视频教程 制作pcb教程视频
  18. 学大伟业 Day 4 培训总结
  19. 2018-2019-2 20165205 网络对抗技术 Exp7 网络欺诈防范
  20. java无法解析zip

热门文章

  1. tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法...
  2. pca各个向量之间的相关度_PCA主成分分析
  3. gcc/g++基本命令简介
  4. Win10+Ubuntu16.04/Ubuntu18.04双系统安装教程
  5. 数据结构c语言版第16页,数据结构c语言版
  6. 神经网络最常用的10个激活函数,一文详解数学原理及优缺点
  7. 神经网络Drop大法真香定律
  8. 产品经理必须知道的一点知识:三种方法判断一个产品该不该做
  9. 少儿编程150讲轻松学Scratch(七)-Scratch学习中需要注意的地方
  10. java jsonobject 转对象_解析JSON中JSONObject的高级使用