dram.v
上传用户:bltddc
上传日期:2020-07-09
资源大小:4428k
文件大小:2k
源码类别:

SCSI/ASPI

开发平台:

VHDL

  1. // picdram stands for PIC "Data" RAM.
  2. //
  3. //
  4. // Synchronous Data RAM, 8 bits wide, N words deep.
  5. //
  6. // ** Must support SYNCHRONOUS WRITEs and ASYNCHRONOUS READs **
  7. //    This is so that we can do a Read/Modify/Write in one cycle which
  8. //    is required to do something like this:
  9. //
  10. //       incf 0x20, f   // M[20] <= M[20] + 1
  11. //       incf 0x22, f   // M[22] <= M[22] + 1
  12. //       incf 0x18, f   // M[18] <= M[18] + 1
  13. //
  14. // Replace with your actual memory model..
  15. //
  16. module dram (
  17.    clk,
  18.    address,
  19.    we,
  20.    din,
  21.    dout
  22. );
  23. input clk;
  24. input [6:0] address;
  25. input we;
  26. input [7:0] din;
  27. output [7:0] dout;
  28. // Number of data memory words.  This is somewhat tricky, since remember
  29. // that lowest registers (e.g. special registers) are not really in this
  30. // data memory at all, but are explicit registers at the top-level.  Also,
  31. // the banking scheme has some of the other registers in each bank being
  32. // mapped to the same physical registers.  The bottom line is that for
  33. // the 16C57, you at most need to set this to 72.  Note we are reserving
  34. // the last 2 words for our little "expansion circuit" so we really want
  35. // only 70.
  36. //
  37. //
  38. // Copyright (c) 1999 Thomas Coonan (tcoonan@mindspring.com)
  39. //
  40. //    This source code is free software; you can redistribute it
  41. //    and/or modify it in source code form under the terms of the GNU
  42. //    General Public License as published by the Free Software
  43. //    Foundation; either version 2 of the License, or (at your option)
  44. //    any later version.
  45. //
  46. //    This program is distributed in the hope that it will be useful,
  47. //    but WITHOUT ANY WARRANTY; without even the implied warranty of
  48. //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  49. //    GNU General Public License for more details.
  50. //
  51. //    You should have received a copy of the GNU General Public License
  52. //    along with this program; if not, write to the Free Software
  53. //    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  54. //
  55. parameter word_depth = 70; // Maximum minus 2 words for expansion circuit demo
  56. //parameter word_depth = 24;  // This would be like a 16C54 
  57. // reg [6:0] address_latched; <--- NO!  We need ASYNCHRONOUS READs
  58. // Instantiate the memory array itself.
  59. reg [7:0] mem[0:word_depth-1];
  60. // Latch address <--- NO! 
  61. //always @(posedge clk)
  62. //   address_latched <= address;
  63.    
  64. // READ
  65. //assign dout = mem[address_latched];
  66. // ASYNCHRONOUS READ
  67. assign dout = mem[address];
  68. // SYNCHRONOUS WRITE
  69. always @(posedge clk)
  70.    if (we) mem[address] <= din;
  71. endmodule