打印

自己写的一个控制SRAM的程序,不能编译,请大家指点

[复制链接]
1211|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1dqmoon|  楼主 | 2008-8-29 13:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下

SRAM是通过地址加数据,用8080时序完成的, 我想用CPLD转成类似6800时序的操作。 

写数据时,在e的下降沿下, 第一次送高位地址,第二次是低位地址,第三次是数据,再有两次来产生SRAM的写信号。

读数据与上面方式类似,只是后面产生SRAM的读信号。

程序编译时停在
temp <= Internal_bus1;
RamDa<=temp;

hostda<=Internal_bus2;

这里,RamDa是cpld到sram的数据口,hostda是单片机到CPLD的数据口,两个为双向口。

这个是怎么回事啊,要怎么改好呢?


module ram(e, rw, rst, hostda, RamAddrH, RamAddrL, RamDa, RamWr, RamRd);
    input e;
    input rw;
     input rst;
    inout [7:0] hostda;
    output [7:0] RamAddrH;
    output [7:0] RamAddrL;
    inout [7:0] RamDa;
    output RamWr;
    output RamRd;
     
reg [7:0] RamAddrH;
reg [7:0] RamAddrL;
reg RamWr;
reg RamRd;
integer temp;

reg [7:0] Internal_bus1;
reg [7:0] Internal_bus2;
reg [3:0] e_counter;
assign hostda=(rw==0)?Internal_bus1:8'bz;
assign RamDa=(rw==1)?Internal_bus2:8'bz;

always @(negedge e or rw)
begin
  if(rst==0)
  begin
    RamAddrH=0;
     RamAddrL=0;
     RamWr=1;
     RamRd=1;
     e_counter<=0;
  end
  else
    begin
      if(rw==0)
      begin
        e_counter<=e_counter+1;
         if(e_counter==1)
         begin
           RamAddrH<=Internal_bus1;
         end
         
         if(e_counter==2)
         begin
           RamAddrL<=Internal_bus1;
         end
         
         if(e_counter==3)
         begin
           ////RamDa<=Internal_bus1;
            temp <= Internal_bus1;
            RamDa<=temp;
         end
         
         if(e_counter==4)
         begin
           RamWr<=0;
         end
         
         if(e_counter==5)
         begin
           RamWr<=1;
            e_counter<=0;
         end
     end
     else
     begin
        e_counter<=e_counter+1;
         if(e_counter==1)
         begin
           RamAddrH<=Internal_bus1;
         end
         
         if(e_counter==2)
         begin
           RamAddrL<=Internal_bus1;
         end
         
         if(e_counter==3)
         begin
           RamRd<=0;
         end
         
         if(e_counter==4)
         begin
           hostda<=Internal_bus2;
         end
         
         if(e_counter==5)
         begin
           RamRd<=1;
            e_counter<=0;
         end
    end
end
end     

endmodule

相关帖子

沙发
steventsan| | 2008-8-29 23:55 | 只看该作者

这是在写软件,看来阁下根本没有入门

从头到尾一个 always 块 ,没有时序的概念 组合逻辑中 阻塞赋值 非阻塞赋值 混用 。。。。实在看不下去

使用特权

评论回复
板凳
flyingwxj| | 2008-9-11 15:15 | 只看该作者

确实没法看

always @(negedge e or rw)
这算什么?边沿和电平敏感信号一起出现。后面就更没法看了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

253

帖子

0

粉丝