找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1966|回复: 10
收起左侧

CPLD 讀寫 SRAM 問題

[复制链接]
ID:254256 发表于 2019-3-28 10:16 | 显示全部楼层 |阅读模式
請問為什讀寫SRAM 是 用  data_out[7:0] = mem1[addr];
xxx = mem1[addr] 為什這樣可以取出SRAM  的資料

mem2[addr] = xxxx;  
為什這樣可以寫入 SRAM  的資料

為什  mem1[addr] 可以代表 SRAM 裡的資料



//--------------------------------------------------------程式代碼
module idt71v416s15(data, addr, we_, oe_, cs_, ble_, bhe_);

inout [15:0] data;
input [17:0] addr;
input we_, oe_, cs_, bhe_, ble_;


reg [7:0] mem1[0:262143];
reg [7:0] mem2[0:262143];
time adr_chng,da_chng,we_fall,we_rise,cs_fall,cs_rise;
time oe_fall,oe_rise,ble_fall,ble_rise,bhe_fall,bhe_rise;
wire [15:0] data_in;
reg  [15:0] data_out;
reg  [15:0] temp1,temp2,temp3;
reg outen, out_en, in_en;

initial
  begin
      in_en = 1'b1;
      if (cs_)
          out_en = 1'b0;
  end
// input/output control logic
//---------------------------
assign data   = out_en ? data_out : 'hzzzz;
assign data_in = in_en ? data : 'hzzzz;
// read access
//------------
always @(addr)
      if (cs_==0 & we_==1) begin           //read
          fork
          if(~ble_)
              #Taa data_out[7:0] = mem1[addr];
          else #Taa data_out[7:0] = 'hzz;
              if(~bhe_)
                 #Taa data_out[15:8] = mem2[addr];
              else #Taa data_out[15:8] = 'hzz;
          join
      end


always @(addr)
  begin
      adr_chng = $time;
      outen  = 1'b0;
      #Toh out_en = outen;
//---------------------------------------------
      if (cs_==0 & we_==1)                 //read
      begin
          if (oe_==0)
          begin
              outen = 1'b1;
              out_en = 1'b1;
          end
      end
//---------------------------------------------
      if (cs_==0 & we_==0)                 //write
      begin
          if (oe_==0)
          begin
              outen = 1'b0;
              out_en = 1'b0;
              temp1 = data_in;
              fork
                if(~ble_)
                   #Tdw mem1[addr] = temp1[7:0];
                if(~bhe_)
                   #Tdw mem2[addr] = temp1[15:8];
              join
          end
          else
          begin
              outen = 1'b0;
              out_en = 1'b0;
              temp1 = data_in;
              fork
                if(~ble_)
                  #(Tdw-Toh) mem1[addr] = temp1[7:0];
                if(~bhe_)
                  #(Tdw-Toh) mem2[addr] = temp1[15:8];
              join
          end
          if(~ble_)
              data_out[7:0] = mem1[addr];
          else data_out[7:0] = 'hzz;
          if(~bhe_)
              data_out[15:8] = mem2[addr];
          else data_out[15:8] = 'hzz;
      end
  end




回复

使用道具 举报

ID:123289 发表于 2019-3-28 11:14 | 显示全部楼层
你需要查:mem1[addr] 的定义(或函数功能程序)。
回复

使用道具 举报

ID:158375 发表于 2019-3-28 11:25 | 显示全部楼层
没有问什么,你看看data_out[7:0] = mem1[addr]; 和 mem2[addr] = xxxx;编译后的汇编就明白了。
回复

使用道具 举报

ID:254256 发表于 2019-3-28 13:02 | 显示全部楼层
笨笨兔 发表于 2019-3-28 11:25
没有问什么,你看看data_out[7:0] = mem1[addr]; 和 mem2[addr] = xxxx;编译后的汇编就明白了。

可以解釋一下嗎
回复

使用道具 举报

ID:254256 发表于 2019-3-28 13:03 | 显示全部楼层
yzwzfyz 发表于 2019-3-28 11:14
你需要查:mem1[addr] 的定义(或函数功能程序)。

定義在這啊

reg [7:0] mem2[0:262143];
回复

使用道具 举报

ID:401564 发表于 2019-3-28 17:18 | 显示全部楼层
兄弟,在这大多是学单片机的,而且大多还是8051为主的,我就是其中之一
用CPLD的人真不多,我估计可能有人会把你这段代码当成是C语言来看了
那玩意跟单片机还是有很多不同的地方的,编程思路也是不太一样的,一般人玩不来
还是自己慢慢解决问题吧
回复

使用道具 举报

ID:254256 发表于 2019-3-28 23:22 | 显示全部楼层
Y_G_G 发表于 2019-3-28 17:18
兄弟,在这大多是学单片机的,而且大多还是8051为主的,我就是其中之一
用CPLD的人真不多,我估计可能有人会把 ...

不會吧一定有高手
我不搞8051 了
搞STM32 後改搞CPLD 太靈活了
你要100 個定時器也有
回复

使用道具 举报

ID:401564 发表于 2019-3-29 00:30 | 显示全部楼层
u012801 发表于 2019-3-28 23:22
不會吧一定有高手
我不搞8051 了
搞STM32 後改搞CPLD 太靈活了

既然你都学了硬件描述语言,那就是已经有了基础了,干脆直接转FPGA,那难度大,但工资老高了
回复

使用道具 举报

ID:254256 发表于 2019-3-29 00:42 | 显示全部楼层
自己搞不到一個月
寫了按鍵去抖
及流水燈
其他什都不會

那個問題是不是像D 類觸發器
有人可以解答嗎

為什  mem1[addr] 可以代表 SRAM 裡的資料

為什啊
回复

使用道具 举报

ID:575109 发表于 2020-10-5 00:36 来自手机 | 显示全部楼层
reg [7:0] mem1[0:262143];在内部已经定义了一个数组,数组字节宽度8bit 深度262144,就是用内部寄存器组代替sram存储资料
回复

使用道具 举报

ID:83553 发表于 2020-10-5 08:56 | 显示全部楼层
什么芯片能定义这么大的数组?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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