程序如下
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 |